作为宏更改日期值运行时查找和替换

时间:2015-04-16 03:29:48

标签: date excel-vba vba excel

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

如果我手动删除“Mon”或在工作表中使用replace all,我会得到正确的值“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

End Sub

2 个答案:

答案 0 :(得分:0)

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

将此行添加到Columns("C:C").Select下面的VBA Sub中,可以有效地执行相同操作:Selection.NumberFormat = "dd/mm/yyyy"

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

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

答案 1 :(得分:0)

这种情况正在发生,因为系统区域格式是mm / dd / yyyy格式,您需要做的是,在替换文本后,您应该将日期格式化为“dd / mm / yyyy”格式

相关问题