Supportnet Computer
Planet of Tech

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.

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 Sub


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.

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:

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.

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

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.

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: