Supportnet / Forum / Tabellenkalkulation
Makro zum Datumsvergleich
Frage
Hallo zusammen,
Ich habe ein Problem bei der Umsetzung einer gestellten Aufgaben. Ich habe mir für die Umsetzung dieser Aufgabe ein eigendes Makro programmiert. Dieses funktioniert soweit auch, nur habe ich mit folgender Sache ein Problem. Ich vergleiche zwei Spalten, in denen jeweils ein Datum enthalten ist miteinander z.B
Spalte A Spalte B Spalte C
13.09.2005 12.09.2005 Eins oder Null
Wenn das Datum in Spalte B kleiner ist als das Datum in Spalte A wird in Spalte C eine Eins hineingeschrieben z.b.w in der Spalte C steht dann die Formel: =WENN(B2<=A2;1;0) Ist das Datum in Spalte B größer als das Datum in Spalte A wird eine Null in Spalte C geschrieben.
Wie gesagt funktioniert das Makro und nach dem Durchlauf dieses steht in der Spalte C die angegebende Formel:=WENN(B2<=A2;1;0) . Leider werden die Datumsangeben nicht so recht erkannt, selbst
wenn die Spalten als Datumfeld definiert wurde. Ich muss nach dem Durchlauf jeweils in die einzelne Datumszelle springen und das Datum mit der Enter-Taste bestätigen.
Nachdem ich dies durchgeführt habe erkennt die Formel die Datumsangaben und in den einzelnen Zellen der Spalte C werden die richtigen Ergebnisse angezeigt.
Hat jemand irgend eine Ahnung an was das liegen kann und wie ich dieses Problem lösen kann.
Gruss
Ingo --- Hallo zusammen,
Ich habe ein Problem bei der Umsetzung einer gestellten Aufgaben. Ich habe mir für die Umsetzung dieser Aufgabe ein eigendes Makro programmiert. Dieses funktioniert soweit auch, nur habe ich mit folgender Sache ein Problem. Ich vergleiche zwei Spalten, in denen jeweils ein Datum enthalten ist miteinander z.B
Spalte A Spalte B Spalte C
13.09.2005 12.09.2005 Eins oder Null
Wenn das Datum in Spalte B kleiner ist als das Datum in Spalte A wird in Spalte C eine Eins hineingeschrieben z.b.w in der Spalte C steht dann die Formel: =WENN(B2<=A2;1;0) Ist das Datum in Spalte B größer als das Datum in Spalte A wird eine Null in Spalte C geschrieben.
Wie gesagt funktioniert das Makro und nach dem Durchlauf dieses steht in der Spalte C die angegebende Formel:=WENN(B2<=A2;1;0) . Leider werden die Datumsangeben nicht so recht erkannt, selbst
wenn die Spalten als Datumfeld definiert wurde. Ich muss nach dem Durchlauf jeweils in die einzelne Datumszelle springen und das Datum mit der Enter-Taste bestätigen.
Nachdem ich dies durchgeführt habe erkennt die Formel die Datumsangaben und in den einzelnen Zellen der Spalte C werden die richtigen Ergebnisse angezeigt.
Hat jemand irgend eine Ahnung an was das liegen kann und wie ich dieses Problem lösen kann.
Gruss
Ingo
[*][quote][sup][i]Admininfo: Thread verschoben. Bitte beachte [url=https://supportnet.de/groupfaqs/3][u]FAQ 2[/u][/url] für deine nächste Anfrage.[/i][/sup][/quote]
Antwort 1 von coros
Moin Ingo,
sorry, aber irgendwie verstehe ich nicht so ganz, was Du erreichen möchtest. Auch wäre es hilfreich gewesen, wenn Du Dein Makro mal hier gepostet hättest. Ich weiß nur eins, wenn in jeder Zelle die von Dir aufgeführte Formel, also “=WENN(B2<=A2;1;0)“, vor allem mit den Zellbezeichnungen B2 und A2 steht, kann das nicht funktionieren. Was ich meine, wenn Dein Makro die besagte Formel z.B. in Zelle C12 einträgt, steht dann in der Zelle C12 die Formel “=WENN(B2<=A2;1;0)“. Das bedeutet, die Formel bezieht sich nicht auf die Zelle A12 und B12, sondern auf Zelle A2 und B2.
Was ich auch nicht verstehe ist, warum lässt Du diese Formel eintragen und machst die Auswertung nicht, wenn Du sowieso mit einem Makro arbeitest, in VBA? Sprich, wenn das Datum ins Spalte B größer als in Spalte A, dann eine 1 in Spalte C eintragen, ansonsten eine 0. Der Code dafür würde wie das nachfolgende Makro aussehen.
Eventuell hilft Dir das Beispielmakro ja weiter, ansonsten müsstest Du schon meine obigen Fragen beantworten.
MfG,
coros
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
sorry, aber irgendwie verstehe ich nicht so ganz, was Du erreichen möchtest. Auch wäre es hilfreich gewesen, wenn Du Dein Makro mal hier gepostet hättest. Ich weiß nur eins, wenn in jeder Zelle die von Dir aufgeführte Formel, also “=WENN(B2<=A2;1;0)“, vor allem mit den Zellbezeichnungen B2 und A2 steht, kann das nicht funktionieren. Was ich meine, wenn Dein Makro die besagte Formel z.B. in Zelle C12 einträgt, steht dann in der Zelle C12 die Formel “=WENN(B2<=A2;1;0)“. Das bedeutet, die Formel bezieht sich nicht auf die Zelle A12 und B12, sondern auf Zelle A2 und B2.
Was ich auch nicht verstehe ist, warum lässt Du diese Formel eintragen und machst die Auswertung nicht, wenn Du sowieso mit einem Makro arbeitest, in VBA? Sprich, wenn das Datum ins Spalte B größer als in Spalte A, dann eine 1 in Spalte C eintragen, ansonsten eine 0. Der Code dafür würde wie das nachfolgende Makro aussehen.
Option Explicit
Sub Datum_vergleichen()
Dim Wiederholungen As Long
For Wiederholungen = 1 To Range("A65536").End(xlUp).Row
If Cells(Wiederholungen, 1) >= Cells(Wiederholungen, 2) Then
Cells(Wiederholungen, 3) = 1
Else
Cells(Wiederholungen, 3) = 0
End If
Next
End SubEventuell hilft Dir das Beispielmakro ja weiter, ansonsten müsstest Du schon meine obigen Fragen beantworten.
MfG,
coros
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
Antwort 2 von Dayworker
Hallo coros,
Danke erstmal für deine Antwort. Du hast Recht, ich hätte bei meiner Frage den Code des Makros aufzeigen sollen, was ich an dieser Stelle nachhole.
Hier also der Code:
Das Problem was ich habe ist folgendes: Wenn ich aus einer bestehenden Excel Datei mir entsprechende Datumsangaben per copy and paste beziehe und das Makro dann ausführe, steht zwar in der Spalte C entweder eine 0 oder eine 1 drin, dieser Wert ist aber bei manchen Datumsvergleiche nicht richtig. Wenn ich dann mit der Maus in die entsprechenden Zellen mit der Datumsangabe springe (wo der Wert in Spalte C nicht stimmt) und das Datum markiere , dieses mit der Enter Taste bestätige, erkennt die Formel das Datum und in der entsprechenden Zelle der Spalte C wird das richtige Ergenis angezeigt. Dieses markieren und bestätigen des entsprechenden Datums muss ich sowohl in den Datumsangaben der Spalte A als auch in Spalte B duchführen um ein richtiges Ergebnis in Spalte C zu erhalten.
Bei der zweiten Varianten liegt das selbe Problem vor, nur in Spalte C stehen dann reine Werte .
Zur besseren Visualisierung meines Problems hier ein Beispiel nach dem Durchlauf des Makros:
Spalte A Spalte B Spalte C
05.10.2005 04.10.2005 1
05.10.2005 22.09.2005 0
Bei dem zweiten Datum müsste in Spalte C statt einer 0 eine 1 stehen, da das Datum in Spalte B kleine als das Datum in Spalte A ist.
Ich hoffe ich konnte mein Problem besser bescheiben. Vielleicht kennt jemand dieses Problem und kann mir weiter helfen.
Gruss
Ingo
Danke erstmal für deine Antwort. Du hast Recht, ich hätte bei meiner Frage den Code des Makros aufzeigen sollen, was ich an dieser Stelle nachhole.
Hier also der Code:
Sub Makro1()
Dim Farbe As Integer
Dim i As Long
Dim f As Integer
Application.Caption = "Ueberschrift"
´ Setzt die Zeilen Weite der Spalte
Range("A1").EntireColumn.ColumnWidth = 15
Range("B1").EntireColumn.ColumnWidth = 15
Range("C1").EntireColumn.ColumnWidth = 18
ActiveSheet.Rows(1).Insert Shift:=xlDown
Worksheets("Tabelle1").Cells(1, 1).Name = "Datum_1"
Worksheets("Tabelle1").Cells(1, 1).Value = "Datum_1"
Worksheets("Tabelle1").Cells(1, 2).Name = "Datum_2"
Worksheets("Tabelle1").Cells(1, 2).Value = "Datum_2"
Worksheets("Tabelle1").Cells(1, 3).Name = "Auswertung"
Worksheets("Tabelle1").Cells(1, 3).Value = "Auswertung"
´Feststellen, wie weit die Tabelle geht
i = Cells(Rows.Count, 1).End(xlUp).Row
Do While Cells(i, 1).Interior.ColorIndex = xlNone And 1 < i
´Spalte färben
Cells(i, 1).Interior.ColorIndex = 6
Cells(i, 2).Interior.ColorIndex = 6
Cells(i, 3).Interior.ColorIndex = 35
i = i - 1
Loop
If Not ActiveSheet.AutoFilterMode = True _
Then Range("A1:C1").AutoFilter
f = ActiveSheet.UsedRange.Rows.Count
Do While 1 < f
If 1 < f Then
ActiveSheet.Cells(f, 3).Value = "=IF(RC[-1]<=RC[-2],1,0)"
End If
f = f - 1
Loop
´Die zweite Variante
´f = ActiveSheet.UsedRange.Rows.Count
´ Do While 1 < f
´ a = Cells(f, 1).Value
´ b = Cells(f, 2).Value
´ If b < a Then
´ Worksheets("Tabelle1").Cells(f, 3).Value = "1"
´ ElseIf b = a Then
´ Worksheets("Tabelle1").Cells(f, 3).Value = "1"
´ Else
´ Worksheets("Tabelle1").Cells(f, 3).Value = "0"
´ End If
´ f = f - 1
´ Loop
End Sub
Das Problem was ich habe ist folgendes: Wenn ich aus einer bestehenden Excel Datei mir entsprechende Datumsangaben per copy and paste beziehe und das Makro dann ausführe, steht zwar in der Spalte C entweder eine 0 oder eine 1 drin, dieser Wert ist aber bei manchen Datumsvergleiche nicht richtig. Wenn ich dann mit der Maus in die entsprechenden Zellen mit der Datumsangabe springe (wo der Wert in Spalte C nicht stimmt) und das Datum markiere , dieses mit der Enter Taste bestätige, erkennt die Formel das Datum und in der entsprechenden Zelle der Spalte C wird das richtige Ergenis angezeigt. Dieses markieren und bestätigen des entsprechenden Datums muss ich sowohl in den Datumsangaben der Spalte A als auch in Spalte B duchführen um ein richtiges Ergebnis in Spalte C zu erhalten.
Bei der zweiten Varianten liegt das selbe Problem vor, nur in Spalte C stehen dann reine Werte .
Zur besseren Visualisierung meines Problems hier ein Beispiel nach dem Durchlauf des Makros:
Spalte A Spalte B Spalte C
05.10.2005 04.10.2005 1
05.10.2005 22.09.2005 0
Bei dem zweiten Datum müsste in Spalte C statt einer 0 eine 1 stehen, da das Datum in Spalte B kleine als das Datum in Spalte A ist.
Ich hoffe ich konnte mein Problem besser bescheiben. Vielleicht kennt jemand dieses Problem und kann mir weiter helfen.
Gruss
Ingo
Antwort 3 von coros
Hi Ingo,
das wird daran liegen, dass Durch Dein Kopieren, nicht alle Daten im Datumsformat vorliegen. Dann kann natürlich auch kein Vergleich gezogen werden. Um das zu umgehen, würde ich in dem Makro zunächst einmal alle Datumsangaben in Spalte A und B als Datum wandeln lassen. Ich habe mal in Deinen Code die entsprechenden Befehle eingefügt und fett markiert. Teste das mal.
Wundere Dich nicht, dass ich die ganzen Hochkommas zum Auskommentieren durch das Wort Rem ersetzt habe, aber hier im Supportnet besteht noch ein Bug was die Hochkommas angeht. Es werden Dir alle Hochkommas als Apostrophs angezeigt und das bringt in VBA einen Fehler.
Ich hoffe, die Änderung hilft Dir weiter. Bei Problemen oder Fragen melde Dich
MfG,
coros
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
das wird daran liegen, dass Durch Dein Kopieren, nicht alle Daten im Datumsformat vorliegen. Dann kann natürlich auch kein Vergleich gezogen werden. Um das zu umgehen, würde ich in dem Makro zunächst einmal alle Datumsangaben in Spalte A und B als Datum wandeln lassen. Ich habe mal in Deinen Code die entsprechenden Befehle eingefügt und fett markiert. Teste das mal.
Sub Makro1()
Dim Farbe As Integer
Dim i As Long
Dim f As Integer
Rem Daten in Spalte A und B in Datum wandeln
For Wiederholungen = 2 To Range("A65536").End(xlUp).Row
Cells(Wiederholungen, 1) = CDate(Cells(Wiederholungen, 1))
Cells(Wiederholungen, 2) = CDate(Cells(Wiederholungen, 2))
Next
Application.Caption = "Ueberschrift"
Rem Setzt die Zeilen Weite der Spalte
Range("A1").EntireColumn.ColumnWidth = 15
Range("B1").EntireColumn.ColumnWidth = 15
Range("C1").EntireColumn.ColumnWidth = 18
ActiveSheet.Rows(1).Insert Shift:=xlDown
Worksheets("Tabelle1").Cells(1, 1).Name = "Datum_1"
Worksheets("Tabelle1").Cells(1, 1).Value = "Datum_1"
Worksheets("Tabelle1").Cells(1, 2).Name = "Datum_2"
Worksheets("Tabelle1").Cells(1, 2).Value = "Datum_2"
Worksheets("Tabelle1").Cells(1, 3).Name = "Auswertung"
Worksheets("Tabelle1").Cells(1, 3).Value = "Auswertung"
Rem Feststellen, wie weit die Tabelle geht
i = Cells(Rows.Count, 1).End(xlUp).Row
Do While Cells(i, 1).Interior.ColorIndex = xlNone And 1 < i
Rem Spalte färben
Cells(i, 1).Interior.ColorIndex = 6
Cells(i, 2).Interior.ColorIndex = 6
Cells(i, 3).Interior.ColorIndex = 35
i = i - 1
Loop
If Not ActiveSheet.AutoFilterMode = True _
Then Range("A1:C1").AutoFilter
f = ActiveSheet.UsedRange.Rows.Count
Do While 1 < f
If 1 < f Then
ActiveSheet.Cells(f, 3).Value = "=IF(RC[-1]<=RC[-2],1,0)"
End If
f = f - 1
Loop
Rem Die zweite Variante
Rem f = ActiveSheet.UsedRange.Rows.Count
Rem Do While 1 < f
Rem a = Cells(f, 1).Value
Rem b = Cells(f, 2).Value
Rem If b < a Then
Rem Worksheets("Tabelle1").Cells(f, 3).Value = "1"
Rem ElseIf b = a Then
Rem Worksheets("Tabelle1").Cells(f, 3).Value = "1"
Rem Else
Rem Worksheets("Tabelle1").Cells(f, 3).Value = "0"
Rem End If
Rem f = f - 1
Rem Loop
End Sub
Wundere Dich nicht, dass ich die ganzen Hochkommas zum Auskommentieren durch das Wort Rem ersetzt habe, aber hier im Supportnet besteht noch ein Bug was die Hochkommas angeht. Es werden Dir alle Hochkommas als Apostrophs angezeigt und das bringt in VBA einen Fehler.
Ich hoffe, die Änderung hilft Dir weiter. Bei Problemen oder Fragen melde Dich
MfG,
coros
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
Antwort 4 von Dayworker
Hallo coros,
Habe deinen Änderungsvorschlag übernommen und es funktioniert sssuuupppeeerrr!!!!!! :-)
Danke für deine Hilfe!!!
MFG
Ingo
Habe deinen Änderungsvorschlag übernommen und es funktioniert sssuuupppeeerrr!!!!!! :-)
Danke für deine Hilfe!!!
MFG
Ingo
Antwort 5 von coros
Hi Ingo,
freut mich, dass es jetzt funktioniert. Danke Dir auch für die Rückmeldung.
MfG,
coros
Jeder macht was er will, keiner macht was er soll, aber alle machen mit.
freut mich, dass es jetzt funktioniert. Danke Dir auch für die Rückmeldung.
MfG,
coros
Jeder macht was er will, keiner macht was er soll, aber alle machen mit.

