【问题标题】:Find and replace when run as macro changes date value在宏更改日期值时运行时查找和替换
【发布时间】:2015-04-16 03:29:47
【问题描述】:

我在查找和替换方面遇到了一些问题。在我的源工作簿中,我有项目开始日期的文本字符串。例如,他们阅读每天(周一至周五)的前三个字母,然后是相关的日期“Mon dd/mm/yyyy”。我需要它们以日期“dd/mm/yyyy”的形式出现,以便我可以在另一个工作簿中提取后使用它们。

如果我手动删除“Mon”或在工作表本身中使用全部替换,我会得到“dd/mm/yyyy”的正确值(自动转换为日期格式)。日期 01/05/2015 的序列号,例如 42186。

但是,当我使用宏通过替换工具删除“Mon”时,我的日期值变为 05/01/2015。不是格式错误,而是实际值发生变化,新的日期序列号为42009。

任何关于为什么会发生这种情况/如何阻止它的帮助将不胜感激!

我在下面包含了我的宏替换代码。

Sub replace()
'Replace "Wed -Fri " with ""
Columns("C:C").Select
Selection.replace What:="Wed ", Replacement:="", LookAt:=xlPart, _
    SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
    ReplaceFormat:=False
Selection.replace What:="Fri ", Replacement:="", LookAt:=xlPart, _
    SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
    ReplaceFormat:=False
Selection.replace What:="Thu ", Replacement:="", LookAt:=xlPart, _
    SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
    ReplaceFormat:=False

结束子

【问题讨论】:

  • 替换前C列的原始格式是什么?它的格式是文本还是日期?

标签: date excel vba


【解决方案1】:

在 VBA 中使用 Range.Replace 函数会自动将日期转换为默认格式 mm/dd/yyyy,除非您覆盖它。您应该首先尝试将 C 列的格式设置为自定义-> dd/mm/yyyy。

将此行添加到您的 VBA Sub 正下方 Columns("C:C").Select 将有效地做同样的事情:Selection.NumberFormat = "dd/mm/yyyy"

不过,对于这个问题,我可能会完全避免使用 VBA,并使用 =RIGHT(A1,LEN(A1)-4) 之类的东西,假设单元格 A1 包含 Mon 01/05/2015

这将抓取单元格中除前 4 个字符之外的所有字符。这当然需要数据完整性,其中所有日期只有三个字母,并且在日期和日期之间都有一个空格。

【讨论】:

  • 另外需要注意的是,您引用的原始格式是excel中完全有效的日期格式。自定义日期代码将等于 ddd dd/mm/yyyy。因此,您可以使用本机 excel 日期功能完成所有工作。
  • 非常感谢 Andrew L,我什至没有想到使用 RIGHT 和 LEN。现在完美运行。
【解决方案2】:

出现这种情况是因为,系统区域格式是mm/dd/yyyy格式,你需要做的是,替换文本后,将日期格式化为“dd/mm/yyyy”格式

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-06
    • 2013-11-07
    • 1970-01-01
    • 1970-01-01
    • 2018-12-06
    • 2011-11-26
    • 2015-04-26
    • 2021-11-30
    相关资源
    最近更新 更多