當我通過 vba 運行查找和替換時,它會將我的日期更改為我們的格式。所以我有一列日期,但它們都以我要洗掉的文本為前綴(例如發票日期:dd/mm/yyyy)。當我使用 Ctrl F 并手動替換時,一切都很好。洗掉文本,日期保持其原始格式 dd/mm/yyyy。但是,當使用 vba 執行此操作時,如果日期小于 12(即一年中的月份),它會將日期更改為 mm/dd/yyyy。我嘗試了許多不同的方法來轉換它,但它們似乎都有同樣的問題。這是我最近的失敗...
Sub DateConvert()
Sheets("Sheet1").Select
Dim strValue As String
Dim RowCount As Integer
Dim x As Integer
Dim DateValue As Date
RowCount = WorksheetFunction.CountA(Range("C1", Range("C1").End(xlDown)))
For x = 2 To RowCount
'changes cell value to a string
strValue = Cells(x, 3).Value
'removes unwanted text
Cells(x, 3).Replace _
What:="Invoice Date:", Replacement:=""
'changes to string to desired date format
DateValue = Cells(x, 3).NumberFormat = "dd/mm/yyyy"
Next x
End Sub
拜托,在筆記本電腦或我走出窗外之前,請有人讓我擺脫這種痛苦。提前致謝
uj5u.com熱心網友回復:
日期非常煩人。確保使用正確日期的最佳選擇是使用 DateSerial 函式,然后根據需要格式化輸出:
Sub DateConvert()
Dim ws As Worksheet: Set ws = ActiveWorkbook.Worksheets("Sheet1")
Dim rData As Range: Set rData = ws.Range("C2", ws.Cells(ws.Rows.Count, "C").End(xlUp))
If rData.Row < 2 Then Exit Sub 'No data
'Load range data into an array
Dim aData() As Variant
If rData.Cells.Count = 1 Then
ReDim aData(1 To 1, 1 To 1)
aData(1, 1) = rData.Value
Else
aData = rData.Value
End If
'Loop over array and perform conversion
Dim aDateValues As Variant
Dim i As Long
For i = 1 To UBound(aData, 1)
aDateValues = Split(Replace(aData(i, 1), "Invoice Date:", vbNullString), "/") 'Remove the extra text and pull the date values
aData(i, 1) = DateSerial(aDateValues(2), aDateValues(1), aDateValues(0)) 'Use DateSerial to guarantee correct date
Next i
'Output results to sheet with desired date format
With rData
.Value = aData
.NumberFormat = "dd/mm/yyyy"
End With
End Sub
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/496836.html
下一篇:更改日期格式Java