Anzeige
Archiv - Navigation
900to904
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
900to904
900to904
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

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

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

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}

6 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige