[英]Date from Text format to Date format in VBA
我想將日期從文本格式更改為日期格式(自定義)dd / mm / yyyy hh:mm。 我已經閱讀了網站內所有類型的類似問題,但似乎對我沒有任何幫助。 即使我應用更改,日期仍保持為文本格式。 有沒有一種方法可以在VBA中使用Date函數。 或一般而言,關於我最終將如何工作的任何想法。 我的日期是來自名為“ TMS”的excel工作表中的vlookup,它們以文本格式顯示。 目標工作表為“跟蹤器”。 日期從網站導入到“ 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
只需添加到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),)")
我不確定您的工作表的組織方式,但是考慮到日期已導入到Sheets("TMS").Range("G2:G" & lastrow)
,並且您無法僅通過使用.NumberFormat = "mm/dd/yyyy hh:mm"
來更改其格式。 .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
試試這個代碼。
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.