我有2列具有相同的日期值和相同的自定义格式。 列“A”似乎是文本格式,列“B”似乎是日期时间格式,这是我想要实现的。
列“B”由“Text to Columns”工具修改,这是我发现的地方 技巧:How to Refresh Cell Data After Applying Number Formatting in Excel
现在,我希望通过VBA使用“A”列来做同样的事情来自动化这个东西。
以下是我迄今为止所尝试的内容,并未进行任何更改:
方法1:
ThisWorkbook.Worksheets("sheet1").Range("A2:A10").Calculate
方法2:
ThisWorkbook.Worksheets("sheet1").Range("A2:A10").Select
Selection.NumberFormat = "dd.mm.yyyy hh:mm"
Selection.TextToColumns DataType:=xlDelimited
方法3:
Dim rngCell As Range
Range("A2:A10").Select
For Each rngCell In Selection
If IsDate(rngCell.Value) Then
rngCell.Value2 = Format(rngCell.Value, "dd.mm.yyyy hh:mm")
End If
Next rngCell
方法4: 我还记录了我用“B”栏所做的事情的宏,但没有发生任何事情:
Range("A2:A10").Select
Selection.TextToColumns Destination:=Range("A2"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo:=Array(1, 1), TrailingMinusNumbers:=True
以下是Excel文件:Test.xlsb
答案 0 :(得分:2)
问题在于Excel如何存储日期和时间。
如果您选择列A
和B
并将格式设置为" General"您将看到B列将显示一个数字,这就是Excel存储日期的方式。 1 = 1-1-1900。 A列在后台没有这个数字,它是一个字符串,看起来像一个日期,所以Excel不能改变它的格式。
您首先需要将列A
的内容转换为Double
类型值,然后通过Excel格式化更改为日期。
工作表中字符串的日期格式并不适合内置的VBA字符串到目前为止的转换。我在下面使用了这一点,现在它应该正确转换。
For Each cll In Sheet1.Range("A2:A10")
If TypeName(cll.Value) = "String" Then 'Prevents errors when the procedure is run on dates which have already been converted
arrDateTime = Split(cll.Value, " ")
arrDate = Split(arrDateTime(0), ".")
dDate = DateSerial(arrDate(2), arrDate(1), arrDate(0))
arrTime = Split(arrDateTime(1), ":")
dTime = TimeSerial(arrTime(0), arrTime(1), 0)
dDateTime = dDate + dTime
cll.Value = dDateTime
End If
Next cll
答案 1 :(得分:0)
另一个有效的简单解决方案:
Dim dat As Date
For i = 2 To 10
Cells(i, 1).NumberFormat = "dd.mm.yyyy hh:mm"
dat = Cells(i, 1).Value
TimeValue (dat)
Cells(i, 1).Value = dat
Next i