Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1452to1456
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
Inhaltsverzeichnis

Datumsproblem

Datumsproblem
21.10.2015 17:01:02
Timm
Hallo zusammen,
ich stehe vor einem nervigen und für mich nicht lösbaren Problem.
Also:
Ich habe ein Tabellenblatt (1), erste Spalte steht das Datum und Zeit im Format
TT.MM.JJJJ hh:mm
Die Datums- und Zeitangaben sind chronologisch geordnet aber in unregelmäßgien Abständen. Dann habe ich ein weiteres Tabellenblatt (2), wieder in der 1. Spalte Datum und Zeit mit selber Formatierung. Hier sind die Zeiten in 10 Minuten Abständen. Zu jedem Zeitpunkt gehören 9 Zahlenwerte, welche sich in Spalten 2-10 befinden.
Was ich nun machen möchte ist folgendes: Ich möchte jeden Zeitpunkt aus Blatt 1 in Blatt 2 finden und die dazugehörigen 9 Zahlenwerte in ein drittes Blatt oder ein Array schreiben.
Was ich bisher gemacht habe:
Ich habe aus Blatt 1 die Zeitangaben auf 10 Minuten Werte gerundet, mittels
=RUNDEN(Zelle*144;0) /144. Alles wunderbar, stehen in Spalte 2. Dann musste ich noch 10 minuten hinzuaddieren, mit =Zelle+(10/60/24) , Grund dafür ist nicht von Bedeutung. Das steht dann in Spalte 3. Alles gut soweit. Jetzt habe ich die korrigierten Datums- und Zeitangaben aus Blatt 1 in ein Array geschrieben. Die Datums-Zeit Werte aus Blatt 2, sowie die dazugehörigen Zahlenwerte in ein seperates Array.
Dann lasse ich mittels Schleife die Datums-zeit Angaben vergleichen. Wenn der passende Zeitpunkt gefunden wurde, werden die dazugehörigen Zahlenwerte in das dritte Blatt kopiert. Das funktioniert auch fast einwandfrei.
Es ergeben sich allerdings in vollkommen unregelmäßigen Abständen, leerzeilen. Und zwar um die Tausend.
Nach ewigem Fehlersuchen habe ich in Blatt 1 bei einem Datum, wo eine Leerzeile entsteht, das Datum und die Zeit manuell noch mal selber in die Zelle der dritten Spalte eingetippt. Siehe da, die Leerzeile ist beim nächsten Durchlauf verschwunden.
Was ist da los? Ich bin komplett ratlos. Das Skript funktioniert, wenn wahrscheinlich sehr ineffizient und unschön, ohne Fehlermeldung. Alle Spalten sind im richtigen Format.
Ich hoffe Ihr könnt mir helfen.
Schönen Gruß
Timm

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

Betreff
Datum
Anwender
Anzeige
AW: Datumsproblem
21.10.2015 17:02:55
SF
Hola,
die VBA Experten würden bestimmt gerne das Makro sehen!
Gruß,
steve1da

AW: Datumsproblem
21.10.2015 17:09:50
Timm

Option Explicit
Dim gueltig(1 To 6762, 1 To 7) As Variant
Dim Dir(1 To 37009, 1 To 10) As Variant
Dim z As Long
Dim s As Integer
Dim i As Long
Sub gueltige_zeitraeume()
Sheets("gueltige_zeitraeume").Select
For z = 2 To 6763
For s = 1 To 4
gueltig(z - 1, s) = Cells(z, s)
Next s
Next z
Sheets("Direction").Select
For z = 5 To 37013
For s = 1 To 10
Dir(z - 4, s) = Cells(z, s)
Next s
Next z
Sheets("Windrichtung").Select
Range(Cells(2, 2), Cells(6763, 10)).Delete
For z = 1 To 6762
For i = 1 To 37009
If gueltig(z, 3) = Dir(i, 1) Then
For s = 2 To 10
Cells(z + 1, s) = Dir(i, s)
Next s
End If
Next i
Next z
End Sub

Anzeige
Vorsicht
21.10.2015 18:08:56
Michael
Hi zusammen,
zuallererst ist Dir ein Excel-Schlüsselwort, das sollte man nicht als Variablennamen benutzen.
Das Array gueltig ist mit 7 Spalten definiert, benutzt werden allerdings nur 4 - das nur am Rande.
Die ersten beiden Zuweisungen lassen sich leicht zusammenfassen:

'oben:
Dim gueltig as Variant
Dim varDir as Variant
'in Sub:
gueltig = Sheets("gueltige_zeitraeume").Range("A2:D6763")
varDir = Sheets("Direction").Range("A5:J37013")
Ansonsten verwendest Du zum Schreiben eine zusätzliche Variable "Zeile", die Du hochzählst, also:

'oben:
Dim Zeile as Long
' warum eigentlich alles Public?
'in Sub:
Sheets("Windrichtung").Select
Range(Cells(2, 2), Cells(6763, 10)).Delete
'warum erst ab 2,2, insbesondere ohne Spalte A?
Zeile = 2       ' oder ab wo auch immer
For z = 1 To 6762
For i = 1 To 37009
If gueltig(z, 3) = Dir(i, 1) Then
For s = 1 To 10           ' 1 statt 2!
Cells(Zeile, s) = Dir(i, s)
Next s
Zeile=Zeile + 1
End If
Next i
Next z

... wenn ich das nicht falsch interpretiere.
Denn: wenn die Datumsangaben in Spalte A sowieso stehen bleiben sollen, wieso liest Du dann nicht die ein anstelle der gültigen?
Schöne Grüße,
Michael

Anzeige
AW: Vorsicht
21.10.2015 18:42:46
Timm
Hallo,
das mit Dir wusste ich nicht, danke dafür.
7 Spalten, da ich die anderen noch anderweitig benötige. Spielt hierfür aber keine Rolle.

'in Sub:
Sheets("Windrichtung").Select
Range(Cells(2, 2), Cells(6763, 10)).Delete
'warum erst ab 2,2, insbesondere ohne Spalte A?

Ab 2,2 da Zeile 1 der Header ist und Spalte 1 die Datumsangabe steht.
Verstehe nicht was mir die Variable Zeile bringt. z macht doch das gleiche.
Werde es morgen aber direkt ausprobieren :)
Sorry, dass ich nicht genau genug beschrieben habe.
Es ist auch eigentlich vollkommen egal, wo das alles steht oder hinkommen soll.
Ich verstehe nur nicht, wie es einen Unterschied machen kann, ob ich Datum/Zeit manuell eingebe bzw. die Zelle anklicke und auf Enter drücke oder das Datum durch die oben beschriebenen Rechnungen errechne. Das macht doch keinen Sinn? ^^

Anzeige
nein,
21.10.2015 18:56:40
Michael
z macht nicht das Gleiche: es schreibt im Blatt "Windrichtung" in die Zeile, in der das zuvor in "gueltige_zeitraeume" gestanden hatte, also gut, eine Zeile weiter wegen z+1.
Zeile schreibt unabhängig von z und i, also Deinen Schleifenvariablen, in die jeweils nächste Zeile - dann kann keine Leerzeile entstehen.
Verbleibt das Problem, daß Du in "Windrichtung" vorhandene Datumsangaben (halt die Spalte A) nicht überschreibst - Du wertest zwei Tabellen aus, schreibst das Ergebnis aber *nicht* *vollständig* in die dritte, sondern mischt es mit dort vorhandenen Daten - das kann nicht gutgehen.
Schöne Grüße,
Michael
P.S.: ohne Deine Daten zu sehen, ist die weitere Bearbeitung relativ sinnlos: also bitte eine abgespeckte Beispieltabelle hochladen mit nachvollziehbarem Fehler.

Anzeige
AW: nein,
21.10.2015 19:14:39
Timm
Genau das passt ja aber auch. Da die beiden genau um 1 Zeile verschoben sind.
Verbleibt das Problem, daß Du in "Windrichtung" vorhandene Datumsangaben (halt die Spalte A) nicht überschreibst
Die möchte ich auch nicht überschreiben. Diesen Zeitstempeln sollen ja die Zahlenwerte zugeordnet werden. Die habe ich vorher einfach in die erste Spalte per Hand kopiert.
Vielleicht habe ich mich einfach unklar ausgedrückt.
Blatt 1:
Spalte1: Datum/Zeit
Spalte2/3: korrigiert Datum/Zeit
Blatt 2:
Spalte1: Datum/Zeit
Spalte 2-10: Zahlenwerte
Ob da jetzt noch ne Header Zeile drinsteht macht ja keinen Unterschied.
Blatt 3:
Spalte 1: Datum Zeit aus Blatt 1
Spalte 2-10: Die zum jeweiligen Datum gehörenden Zahlenwerte.
Das Datum aus Blatt 1 soll in Blatt 2 gefunden werden, und die in dieser Zeile stehenden Werte zum selben Datum in Blatt 3 kopiert werden.
Das passiert eben auch alles, vor allem auch korrekt, bis auf die Leerzeilen.
Und wenn ich einen der korrigierten Datum/Zeit Werte aus Blatt l, der eine Leerzeile hervorruft, per Hand in die Selbe Zelle schreibe, verschwindet diese Leerzeile.
Das beudetet ja, dass hier irgendwas komisch ist. Aber auch nur bei ein "paar" Datum/Zeit Werten.
Und das ist doch ziemlich unlogisch.
Ich verstehe da Excel nicht^^
Herzlichen Dank schonmal für deine Bemühungen ;)

Anzeige
Ohne Datei nicht nachvollziehbar
23.10.2015 15:10:58
Michael
Hi,
die Geschichte mit den "Eingaben" kann ich ohne Datei mit ein paar Zeilen, mit denen der Fehler reproduzierbar ist, nicht nachvollziehen.
Gruß,
Michael

AW: Ohne Datei nicht nachvollziehbar
23.10.2015 16:26:17
Timm
Hallo,
ich habe es in Matlab gemacht.
Hat sich somit erledigt.
Trotzdem vielen Dank :)
Gruß
Timm

ok, danke für die Rückmeldung, owT
23.10.2015 22:17:44
Michael

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige