Microsoft Excel

Herbers Excel/VBA-Archiv

Konvertierung von Zeitdaten | Herbers Excel-Forum


Betrifft: Konvertierung von Zeitdaten von: Roland
Geschrieben am: 25.11.2009 19:30:43

Hallo,
ich habe eine Logdatei. In der ersten Spalte steht der Anfang, in der zweiten das Ende und in der dritten Spalte der Operator. (Siehe Blatt „Quelle“)
Damit ein anderes Programm diese Daten versteht müssen die Daten in 15 Minuten Abschnitte gerastert werden. Diese habe ich im Blatt „gerastert“ getan.
Nun brauch ich jedoch die Daten untereinander. Der Zeitschritt bleibt bei 15 Minuten und steht in der ersten Spalte, jedoch soll neben jedem Zeitintervall der Operator stehen, der in diesen Moment eingeloggt war.
Nicht genutzten Zeiten sollte mit einem „-„ gekennzeichnet werden. Im Blatt „Ziel“ steht das Wunschformat.
Im Blatt “Ausgabe“ habe ich mich daran versucht. Komme jedoch nicht weiter.

Kann mir jemand helfen?

https://www.herber.de/bbs/user/66170.xls

Besten Dank
Roland

  

Betrifft: AW: Formellösung SVerweis von: Daniel
Geschrieben am: 25.11.2009 19:44:37

Hi

du brauchst diese Formel im Blatt "Ausgabe" Zelle B3 (dort eintragen und dann nach unten kopieren)

=WENN(UND(SVERWEIS(A3;gerastert!A:C;1;1)<=A3;SVERWEIS(A3;gerastert!A:C;2;1)>A3);SVERWEIS(A3; gerastert!A:C;3;1);"-")

Gruß, Daniel


  

Betrifft: AW: Formellösung SVerweis von: Roland
Geschrieben am: 26.11.2009 19:24:52

Hallo Daniel und ihr Anderen,

auf Sverweis wäre ich nicht gekommen und es klappt auch super.

Eine Ausnahme: wenn Datumswechsel ist, dann kommt Excel durcheinander und schreibt nur "'#NV".
Ich vermute es liegt an der Formatierung, kann die Lösung aber nicht finden.
https://www.herber.de/bbs/user/66213.xls

Grüße
Roland


  

Betrifft: AW: Formellösung SVerweis von: frigo
Geschrieben am: 26.11.2009 20:42:09

Hi Roland,
ich habe mir Deine Datei zwar nicht angeschaut, aber ersetze mal in Sverweis den letzten Parameter 1 durch 0. (Hintergrund dazu findest Du in der Erklärung der Funktion.)
d.h.
=WENN(UND(SVERWEIS(A3;gerastert!A:C;1;0)<=A3;SVERWEIS(A3;gerastert!A:C;2;0)>A3);SVERWEIS(A3; gerastert!A:C;3;0);"-")
Gruß,
frigo


  

Betrifft: AW: Deine Zeitleiste hat nen Fehler von: Daniel
Geschrieben am: 26.11.2009 22:35:01

in der Zeile , in der der NV-Fehler kommt ist der Zeitwert falsch:

19.11.2009 23:45
19.11.2009 00:00
20.11.2009 00:15
da muss 20.11.2009 00:00:00 hin und nicht der 19.11, das wäre ja der Vortag.
außerdem ist der 19.11.2009 00:00 kleiner als der kleinste Wert in der Suchmatrix (19.11.2009 06:00), das erzeugt den Fehler.

du musst hier dein Makro korrigiern, daß die Zeitleiste erstellt, da ist irgendwo ein Bug drin.

Gruß, Daniel


  

Betrifft: AW: Deine Zeitleiste hat nen Fehler von: Roland
Geschrieben am: 26.11.2009 23:15:49

Ich benutze eine einfache For-Next- Schleife:
For i = anfang To ende - 1.04166666642413E-02 Step 1.04166666642413E-02

Cells(c, a) = i

If i = Int(i) Then
Cells(c, a) = i + 1

End If

Cells(c, a + 1).FormulaLocal = "=WENN(UND(SVERWEIS(A" & c & ";gerastert!A:C;1;1)<=A" & c & ";SVERWEIS(A" & c & ";gerastert!A:C;2;1)>A" & c & ");SVERWEIS(A" & c & "; gerastert!A:C;3;1);" & Chr(34) & "-" & Chr(34) & ")"

Cells(c, a + 2).FormulaLocal = "=SVERWEIS(B" & c & ";Liste!B:C;2;0)"


c = c + 1
Next i

Irgendwie zählt die Schleife falsch.
Wenn ich in eine Zahl das Datum konventiere, dann kommt:
40136,97917
40136,98958
40136,00000
40137,01042
40137,02083

Der Versuch:
If i = Int(i) Then
Cells(c, a) = i + 1

End If
klappt auch nicht :-((((((


  

Betrifft: AW: Problem sind die Variablentypen von: Daniel
Geschrieben am: 29.11.2009 20:35:27

Hi

dein Problem ist, daß bei der Umandlung der Variablen in die verschiedenen Typen (i ist DATE, der Zellwert aber eigentlich Double) wahrscheinlich ein paar Bugs drin sind bzw die kleinen Ungenauigkeiten, die dadurch entstehen, daß wir menschen dezimal rechen, der Computer hingegen binär.

Das Problem lässt sich einfach lösen, wenn du die Variable i als DOULE deklarierst.
dazu noch ein kleiner Hinweis, du musst jeder Variable den Datentyp zuweisen, auch wenn die deklarierung in einer Zeile stehen, in

Dim anfang, ende , i As Date

sind "anfang" und "ende" Variant-Variablen, nur "i" ist Date.

so sollte es funktionieren:
Dim anfang As Double, ende As Double, i As Date
Gruß, Daniel


Beiträge aus den Excel-Beispielen zum Thema "Konvertierung von Zeitdaten"