Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1464to1468
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Fehlstellen Zeilen einfügen

Fehlstellen Zeilen einfügen
10.01.2016 06:45:14
Reimund
Hallo Excellisten,
habe eine Tabelle über mehrere Jahre mit Umsatzzahl pro Monat.
Nun ist es relativ einfach daraus ein Diagramm mit Auswahl Jahr x bis Jahr y zu erstellen. Leider fehlen ab und zu einige Monate.
Die möchte ich vorher mit VBA in der Tabelle mit Wert 0 einfügen, damit im Jahr alle Monate drin sind.
?
Mustertabelle anbei
https://www.herber.de/bbs/user/102697.xlsx
Danke und Gruß
Reimund

24
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Fehlstellen Zeilen einfügen
10.01.2016 07:01:53
Reimund
Nachtrag
Es ist egal welcher Tag. Es kann auch immer er Erste des Monats sein.
Das Gleiche brauche ich noch für Kalenderwochen, statt Monate also kw.

AW: Fehlstellen Zeilen einfügen
10.01.2016 09:55:53
Hajo_Zi
Hallo Reimund,
habe ich das falsch gelesen. Du möchtest ein Makro haben? In einer XLSX Datei kann kein Makro sein. Warum soll ich die Datei 2x bei mir speichern.
Wurde ein Diagramm fehlende Monate nicht automatisch ergänzen?

AW: Fehlstellen Zeilen einfügen
10.01.2016 10:04:31
Reimund
Hei Hajo,
Nicht Makro, sondern mit VBA.
Das Diagramm braucht ja eine Abszisse, die alle Werte hat.
Hier sind es die Monate (kw) die aber in der Tabelle unvollständig sind, und müssen dort erst noch eingefügt werden.
Gruß Reimnd

Anzeige
AW: Fehlstellen Zeilen einfügen
10.01.2016 10:06:24
Hajo_Zi
Hallo Reimund,
Gut dann hast Du mehr Ahnung als ich.
Ich hätte Makro als VBA Angesehen.
Ich bin dann raus.
Vielleicht löst es jemand ohne Makro.
Gruß Hajo

AW: Fehlstellen Zeilen einfügen
10.01.2016 10:20:34
Reimund
HAjo,
irgendwie ist etwas unklar von mir.
Die Musterdatei ist nur als Ansicht von mir gestellt worden. Ist also keine xlsm.
Und die Lösung geht ja nur mittels VBA, egal wie Ob mit Makro oder Function oder..

AW: Fehlstellen Zeilen einfügen
10.01.2016 09:37:23
Dieter(Drummer)
Hallo Reimund,
habe das im Herber Forum gefunden. Hier musst du nur VOR dem Makroaufruf die Spalte markieren, in der die NULL gesetzt werden soll. Ich habe das Makro geringfügig geändert und es funktioniert. Spezialisten könne sicher das Makro so ändern, dass die Spalte E, in deinem Fall, direkt genutzt wird, also nicht vorher markiert werden muss:
In Modul:
Option Explicit
'von Herber: Mag. Geschrieben am: 23.11.2005 15:45:21
Sub Test()
Dim Zelle, Bereich As Range
Set Bereich = Selection
For Each Zelle In Bereich
If Zelle.Value = "" Then Zelle.Value = 0
Next
End Sub

Gruß, Dieter(Drummer)

Anzeige
AW: Fehlstellen Zeilen einfügen
10.01.2016 09:44:41
Reimund
Hallo Dieter,
Danke, aber das hast Du missverstanden.
Es gibt ja keine leere Zelle, denn die Zeile fehlt ja noch und soll ja erst "insertet" werden.

AW: Fehlstellen Zeilen einfügen
10.01.2016 09:49:12
Reimund
hatte vergessen, unerledigt Häkchen zu setzen

AW: Da kann ich nicht weiter helfen. owT.
10.01.2016 09:51:55
Dieter(Drummer)

AW: Fehlstellen Zeilen einfügen
10.01.2016 10:23:11
Reimund
der verdammte Haken fehlte wieder

AW: Fehlstellen Zeilen einfügen
10.01.2016 10:47:16
Sepp
Hallo Reimund,
in ein allgemeines Modul.
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Sub fillGaps()
Dim rng As Range, varIn As Variant, varOut() As Variant
Dim lngI As Long, lngN As Long, lngM As Long, lngMin As Long, lngMax As Long

With Sheets("Tabelle1") 'Tabellenname - Anpassen!
  Set rng = Range("A1").CurrentRegion
  varIn = rng
  lngMin = Application.Min(rng.Columns(1))
  lngMax = Application.Max(rng.Columns(1))
  lngN = DateDiff("M", lngMin, lngMax) + 2
  Redim varOut(1 To lngN, 1 To 2)
  varOut(1, 1) = varIn(1, 1)
  varOut(1, 2) = varIn(1, 2)
  For lngI = 2 To lngN
    If DateSerial(Year(varIn(lngM + 2, 1)), Month(varIn(lngM + 2, 1)), 1) = _
      DateSerial(Year(lngMin), Month(lngMin) + lngI - 2, 1) Then
      varOut(lngI, 1) = varIn(lngM + 2, 1)
      varOut(lngI, 2) = varIn(lngM + 2, 2)
      lngM = lngM + 1
    Else
      varOut(lngI, 1) = DateSerial(Year(lngMin), Month(lngMin) + lngI - 2, 1)
      varOut(lngI, 2) = 0
    End If
  Next
  .Range("A1").Resize(UBound(varOut, 1), UBound(varOut, 2)) = varOut
End With

End Sub

Gruß Sepp

Anzeige
AW: Fehlstellen Zeilen einfügen
10.01.2016 11:48:10
Reimund
Danke Sepp,
aber es kommt immer Laufzeitfehler 13. Typen unverträglich. In der for schleife.

AW: Fehlstellen Zeilen einfügen
10.01.2016 12:29:18
Sepp
Hallo Reimund,
bei mir in deiner Datei nicht! Also muss bei dir etwas anders sein!
Gruß Sepp

AW: Fehlstellen Zeilen einfügen
10.01.2016 15:00:10
Reimund
Tja Sepp,
ist schon komisch
Versteh ich nicht. er meckert über Range("A1").CurrentRegion
Hatte zur Sicherheit die "xx" in Zahlen geändert, hatte aber nichts gebracht
Habe nochmal meine Datei angehangen.
https://www.herber.de/bbs/user/102698.xlsm

Anzeige
AW: Fehlstellen Zeilen einfügen
10.01.2016 15:38:13
Sepp
Hallo Reimund,
ich dachte, das IST in der ersten Zeile sei nur zur Veranschaulichung, deshalb hatte ich diese Zeile entfernt! Wenn die Überschriften in A2:B2 stehen, dann so.
Sub fillGaps()
Dim rng As Range, varIn As Variant, varOut() As Variant
Dim lngI As Long, lngN As Long, lngM As Long, lngMin As Long, lngMax As Long

With Sheets("Tabelle1") 'Tabellenname - Anpassen!
  Set rng = Range("A2:B" & Application.Max(2, .Cells(.Rows.Count, 1).End(xlUp).Row))
  
  varIn = rng
  lngMin = Application.Min(rng.Columns(1))
  lngMax = Application.Max(rng.Columns(1))
  lngN = DateDiff("M", lngMin, lngMax) + 2
  Redim varOut(1 To lngN, 1 To 2)
  varOut(1, 1) = varIn(1, 1)
  varOut(1, 2) = varIn(1, 2)
  For lngI = 2 To lngN
    If DateSerial(Year(varIn(lngM + 2, 1)), Month(varIn(lngM + 2, 1)), 1) = _
      DateSerial(Year(lngMin), Month(lngMin) + lngI - 2, 1) Then
      varOut(lngI, 1) = varIn(lngM + 2, 1)
      varOut(lngI, 2) = varIn(lngM + 2, 2)
      lngM = lngM + 1
    Else
      varOut(lngI, 1) = DateSerial(Year(lngMin), Month(lngMin) + lngI - 2, 1)
      varOut(lngI, 2) = 0
    End If
  Next
  .Range("A1").Resize(UBound(varOut, 1), UBound(varOut, 2)) = varOut
End With

End Sub

Gruß Sepp

Anzeige
AW: Fehlstellen Zeilen einfügen
10.01.2016 16:58:26
Reimund
Vielen Dank Walter und Sepp.
Sepp, hattest Recht, das soll- ist war nur zur Veranschaulichung.
Aber ich wusste ja nicht, dass Du es gelöscht hattest.
Jetzt klappt es prima; nur, dass die ergänzten Felder den Wert 0 bekommen sollen.
Und dann noch das Gleiche mit datum für alle kw statt Monat ?
Reimund

AW: Fehlstellen Zeilen einfügen
10.01.2016 17:36:04
Sepp
Hallo Reimund,
bei meinem Code wird 0 in die entsprechenden Zellen geschrieben!
Wie sieht den die Tabelle mit den KW's aus? Was steht in den Zellen?
Gruß Sepp

Anzeige
AW: Fehlstellen Zeilen einfügen
10.01.2016 17:43:13
Reimund
Hi Sepp,
ich glaube, das ist doch zu schwierig, denn meine Liste besteht schon aus gefilterten Daten. Und da scheint es nicht zu klappen.
Lege es erst mal auf Eis.
Ich versuch etwas Neues.
Oder ich schicke in den nächsten Tagen mal die komplette Mappe.
Vorerst vielen Dank,
auch an die Anderen.
Gruß
Reimund

AW: Fehlstellen Zeilen einfügen
10.01.2016 17:48:57
Daniel
Es ist meisten besser, gleich die vollständige Problemstellung zu schildern, als hier nur eine stark vereinfachtes Beispiel vorzustellen.
den stark vereinfachte Beispiele ergeben auch einfache Lösungen, die dann für die eigentliche Problemstellung nicht mehr passen und oft auch gar nicht so einfach zu adaptieren sind sondern andere Löungsansätze erfordern.
Gruss, Daniel

Anzeige
AW: Fehlstellen Zeilen einfügen
10.01.2016 17:21:13
Daniel
HI
hier nochmal eine Codealternative, mit einem etwas anderem Lösungansatz, welchen man bei Bedarf auch manuell, mit wenigen Klicks auführen kann:
Sub test()
With Columns(1).SpecialCells(xlCellTypeConstants, 1).Offset(0, 3)
.FormulaR1C1 = "=Date(Year(RC1), Month(RC1), 1)"
.Formula = .Value
.RemoveDuplicates 1, xlNo
.Cells(1, 1).Offset(0, 1) = WorksheetFunction.Min(.Cells)
.Cells(1, 1).Offset(0, 1).DataSeries Rowcol:=xlColumns, _
Type:=xlChronological, Date:=xlMonth, Step:=1, _
Stop:=WorksheetFunction.Max(.Cells), Trend:=False
With .Cells(1, 1)
Range(.Offset(0, 1), .Offset(0, 1).End(xlDown)).Copy
.End(xlDown).Offset(1, 0).PasteSpecial xlPasteAll
Range(.Cells, .End(xlDown)).RemoveDuplicates 1, xlNo
On Error GoTo weiter
Selection.SpecialCells(xlCellTypeConstants, 1).Copy
On Error GoTo 0
Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).PasteSpecial xlPasteAll
Selection.Offset(0, 1).Value = 0
Selection.NumberFormat = Selection.Cells(1).Offset(-1, 0).NumberFormat
Columns(1).SpecialCells(xlCellTypeConstants, 1).Resize(, 2).Sort _
key1:=Cells(1, 1), order1:=xlAscending, Header:=xlNo
weiter:
.EntireColumn.Resize(, 2).ClearContents
End With
End With
End Sub
eine Anpassung an Kalenderwochen dürfte auch nicht so schwer sein, wenn in Spalte A die Kalenderwoche als Zahl von 1-52 steht.
angepasst werden müssten dann diese beiden Programmzeilen:
    .FormulaR1C1 = "=Date(Year(RC1), Month(RC1), 1)"
.Cells(1, 1).Offset(0, 1).DataSeries Rowcol:=xlColumns, _
Type:=xlChronological, Date:=xlMonth, Step:=1, _
Stop:=WorksheetFunction.Max(.Cells), Trend:=False
hier würde dann ausreichen:
.FormulaR1C1 = "=RC1"

und
    .Cells(1, 1).Offset(0, 1).DataSeries Rowcol:=xlColumns, _
Type:=xlLinear, Step:=1, _
Stop:=WorksheetFunction.Max(.Cells), Trend:=False
gruss Daniel

Anzeige
AW: Fehlstellen Zeilen einfügen
10.01.2016 17:47:46
Reimund
Vielen Dank Daniel,
werde es auch ausprobieren, aber ich glaube es gibt andere Probleme, weil meine Liste scon aus gefilterten Daten besteht.
Lass es bitte auf Eis.
Ich versuchs mal anders.
Reimund

AW: Fehlstellen Zeilen einfügen
10.01.2016 17:51:25
Daniel
Scherzkeks.
Sag sowas doch gleich.
Beschreibe das Problem so wie es ist, dann kann man auch eine passende Lösung dafür erarbeiten.
Gruss Daniel

AW: Fehlstellen Zeilen einfügen
10.01.2016 17:56:32
Reimund
Nun Ja, ich wollte es einfacher beschreiben .....
Und !! ich bin kein Scherzkeks sondern ein Glückskeks, gefüllt mit 72 Jahren!!!!!!!!!!!!!!!!
Liebe Grüße
Reimund

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige