我想将日期从文本格式更改为日期格式(自定义)dd / mm / yyyy hh:mm。我一直在网站上阅读所有类似的类似问题,但似乎没有什么对我有用。即使我应用更改,日期也会保留为文本格式。有没有办法在VBA中使用Date函数。或者一般来说,任何有关我如何最终使其发挥作用的想法。我的日期是来自名为" TMS"的excel表的vlookup,它们是文本格式。目标表是" Tracker"。日期从网站导入到" TMS"表格,所以我必须在Excel中自动执行格式更改。我的代码如下。非常感谢!!
下面的代码是固定代码,日期格式有效,但它不会为每一行运行循环,而只是将第一行的值复制粘贴到其他行。换句话说,它适用于第一行,但不适用于另一行!
Sub Tracker()
Sheets("TMS").Select
lastrow = Range("B" & Rows.Count).End(xlUp).Row
With Range("G2:G" & lastrow)
If Not IsEmpty(Range("G2:G" & lastrow)) Then
.value = .Parent.Evaluate("DATE(MID(" & .Address & ",7,4),MID(" & .Address & ",4,2),LEFT(" & .Address & ",2))+RIGHT(" & .Address & ",4)")
End If
End With
Sheets("Tracker").Select
lastrow = Range("B" & Rows.Count).End(xlUp).Row
With Range("AG2:AG" & lastrow)
.Formula = "=VLOOKUP(B2,TMS!B:G,6,FALSE)"
.value = .value
End With
End Sub
答案 0 :(得分:3)
答案 1 :(得分:3)
只需添加到With Range("G2:G" & lastrow)
部分:
.Value = .Parent.Evaluate("DATE(MID(" & .Address & ",7,4),MID(" & .Address & ",4,2),LEFT(" & .Address & ",2))+RIGHT(" & .Address & ",4)")
这应该在一个步骤中将所有字符串更改为数值:)
修改强>
由于Evaluate
不想以这种方式返回数组,我们只需通过INDEX
强制执行:
.Value = .Parent.Evaluate("INDEX(DATE(MID(" & .Address & ",7,4),MID(" & .Address & ",4,2),LEFT(" & .Address & ",2))+RIGHT(" & .Address & ",4),)")
答案 2 :(得分:0)
我不确定您的工作表是如何组织的,但考虑到日期已导入Sheets("TMS").Range("G2:G" & lastrow)
,并且您无法仅使用.NumberFormat = "mm/dd/yyyy hh:mm"
更改其格式,那么您需要摆脱完整文本并将其粘贴为日期。
您还应该避免选择表格。您的代码应该与此类似。如果我猜错了,请更正部件。
Sub Tracker()
Dim lastrow As Long
Dim arr() As Date
With Sheets("TMS")
lastrow = .Range("B" & .Rows.Count).End(xlUp).Row
ReDim arr(lastrow) As Date
For i = 2 To lastrow
arr(i) = .Range("G" & i).Value
Next i
.Range("G2:G" & lastrow).Delete
For i = 2 To lastrow
.Range("G" & i) = arr(i)
Next i
.Range("G2:G" & lastrow).NumberFormat = "mm/dd/yyyy hh:mm"
End With
With Sheets("Tracker")
lastrow = .Range("B" & .Rows.Count).End(xlUp).Row
With .Range("AG2:AG" & lastrow)
.Formula = "=VLOOKUP(B2,TMS!B:G,6,FALSE)"
.NumberFormat = "mm/dd/yyyy hh:mm"
End With
End With
End Sub
答案 3 :(得分:0)
试试这段代码。
Sub Tracker()
Dim vDB, vT, vD
Dim i As Long
With Sheets("TMS")
lastrow = .Range("B" & Rows.Count).End(xlUp).Row
With .Range("G2:G" & lastrow)
vDB = .Value
If IsDate(vDB(1, 1)) Then
Else
For i = 1 To UBound(vDB, 1)
vT = Split(vDB(i, 1), " ")
vD = Split(vT(0), "/")
vDB(i, 1) = DateSerial(vD(2), vD(1), vD(0)) + Val(Trim(vT(1)))
Next i
End If
.Value = vDB
.NumberFormat = "mm/dd/yyyy hh:mm"
End With
End With
With Sheets("Tracker")
lastrow = .Range("B" & Rows.Count).End(xlUp).Row
With .Range("AG2:AG" & lastrow)
.Formula = "=VLOOKUP(B2,TMS!B:G,6,FALSE)"
.NumberFormat = "mm/dd/yyyy hh:mm"
.Value = .Value
End With
End With
End Sub