2016-10-17 5 views
2

Ich habe ein Visual Basic-Skript, um Daten von einem Blatt zu einem anderen zu sortieren, das einzige Problem ist, dass Spalte B Datum und Uhrzeit im Format enthält: "YYYYMMDD HH: MM: SS: ??? "wie in 20160901 09: 36: 18: 963Visual Basic - JJJJMMTT HH: MM: SS: MS zu

Und nach einiger Zeit auf Google und Stackoverflow habe ich keine funktionierende Lösung gefunden. Ich möchte, dass alle meine Daten in den Spalten A, B und C nach dem Datum sortiert werden, am längsten oben und am jüngsten unten.

Spalte A und B werden dann in ein Diagramm eingefügt, aber das ist für später.

Also abschließend, ich brauche Hilfe beide meine Änderung YYYYMMDD HH: MM: SS: ??? wie in 20160901 09: 36: 18: 963 in ein Datumsformat (Excel scheint es nicht als Datum zu erkennen) und sortiert auch die Daten nach dem Datum.

Vielen Dank im Voraus!

Dies ist das Skript ab jetzt:

Sub tjabo_script() 
Dim ArtikelNummer As Variant 
Dim NewSheet As Worksheet 
Dim RowCount As Long 
Dim i As Long, x As Long 
Dim check_value As Range 
ArtikelNummer = InputBox("Skriv in artikelnummer", "Artikelsortering") 
Set NewSheet = Sheets.Add(After:=Sheets(Worksheets.Count), Count:=1, Type:=xlWorksheet) 
NewSheet.Name = ArtikelNummer 

x = 2 'This is the next empty row on NewSheet. 
With Worksheets("Data") 
    RowCount = .Cells(.Cells.Rows.Count, "B").End(xlUp).Row 
    For i = 1 To RowCount 
     If .Cells(i, 2) = Val(ArtikelNummer) Then 
      .Cells(i, 2).Columns("D:D").Copy Destination:= _ 
       NewSheet.Cells(x, 1) 
      .Cells(i, 2).Columns("N:N").Copy Destination:= _ 
       NewSheet.Cells(x, 2) 
      .Cells(i, 2).Columns("C:C").Copy Destination:= _ 
       NewSheet.Cells(x, 3) 
      x = x + 1 
     End If 
    Next i 
End With 
    Application.Worksheets(ArtikelNummer).Range("A1") = "LagerSaldo" 
    Application.Worksheets(ArtikelNummer).Range("B1") = "Datum/Tid" 
    Application.Worksheets(ArtikelNummer).Range("C1") = "Antal (+/-)" 
End Sub 
+1

Was ist dein Skript? Können Sie auch einige Beispieldaten posten? (Kopieren/Einfügen wird gegenüber einem Screenshot bevorzugt). – BruceWayne

+0

haben Sie versucht, die Spalten als Daten zu formatieren? – Sorceri

+1

Verwenden Sie diese Formel in einer leeren Spalte.'= - SUBSTITUTE (REPLACE (ERSETZEN (B1,7,0," - "), 5,0," - "),": ",". ", 3)' Und kopieren Sie nach unten. Dann formatiere diese neuen Zellen wie du willst. 'yyyymmdd hh: mm: ss.000' –

Antwort

0

Hier ist mein Ansatz. Ich gehe davon aus, ein Beispiel für einen Zeitstempel ist etwa 20161017 12:12:12:999 Sie versuchen, ein Datum.

Ich machte eine einfache UDF, um eine Zeichenfolge in ein Date zu ändern. Von hier aus, sobald Sie den Wert des Datums haben, können Sie es wie gewünscht anzeigen.

-Code

Public Sub Example() 
    ActiveSheet.Range("A1").Value = FormatAsDate("20161001 12:12:12:999") 
End Sub 

Function FormatAsDate(ByVal StrIn As String) As Date 
    StrIn = Trim(StrIn) 

    FormatAsDate = CDate(Left(StrIn, 4) & "/" & _ 
        Mid(StrIn, 5, 2) & "/" & _ 
        Mid(StrIn, 7, 2) & _ 
        Mid(StrIn, 9, 9)) 
End Function 

Ausgabe

enter image description here

0

mit Beispieldaten in A1 wie:

enter image description here

Es ist nicht möglich VBA bekommt den Millisekunden Teil zu behandeln, wenn die VBA Variable Dim'ed als Date ist. Es ist besser, eine Double Variable zu verwenden. Hier ein Fragment von Beispielcode:

Sub DateEquivalent() 
    Dim dD As Double, s As String 
    Dim d1 As Double, d2 As Double 

    s1 = Range("A1").Text 
    Mid(s1, 18, 1) = "." 
    ary = Split(s1, " ") 

    d1 = CDbl(DateSerial(Left(ary(0), 4), Mid(ary(0), 5, 2), Right(ary(0), 2))) 
    s1 = "Timevalue(""" & ary(1) & """)" 
    dD = d1 + Evaluate(s1) 

    MsgBox d1 & vbCrLf & dD 
End Sub 

Hinweis konvertieren wir den letzten Doppelpunkt in einen Zeitraum durch die Verwendung Mid(). Das ist das Leben leichter für das Arbeitsblatt ZEITWERT zu machen() Funktion:

enter image description here

Der nächste Schritt wäre, diese kurze Makro zu ändern, jede „pseudo-date“ mit den äquivalenten Double Variable zu ersetzen.

Sobald Sie Double Variablen haben, ist das Sortieren einfach.

Verwandte Themen