Vba Visual Basic-YYYYMMDD HH:MM:SS:MS到
我有一个Visual Basic脚本可以将数据从一张表整理到另一张表,唯一的问题是B列包含日期和时间,格式为:“YYYYMMDD HH:MM:SS:?”,如20160901 09:36:18:963所示 在谷歌和stackoverflow上花了相当长的时间后,我还没有找到任何有效的解决方案。我希望A、B和C列中的所有数据都在日期之后排序,最长的日期在顶部,最新的日期在底部 然后A列和B列将被放入一个图表中,但这是为了以后 因此,总之,我需要帮助将我的YYYYMMDD HH:MM:SS:?如20160901 09:36:18:963中所示更改为日期格式(excel似乎没有将其识别为日期),并在日期之后对数据进行排序 提前感谢 以下是截至目前的脚本:Vba Visual Basic-YYYYMMDD HH:MM:SS:MS到,vba,excel,Vba,Excel,我有一个Visual Basic脚本可以将数据从一张表整理到另一张表,唯一的问题是B列包含日期和时间,格式为:“YYYYMMDD HH:MM:SS:?”,如20160901 09:36:18:963所示 在谷歌和stackoverflow上花了相当长的时间后,我还没有找到任何有效的解决方案。我希望A、B和C列中的所有数据都在日期之后排序,最长的日期在顶部,最新的日期在底部 然后A列和B列将被放入一个图表中,但这是为了以后 因此,总之,我需要帮助将我的YYYYMMDD HH:MM:SS:?如201
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
我制作了一个简单的自定义项,将字符串更改为日期。从这里,一旦你有了日期值,你就可以随心所欲地显示它
代码
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中,如: 如果VBA变量作为
日期变暗
,则无法让VBA处理毫秒部分。最好使用Double
变量。下面是一段示例代码:
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()函数的使用更加方便:
下一步是修改这个短宏,用等效的Double
变量替换每个“伪日期”。
一旦有了Double
变量,排序就很简单了。你的脚本是什么?你也可以发布一些样本数据吗?(复制/粘贴优先于屏幕截图)。是否尝试将列格式化为日期?在空列中使用此公式<代码>=--替换(替换(替换(B1,7,0,“-”,5,0,“-”,:”,“,”,3)
并向下复制。然后按照您的需要格式化这些新单元格yyyymmdd hh:mm:ss.000
请阅读帮助页面以了解有关的信息;还有@ScottCraner谢谢!问题是我想在我的vb脚本中使用这个函数。您知道将其“翻译”为visual basic的快速解决方案吗?