Visual Basic – YYYYMMDD HH:MM:SS:MS to

我有一个Visual Basic脚本来整理从一张表到另一个数据,唯一的问题是,列B包含date和时间格式为:“ YYYYMMDD HH:MM:SS:??? ”在20160901 09:36 :18:963

经过了相当一段时间在谷歌和计算器上,我还没有find任何工作的解决scheme。 我希望列A,B和C中的所有数据在date之后被sorting,最长的在最前面,最近的在底部。

然后列A和B将被放入一个图表,但这是为了以后。

所以最后,我需要帮助改变我的YYYYMMDD HH:MM:SS:??? 如20160901 09:36:18:963中的date格式(excel似乎不认为它是一个date),也sortingdate之后的数据。

预先感谢!

这是现在的脚本:

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 

这是我的方法。 我假设一个示例时间戳是类似20161017 12:12:12:999你正在尝试一个date。

我做了一个简单的UDF把一个string变成一个Date。 从这里一旦你有date的价值,你可以显示它,无论如何你希望。

 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 

产量

在这里输入图像说明

A1中的示例数据如下所示:

在这里输入图像说明

如果将VBAvariables作为Date Dim'ed ,则无法使VBA处理毫秒部分。 最好使用Doublevariables。 这里是示例代码的一个片段:

 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 

请注意,我们通过使用Mid()将最后一个冒号转换为一个句点。 这是为了使工作表TIMEVALUE()函数更简单:

在这里输入图像描述

下一步将是修改这个短的macros,用等价的Doublevariablesreplace每个“伪date”。

一旦你有Doublevariables,sorting很简单。