Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: VBA: Vergleichen von Datum und Uhrzeit

VBA: Vergleichen von Datum und Uhrzeit
04.09.2007 14:14:00
Datum
Hallo Excelfreunde,
ich habe mal wieder das Problem mit Datum und Uhrzeit, was mir immer wieder Schwierigkeiten bereitet. Vielleicht kann mir wieder mal einer von euch helfen.
ich bekomme aus einer Datenbank in Spalte "D" und in Spalte "E" folgende Daten und Formate geliefert:
Standard "04.09.2007 14:37"
Nun möchte ich folgendes erreichen:
----------------------------------------------
Wenn Spalte "D" die Uhrzeit vor 14:00 Uhr ist
und in der Spalte "E" der gleiche Tag ist, soll in Spalte "F" = "OK" stehen.
Wenn Spalte "D" die Uhrzeit nach 14:00 Uhr ist
und in der Spalte "E" der gleiche Tag ist, soll in Spalte "F" = "Super" stehen
Wenn Spalte "D" die Uhrzeit nach 14:00 Uhr ist
und in der Spalte "E" der Folgetag ist, soll in Spalte "F" = "OK" stehen.
Sonst soll in Spalte "F" = "nicht OK" stehen.
Das ganze brauche ich im VBA, da diese Formel in einem Makro per Schleife erfolgen soll.
Ich hoffe, ich habe es vertändlich rüber bringen können und ihr habt eine Lösung für mich.
Gruß Manfred

Anzeige

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA: Vergleichen von Datum und Uhrzeit
04.09.2007 14:19:25
Datum
Hi Manfred
Verrätst du mir, wie du es geschafft hast, deinen VBA-Level anzugeben?
Danke + Ciao
Thorsten

AW: VBA: Vergleichen von Datum und Uhrzeit
04.09.2007 14:38:00
Datum
HI
wenn du ein Excel gut genug bist, dann solltest du erstmal eine Formel für Spalte F entwickeln, die dir das gewünschte Ergebnis liefert (sollte kein Problem sein)
dann selektierst du die Zelle mit der Formel, wechselst in den VBA-Editior und dort ins Direktfenster.
dort gibst du dann ein "?selection.formular1c1"
du erhälst den englischen Formelstring deiner Formel (in folge xxx genannt).
diesen kopierst du und fügst ihn folgendermassen in dein Makro ein:

Range("F2:F100").formular1c1 = "xxx"


(den Range-Bereich musst du soweit wie notwendig angeben)
wichtig ist noch, daß du in dem Formelstring xxx alle Anführungszeichen verdoppeln musst, damit Excel erkennen kann, daß die Anführungzeichen zur Formel gehören, und nicht das Ende des Textstrings bedeuten,
dh. wenn der Text so aussieht:
"=if(r(-1)C="";"Leerfeld";"Zelle mit Ihnhalt")"
musst du ihn im Makrocode so abändern:
"=if(r(-1)C="""";""Leerfeld"";""Zelle mit Ihnhalt"")"
sollten in der Tabelle keine Formeln stehen sondern Fix-Werte, kannst du den Kode noch um diese Zeile ergänzen:


Range("F2:F100").formular1c1 = "xxx"
Range("F2:F100").formula = Range("F2:F100").value


diese Methode ist schneller als ne Schleife
Gruß, Daniel

Anzeige
AW: VBA: Vergleichen von Datum und Uhrzeit
04.09.2007 14:55:00
Datum
Hi,
anbei mal ein VBA-Code mit For-Schleife.

Sub DatumUhrzeit()
Dim z As Long
Dim ws As Worksheet
Set ws = Worksheets("Tabelle2")
letztez = ws.Range("D65536").End(xlUp).Row
For z = 2 To letztez
ws.Cells(z, 6) = "nicht OK"
If Format(ws.Cells(z, 4), "hh:mm")  "14:00" And Format(ws.Cells(z, 4), "dd:mm:yy") = Format(ws. _
Cells(z, 5), "dd:mm:yy") Then
ws.Cells(z, 6) = "Super"
End If
If Format(ws.Cells(z, 4), "hh:mm") > "14:00" And Format(ws.Cells(z, 4) + 1, "dd:mm:yy") =  _
Format(ws.Cells(z, 5), "dd:mm:yy") Then
ws.Cells(z, 6) = "OK"
End If
Next
End Sub


Jan

Anzeige
AW: VBA: Vergleichen von Datum und Uhrzeit
04.09.2007 15:36:10
Datum
Hallo Jan,
das ist schon mal ein sehr guter Ansatz. Leider klappt irgendetwas mit dem +1 nicht, denn für den Abschnitt bekomme ich "unverträgliche Typen".
Nehme ich die +1 weg, läuft das Makro durch, aber es wird der Status "Super" auch nicht gesetzt.
Vielleicht kannst du dir das noch einmal anschauen.
Ich habe dir mal eine Musterdatei hochgeladen
https://www.herber.de/bbs/user/45680.xls
Gruß und schon mal vielen Dank für die Hilfe
Manfred

Anzeige
AW: VBA: Vergleichen von Datum und Uhrzeit
04.09.2007 15:56:00
Datum
Hi
so mit Musterdatei ist es einfacher
probier mal diesen Code:

Sub Bewerten()
With Range("f2:F" & Cells(65536, 4).End(xlUp).Row)
.FormulaR1C1 = "=IF(INT(RC4)=INT(RC5),IF(RC4-INT(RC4)>TIME(14,0,0),""Super"",""OK""),IF(AND(INT( _
RC5)-INT(RC4)=1,RC4-INT(RC4)>TIME(14,0,0)),""OK"",""nicht OK""))"
.Formula = .Value
End With
End Sub


Gruß, Daniel

Anzeige
AW: VBA: Vergleichen von Datum und Uhrzeit
05.09.2007 10:03:00
Datum
Hallo Daniel,
bei deiner Version bekomme ich "Syntxfehler", aber die Version von Jan funktioniert bestens.
Trotzdem vielen Dank
Gruß Manfred

AW: VBA: Vergleichen von Datum und Uhrzeit
05.09.2007 20:18:00
Datum
Hi
der Syntaxfehler liegt nicht an meinem Code, sondern wird durch den Forumseditor verusacht, in dem er Versucht, lange Zeilen umzubrechen, sich dabei abscheinend nicht genau an die Syntaxregeln von VBA hält, so daß es zu einem Fehler kommt, wenn man Code mit Zeilenumbruch vom Forumseditor in den VBA-Editor kopiert.
Kopiere den Text nochmal und entferne dann im VBA-Edtior zwischen
IF(AND(INT( und RC5)-INT(RC4)=1
die Zeichen
Leerzeichen-Unterstrich-Zeilenumbruch
dann sollte das Makro funktionieren und bei grösseren Datenmengen deutlich schneller sein als die Schleifenversion (ich komm so, je nach Datenmenge auf Faktor 8-10)
Ok, ist zwar erst bei grösseren Datenmengen wirklich interessant (so ab ein paar tausend), aber vielleicht willst du ja auch ein bisschen was dazulernen, wie man schnellen Code schreibt ;-)
Gruß, Daniel

Anzeige
AW: VBA: Vergleichen von Datum und Uhrzeit
04.09.2007 17:38:00
Datum
Hi,
Ich habe den Code entsprechend verändert:

Sub DatumUhrzeit()
Dim z As Long
Dim ws As Worksheet
Set ws = Worksheets("Tabelle2")
letztez = ws.Range("D65536").End(xlUp).Row
For z = 2 To letztez
ws.Cells(z, 6) = "nicht OK"
If Format(ws.Cells(z, 4), "hh:mm")  "14:00" And Format(ws.Cells(z, 4), "dd:mm:yy") = Format( _
ws. _
Cells(z, 5), "dd:mm:yy") Then
ws.Cells(z, 6) = "Super"
End If
w = CDate(ws.Cells(z, 4)) + 1
If Format(ws.Cells(z, 4), "hh:mm") > "14:00" And Format(w, "dd:mm:yy") = _
Format(ws.Cells(z, 5), "dd:mm:yy") Then
ws.Cells(z, 6) = "OK"
End If
Next
End Sub


Jan

Anzeige
Funktioniert bestens - Vielen Dank
05.09.2007 10:04:00
{mskro}
;

Forumthreads zu verwandten Themen

Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

VBA: Vergleich von Datum und Uhrzeit in Excel


Schritt-für-Schritt-Anleitung

  1. Öffne den VBA-Editor: Drücke ALT + F11, um den Visual Basic for Applications (VBA) Editor zu öffnen.

  2. Füge ein neues Modul hinzu: Klicke auf Einfügen und wähle Modul.

  3. Kopiere den folgenden VBA-Code in das Modul, um die Uhrzeiten zu vergleichen:

    Sub DatumUhrzeit()
       Dim z As Long
       Dim ws As Worksheet
       Set ws = Worksheets("Tabelle2")
       letztez = ws.Range("D65536").End(xlUp).Row
       For z = 2 To letztez
           ws.Cells(z, 6) = "nicht OK"
           If Format(ws.Cells(z, 4), "hh:mm") < "14:00" And Format(ws.Cells(z, 4), "dd:mm:yy") = Format(ws.Cells(z, 5), "dd:mm:yy") Then
               ws.Cells(z, 6) = "OK"
           End If
           If Format(ws.Cells(z, 4), "hh:mm") >= "14:00" And Format(ws.Cells(z, 4), "dd:mm:yy") = Format(ws.Cells(z, 5), "dd:mm:yy") Then
               ws.Cells(z, 6) = "Super"
           End If
           If Format(ws.Cells(z, 4), "hh:mm") >= "14:00" And Format(ws.Cells(z, 4) + 1, "dd:mm:yy") = Format(ws.Cells(z, 5), "dd:mm:yy") Then
               ws.Cells(z, 6) = "OK"
           End If
       Next z
    End Sub
  4. Führe das Makro aus: Schließe den VBA-Editor und gehe zurück zu Excel. Drücke ALT + F8, wähle DatumUhrzeit und klicke auf Ausführen.


Häufige Fehler und Lösungen

  • Syntaxfehler: Achte darauf, dass du beim Kopieren des Codes die Zeilenumbrüche korrekt behandelst. Verwende keine unerwünschten Leerzeichen oder Zeichen im Code.
  • Typenkonflikte: Wenn du "unverträgliche Typen" erhältst, stelle sicher, dass du alle Variablen richtig deklariert hast. Beispielsweise könnte ein CDate-Fehler auftreten, wenn die Daten nicht korrekt formatiert sind.
  • Fehlende Daten: Prüfe, ob in den Zellen D und E gültige Daten vorhanden sind. Leere oder falsch formatierte Zellen können zu Fehlern führen.

Alternative Methoden

Falls du kein VBA verwenden möchtest, kannst du auch eine Excel-Formel verwenden, um die Uhrzeiten zu vergleichen:

=IF(INT(D2)=INT(E2), IF(TEXT(D2,"hh:mm") > "14:00", "Super", "OK"), IF(INT(E2)-INT(D2)=1, "OK", "nicht OK"))

Diese Formel kannst du in Zelle F2 eingeben und dann nach unten kopieren. Diese Methode eignet sich gut, wenn du keine Programmierung benötigst.


Praktische Beispiele

Angenommen, du hast folgende Daten in den Spalten D und E:

  • D2: 04.09.2007 13:37
  • E2: 04.09.2007 14:00
  • D3: 04.09.2007 15:00
  • E3: 04.09.2007 14:00
  • D4: 05.09.2007 15:00
  • E4: 04.09.2007 14:00

Nach Ausführung des Makros wird die Spalte F wie folgt aussehen:

  • F2: OK
  • F3: Super
  • F4: OK

Das zeigt, dass das Makro die Uhrzeiten und Daten korrekt vergleicht.


Tipps für Profis

  • Verwende die With-Anweisung: Diese kann die Leistung des Codes verbessern, indem sie die Anzahl der Zugriffe auf das Arbeitsblatt reduziert.

    With ws
      ' Dein Code hier
    End With
  • Optimierung für große Datenmengen: Schalte die Bildschirmaktualisierung und Berechnung vorübergehend aus, um die Ausführungsgeschwindigkeit zu erhöhen:

    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    ' Dein Code hier
    Application.Calculation = xlCalculationAutomatic
    Application.ScreenUpdating = True

FAQ: Häufige Fragen

1. Was bedeutet die Uhrzeit 14:14 Uhr?
Dies ist einfach eine Zeitangabe, die 14 Stunden und 14 Minuten nach Mitternacht darstellt.

2. Wie kann ich Uhrzeiten in Excel vergleichen?
Du kannst entweder VBA verwenden oder Excel-Formeln nutzen, wie im Tutorial beschrieben.

3. Funktioniert dieser Code auch in Excel 365?
Ja, der VBA-Code funktioniert in Excel 365 und allen vorherigen Versionen, die VBA unterstützen.

4. Kann ich den Code anpassen, um andere Zeitbedingungen zu überprüfen?
Ja, du kannst die Bedingungen im Code jederzeit ändern, um deine spezifischen Anforderungen zu erfüllen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige