thomas1972
Goto Top

Verschieben von Zellinformation in andere Spalte (per VBA) excel 2010

Hallo,
ich habe folgendes Problem,

ich bekomme Daten welche über eine Webabfrage zur Verfügung gestellt wurde.
Nun ist es so, dass Werte in eine weitere Zeile geschrieben werden, welche ich für eine weitere Verarbeitung aber in die darüber liegende benötigen würde.

Die Tabelle sieht wie folgt aus (Ist Zustand Screenshot)

ich möchte nun erreichen, dass eine Spalte zwischen G&H erzeugt wird und der Wert welcher unterhalb processing since oder pending since steht, nebenan gestellt wird
Gleichzeitig möchte ich erreichen, dass das ausgelesene Datum / Uhrzeit abgeändert wird, so das dieses zu weitere Analyse verwendet werden kann

siehe Soll Zustand Screensot

Wie kann ich dieses am besten per vba realisieren?

Kann mir hier jemand helfen?
ist zustand
soll zustand

Content-Key: 318392

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

Ausgedruckt am: 19.03.2024 um 06:03 Uhr

Mitglied: 131223
131223 19.10.2016 um 13:15:34 Uhr
Goto Top
Sub DoWork()
    Dim cell As Range, rngDel As Range, dNew As Variant, m As Integer, i As Integer
    Set regex = CreateObject("vbscript.regexp")  
    arrmonth = Array("Jan", "Feb", "Mar", "Apr", "May", "June", "July", "Aug", "Sept", "Oct", "Nov", "Dec")  
    regex.IgnoreCase = True
    regex.Pattern = "[a-z]+ (\d+) ([a-z]+) (\d{4}) (\d{2}\:\d{2}\:\d{2}) (AM|PM)"  
    
    With ActiveSheet
        'Neue Spalte erstellen  
        .Range("G:G").EntireColumn.Insert Shift:=xlToRight  
        
        'Datumszellen in Spalte F verarbeiten  
        For Each cell In .Range("F2:F" & .Cells(Rows.Count, "F").End(xlUp).Row)  
            'Teste ob Zelle dem Muster entspricht  
            Set matches = regex.Execute(cell.Value)
            If matches.Count > 0 Then
                'Monat als Zahl ermitteln  
                m = 0
                For i = 0 To UBound(arrmonth)
                    If UCase(matches(0).Submatches(1)) = UCase(arrmonth(i)) Then
                        m = i + 1
                        Exit For
                    End If
                Next
                'Umgewandelte Zeit in Zelle eintragen  
                cell.Offset(-1, 1).Value = CDate(matches(0).Submatches(0) & "." & m & "." & matches(0).Submatches(2) & " " & matches(0).Submatches(3) & " " & matches(0).Submatches(4))  
                'zu löschende Zeile sichern  
                If Not rngDel Is Nothing Then
                    Set rngDel = Union(rngDel, cell.EntireRow)
                Else
                    Set rngDel = cell.EntireRow
                End If
            End If
            
        Next
        'zu löschende Zeilen löschen  
        If Not rngDel Is Nothing Then
            rngDel.Delete
        End If
    End With
End Sub
Mitglied: thomas1972
thomas1972 19.10.2016 um 14:32:57 Uhr
Goto Top
Hallo Sacknase,

Vielen dank für deine hilfe,
funktioniert wunderbar, leider wird die Jahreszahl verfälscht .z.b. wert 2016 wird 2012,
siehe Screenshot,

kannst du hier ggf. nochmal Prüfen, warum dieses so umgesetzt wird.

soweit wie ich erkennen konnte nimmt er nicht die Jahreszahl, sondern den Tag und daraus die Jahreszahl... z.b. Tag 19 erzeugt anstatt 2016 -> 2019.

Grüße aus München
Thomas
falsche datum erzeugt
Mitglied: 131223
131223 19.10.2016 aktualisiert um 14:44:06 Uhr
Goto Top
War nur ein Tippfehler. Eine Zahl in Zeile 26 geändert.
Mitglied: thomas1972
thomas1972 24.10.2016 um 12:08:55 Uhr
Goto Top
Hallo Sacknase,

ich muss den Thread nochmal aufmachen.
Leider habe ich übersehen, dass es Webabfragen gibt, in welcher das Datum wie folgt vorgegeben wird:

Sun Oct 23 12:01:43 2016
dein Script bezieht sich auf
Mon 24 Oct 2016 11:33:44 AM CEST

Wie weit muss ideses geändert werden, so dass AM CEST oder PM CEST wie bisher
aber auch ohne ( sprich bereits richtiges Zeitformat (24 Stunden) aufgespittet wird.

Die Zeile
regex.Pattern = "[a-z]+ (\d+) ([a-z]+) (\d{4}) (\d{2}\:\d{2}\:\d{2}) (AM|PM)"  
....
Set matches = regex.Execute(cell.Value)
erzeugt ohne die Angabe AM oder PM keine Aktion
und kann somit nicht umwandeln,

cell.Offset(-1, 1).Value = CDate(matches(0).Submatches(0) & "." & m & "." & matches(0).Submatches(2) & " " & matches(0).Submatches(3) & " " & matches(0).Submatches(4))  

die Zelle bleibt leer.

Vielen Dank für deine bisherige Unterstützung.
Mitglied: 131223
131223 24.10.2016 um 12:12:58 Uhr
Goto Top