Bestimmte Zeilen aus mehreren Datensätzen auslesen und in neues Excel File schreiben
Hallo Leute,
da ich selber nicht mehr weiter komme - bitte um hilfe!
Habe ein Excel File das ca 97200 Datensätze enthält.
Es handelt sich hierbei um eine Messung die automatisch durchgeführt wurde.
Die Messung wurde jeden TAG ca. alle 5min durchgeführt aber leider sind auch Fehlmessungen enthalten daher ist der Zeitintervall nicht alle 5min sonder ändert sich manchmal.
Die Tabelle sieht wie folgt aus:
Name TimeString VarValue Validity Time_ms
Messung01 14.01.2012 12:00 14 1 41530789369
Messung02 14.01.2012 12:05 15 1 41530789377
.
.
.
Messung14 15.01.2012 12:01 14 1 41530789380
Messung15 15.01.2012 12:06 18 1 41530789369
.
.
.
usw (97200 weiter Datensätze)
Jetzt würde ich gerne alles Datensätze durchsuchen und aus zb. jedem TAG um 12:00 Uhr die Zeile auslesen und in ein anderes Excel-File oder Txt Datei schreiben. Sollte jetzt der Fall eintreffen das zb. bei einem TAG die Uhrzeit 12:00 Uhr nicht vorhanden ist sonder die nächste Messung erst um 12:01 ist dann soll eben dieser Wert genommen werden und wenn 12:01 auch nicht vorhanden ist dann soll der nächste Wert (12:06) verwendet werden.
Meine Wunschtabelle sollte dann so aussehen:
Name TimeString VarValue Validity Time_ms
Messung01 14.01.2012 12:00 14 1 41530789369
Messung14 15.01.2012 12:01 14 1 41530789380
Messung15 16.01.2012 12:06 18 1 41530789369
Messung32 17.01-2012 12:00 12 1 41530789369
usw.
...also immer ein Messung aus einem TAG zu einer bestimmten Zeit und wenn die Zeit (zb. 12:00) nicht vorhanden ist dann soll eben die nachste Zeit
(12:01,12:06...) genommen werden und in die neue Tabelle übernommen
besten DANK
da ich selber nicht mehr weiter komme - bitte um hilfe!
Habe ein Excel File das ca 97200 Datensätze enthält.
Es handelt sich hierbei um eine Messung die automatisch durchgeführt wurde.
Die Messung wurde jeden TAG ca. alle 5min durchgeführt aber leider sind auch Fehlmessungen enthalten daher ist der Zeitintervall nicht alle 5min sonder ändert sich manchmal.
Die Tabelle sieht wie folgt aus:
Name TimeString VarValue Validity Time_ms
Messung01 14.01.2012 12:00 14 1 41530789369
Messung02 14.01.2012 12:05 15 1 41530789377
.
.
.
Messung14 15.01.2012 12:01 14 1 41530789380
Messung15 15.01.2012 12:06 18 1 41530789369
.
.
.
usw (97200 weiter Datensätze)
Jetzt würde ich gerne alles Datensätze durchsuchen und aus zb. jedem TAG um 12:00 Uhr die Zeile auslesen und in ein anderes Excel-File oder Txt Datei schreiben. Sollte jetzt der Fall eintreffen das zb. bei einem TAG die Uhrzeit 12:00 Uhr nicht vorhanden ist sonder die nächste Messung erst um 12:01 ist dann soll eben dieser Wert genommen werden und wenn 12:01 auch nicht vorhanden ist dann soll der nächste Wert (12:06) verwendet werden.
Meine Wunschtabelle sollte dann so aussehen:
Name TimeString VarValue Validity Time_ms
Messung01 14.01.2012 12:00 14 1 41530789369
Messung14 15.01.2012 12:01 14 1 41530789380
Messung15 16.01.2012 12:06 18 1 41530789369
Messung32 17.01-2012 12:00 12 1 41530789369
usw.
...also immer ein Messung aus einem TAG zu einer bestimmten Zeit und wenn die Zeit (zb. 12:00) nicht vorhanden ist dann soll eben die nachste Zeit
(12:01,12:06...) genommen werden und in die neue Tabelle übernommen
besten DANK
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 218980
Url: https://administrator.de/contentid/218980
Ausgedruckt am: 19.12.2024 um 14:12 Uhr
5 Kommentare
Neuester Kommentar
Hallo sims!
Auf die Schnelle (einen Schönheitspreis werde ich damit nicht gewinnen) etwa so:
Das Makro ist aus der Quelldatei zu starten (siehe Zeile 2).
Grüße
bastla
Auf die Schnelle (einen Schönheitspreis werde ich damit nicht gewinnen) etwa so:
Sub ZeilenFiltern()
Set Quelle = ThisWorkbook
Set Ziel = Workbooks.Add
Zieldatei = "D:\Auszug.xlsx" 'Pfad der Zieldatei
ZZeile = 1 'erste Zeile der Zieltabelle
QZeile = 1 'erste zu verarbeitende Zeile der Quelltabelle
QSpalten = 5 'erste 5 Spalten der Quelltabelle übertragen
QKritSpalte = "B" 'Spalte mit dem Kriterium (Timestamp)
Zuletzt = 0 ' Startwert für Datum setzen
With Quelle.Worksheets(1)
'Überschriftenzeile übertragen
Ziel.Worksheets(1).Cells(ZZeile, "A").Resize(1, QSpalten) = .Cells(QZeile, "A").Resize(1, QSpalten).Value 'Zellen ab Spalte A übertragen
QZeile = QZeile + 1 'nächste Zeile der Quelldatei
ZZeile = ZZeile + 1 'nächste Zeile der Zieldatei
Datum = Int(.Cells(QZeile, QKritSpalte).Value) 'Datum aus aktueller Zeile der Quelldatei auslesen
Zeit = .Cells(QZeile, QKritSpalte).Value - Datum 'Uhrzeit aus aktueller Zeile der Quelldatei ermitteln
Do Until Datum = 0 'alle Datenzeilen der Quelldatei durchgehen
If Datum <> Zuletzt Then 'nur einen Datensatz / Tag
If Zeit >= 0.5 Then ' 0.5 = 12:00:00
Ziel.Worksheets(1).Cells(ZZeile, "A").Resize(1, QSpalten) = .Cells(QZeile, "A").Resize(1, QSpalten).Value 'Zellen ab Spalte A übertragen
ZZeile = ZZeile + 1 'nächste Zeile der Zieldatei
Zuletzt = Datum 'verarbeitetes Datum zwischenspeichern
End If
End If
QZeile = QZeile + 1 'nächste Zeile der Quelldatei
Datum = Int(.Cells(QZeile, QKritSpalte).Value) 'Datum aus aktueller Zeile der Quelldatei auslesen
Zeit = .Cells(QZeile, QKritSpalte).Value - Datum 'Uhrzeit aus aktueller Zeile der Quelldatei ermitteln
Loop
End With
Ziel.Worksheets(1).Columns.AutoFit 'alle Spalten der Zieldatei auf optimale Breite setzen
Ziel.SaveAs Zieldatei 'Zieldatei speichern
End Sub
Grüße
bastla
Hallo sims!
Schöne, dass es soweit passt.
Die Variante mit 2 Messungen pro Tag könnte so aussehen:
Die Formatierung des Timestamps in Spalte B der Ergebnisdatei auf "TT.MM.JJJJ hh:mm:ss" musst Du vermutlich nachträglich nochmals durchführen (bei Werten von genau 00:00:00 Uhr wird vermutlich nur das Datum angezeigt).
Grüße
bastla
Schöne, dass es soweit passt.
Die Variante mit 2 Messungen pro Tag könnte so aussehen:
Sub ZeilenFiltern()
Set Quelle = ThisWorkbook
Set Ziel = Workbooks.Add
Zieldatei = "D:\Auszug.xlsx" 'Pfad der Zieldatei
ZZeile = 1 'erste Zeile der Zieltabelle
QZeile = 1 'erste zu verarbeitende Zeile der Quelltabelle
QSpalten = 5 'erste 5 Spalten der Quelltabelle übertragen
QKritSpalte = "B" 'Spalte mit dem Kriterium (Timestamp)
Zuletzt = 0 ' Startwert für Datum setzen
Termin1 = True 'Kennzeichen für "Wert für Termin1 übertragen"
Termin2 = True 'Kennzeichen für "Wert für Termin2 übertragen"
With Quelle.Worksheets(1)
'Überschriftenzeile übertragen
Ziel.Worksheets(1).Cells(ZZeile, "A").Resize(1, QSpalten) = .Cells(QZeile, "A").Resize(1, QSpalten).Value 'Zellen ab Spalte A übertragen
QZeile = QZeile + 1 'nächste Zeile der Quelldatei
ZZeile = ZZeile + 1 'nächste Zeile der Zieldatei
Datum = Int(.Cells(QZeile, QKritSpalte).Value) 'Datum aus aktueller Zeile der Quelldatei auslesen
Zeit = .Cells(QZeile, QKritSpalte).Value - Datum 'Uhrzeit aus aktueller Zeile der Quelldatei ermitteln
Do Until Datum = 0 'alle Datenzeilen der Quelldatei durchgehen
If Datum <> Zuletzt Then
If Termin1 Then 'nur einmal am Tag den Datensatz für Termin1 übertragen
If Zeit >= 0 Then ' 0 = 00:00:00; Abfrage eigentlich nicht nötig (nur, falls ein anderer Zeitpunkt vewendet werden sollte)
Ziel.Worksheets(1).Cells(ZZeile, "A").Resize(1, QSpalten) = .Cells(QZeile, "A").Resize(1, QSpalten).Value 'Zellen ab Spalte A übertragen
ZZeile = ZZeile + 1 'nächste Zeile der Zieldatei
Termin1 = False 'Termin1 an diesem Tag nicht nochmals übertragen
Termin2 = True 'Termin2 kann übertragen werden
End If
End If
If Termin2 Then 'nur einmal am Tag den Datensatz für Termin2 übertragen
If Zeit >= 0.5 Then ' 0.5 = 12:00:00
Ziel.Worksheets(1).Cells(ZZeile, "A").Resize(1, QSpalten) = .Cells(QZeile, "A").Resize(1, QSpalten).Value 'Zellen ab Spalte A übertragen
ZZeile = ZZeile + 1 'nächste Zeile der Zieldatei
Zuletzt = Datum 'verarbeitetes Datum zwischenspeichern
Termin2 = False 'Termin2 an diesem Tag nicht nochmals übertragen
Termin1 = True 'Termin1 kann übertragen werden (ist aber erst wieder am nächsten Tag möglich - siehe "Zuletzt")
End If
End If
End If
QZeile = QZeile + 1 'nächste Zeile der Quelldatei
Datum = Int(.Cells(QZeile, QKritSpalte).Value) 'Datum aus aktueller Zeile der Quelldatei auslesen
Zeit = .Cells(QZeile, QKritSpalte).Value - Datum 'Uhrzeit aus aktueller Zeile der Quelldatei ermitteln
Loop
End With
Ziel.Worksheets(1).Columns.AutoFit 'alle Spalten der Zieldatei auf optimale Breite setzen
Ziel.SaveAs Zieldatei 'Zieldatei speichern
End Sub
Grüße
bastla
Hallo sims!
Grüße
bastla
kannst du ein BUCH oder Internetsite empfehlen womit ich als einsteiger mir gutes Excel VBA anlernen kann?
Bei herber.de habe ich öfter mal brauchbare Hinweise gefunden, die mittlerweile auch zu einem "wikibook" VBA in Excel zusammengestellt wurden - ob sich das für Dich eignet, musst Du selbst herausfinden ...Grüße
bastla