Excel VBA替换在手动替换工作时会弄乱日期格式

Excel VBA替换在手动替换工作时会弄乱日期格式,vba,excel,date,format,Vba,Excel,Date,Format,我正在将一组日期从自动生成的时间戳转换为excel可以理解的格式,方法是删除日期和时间之间的“-”号 使用 Sub dateFix() Worksheets("INPUT CALC XL BASED").Range("B:B").Replace _ What:="-", Replacement:="", _ SearchOrder:=xlByColumns, MatchCase:=True End Sub 它会将大多数日期返回为DD/MM/AAA,但有些日期会被任意更改为MM/

我正在将一组日期从自动生成的时间戳转换为excel可以理解的格式,方法是删除日期和时间之间的“-”号

使用

 Sub dateFix()
  Worksheets("INPUT CALC XL BASED").Range("B:B").Replace _
  What:="-", Replacement:="", _
  SearchOrder:=xlByColumns, MatchCase:=True
 End Sub
它会将大多数日期返回为DD/MM/AAA,但有些日期会被任意更改为MM/DD/AAA

我注意到最小的数字(10以下)容易混淆

输入有点像

18/02/2016 - 12:54
10/02/2016 - 17:11
05/02/2016 - 13:13
01/02/2016 - 08:55
它会像

18/02/2016 12:54 (right)
10/02/2016 17:11 (right)
02/05/2016 13:13 (wrong)
02/01/2016 08:55 (wrong)

奇怪的是,使用Excel内置的Replace,它就正确了

如果您的输入总是采用相同的格式,而它恰好是一个字符串,那么您可以通过编程将其分解,然后显式地将其改为日期

For i = 1 to WorksheetFunction.CountA(Rows(1))
  splitdate = Split(Cells(i,2),"-")
  Cells(i,2).NumberFormat = "dd/mm/yyyy"
  Cells(i,2).Value = DateSerial(splitdate(2),splitdate(1),splitdate(0))
Next

如果它不是一个字符串(即一些被识别为日期,一些被识别为字符串),您可以在CSTR中包装Split命令以强制进行处理。

无法复制。只是复制了你的数据和代码,效果很好。好奇的是,你是美国用户还是其他国家的用户?你还会注意到“正确”的是文本而不是数字。它们将左对齐,而“错误”的将右对齐,并被数字掩盖为数据/时间。它与本地设置有关。它被正确地重新标记为时间戳,只是在某些天交换了月份和日期。霍尔茨:我来自另一个国家