sims
Goto Top

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

Content-ID: 218980

Url: https://administrator.de/contentid/218980

Ausgedruckt am: 19.12.2024 um 14:12 Uhr

bastla
bastla 10.10.2013 um 17:49:18 Uhr
Goto Top
Hallo sims!

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
Das Makro ist aus der Quelldatei zu starten (siehe Zeile 2).

Grüße
bastla
sims
sims 13.10.2013 um 16:28:57 Uhr
Goto Top
Hallo bastla,
ich sag einfach nur DANK DANK DANKE! Das hat mir jede mänge arbeit abgenommen!!! daumen hoch

Es hat einwandfrei funktioniert!


Jetzt hätte ich noch eine Frage und zwar wäre es möglich das man für jeden Tag zwei Werte abgreift - z.B. einmal um 12Uhr (so wie es e schon dieses script macht) und einmal um 24Uhr so das man pro Tag zwei Werte hat in der neuen Tabelle stehen hat.

Wäre das möglich ?

besten DANK für deine HIlfe und unterstüzung

mfg
bastla
bastla 13.10.2013 um 19:52:02 Uhr
Goto Top
Hallo sims!

Schöne, dass es soweit passt. face-smile

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
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
sims
sims 13.10.2013 um 22:55:07 Uhr
Goto Top
Hey bastla,
nochmals BESTEN DANK - dein "know how" ist richtig gold wert für mich!

es hat einwandfrei funktioniert - DANKE!


hätte da noch einen andere Frage: und zwar kannst du ein BUCH oder Internetsite empfehlen womit ich als einsteiger mir gutes Excel VBA anlernen kann?

danke
bastla
bastla 18.10.2013 um 22:06:19 Uhr
Goto Top
Hallo sims!
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