【问题标题】:Excel VBA Replace Messes Up Date formats while Manual Replace worksExcel VBA 替换弄乱了日期格式,而手动替换有效
【发布时间】:2016-06-25 14:36:54
【问题描述】:

我正在将一堆日期从自动生成的时间戳转换为 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 的内置替换,它是正确的。

【问题讨论】:

  • 无法复制。刚刚复制了你的数据和代码,它工作得很好。好奇,您是美国用户还是其他国家/地区的用户?
  • 您还会注意到“右”是文本而不是数字。它们将被左对齐,而“错误”的将被右对齐并且被数字掩蔽为数据/时间。它与本地设置有关。
  • 它被正确地识别为时间戳,只是在某些日子交换了月份和日期。和@holtz:我来自另一个国家

标签: vba excel date format


【解决方案1】:

如果您的输入始终采用相同的格式并且它恰好是一个字符串,您可以通过编程方式将其分解,然后显式地重新转换为日期。

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

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

【讨论】:

    猜你喜欢
    • 2018-10-27
    • 1970-01-01
    • 2013-11-02
    • 1970-01-01
    • 2013-04-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-03
    • 1970-01-01
    相关资源
    最近更新 更多