【问题标题】:Find/replace macro that properly formats a date cell查找/替换正确格式化日期单元格的宏
【发布时间】:2017-03-17 16:55:13
【问题描述】:

我正在使用将某些数据导出为 CSV 格式的应用程序。但是,日期列在原始数据中的格式不正确,并且包含不必要的年份尾随字符,这会阻止 Excel 在导入后正确解释它。

如果我在列上手动运行查找和替换,这些值会自动识别为日期。但是,如果我将操作记录为宏,然后再次运行,则会删除尾随字符,但列中的数据会保留为文本,而不是日期。

这是 VBA 代码:

Sub formatDate()

Columns("A:A").Select
Selection.Replace What:=" г.", Replacement:="", LookAt:=xlPart, _
    SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
    ReplaceFormat:=False
End Sub

日期的区域格式为DD.MM.YYYY。此外,如果我只是编辑任何结果单元格 (F2) 并按 Enter 键,Excel 会切换到正确的格式。

样本数据:

4 март 2017 г.
4 март 2017 г.
3 март 2017 г.
1 март 2017 г.
28 февруари 2017 г.
27 февруари 2017 г.
27 февруари 2017 г.
26 февруари 2017 г.
26 февруари 2017 г.

【问题讨论】:

  • 是文本看起来像日期的固定格式,所以它们都是相同的长度;例如他们是 2017 年 3 月 5 日还是 2017 年 3 月 5 日?如果是这样,那么具有固定长度和正确的 DMY 与 MDY 格式的 Text-To-Columns 是一种更好的方法。抱歉,没有样本数据,所以没有解决方案。
  • 不幸的是,文本应该是一个日期不是固定长度,因为生成程序使用月份的名称,此外,日期有时是 1 位,有时 -有两个。
  • 所以我想提供几个'date-with-text'的例子可能是个好主意。

标签: vba excel


【解决方案1】:

使用 TextToColumns 快速去除尾随字符并转换为日期。

使用固定 dd.mm.yyyy 格式的文本日期,

with selection
    .TextToColumns Destination:=.cells(1, 1), DataType:=xlFixedWidth, _
                   FieldInfo:=Array(Array(0, xlDMYFormat), Array(10, xlSkipColumn))
    .numberformat = "dd.mm.yyyy"
end with

看起来像日期的文本在日期之后和尾随文本之前显示一个空格,

With Selection
    .TextToColumns Destination:=.Cells(1, 1), DataType:=xlDelimited, ConsecutiveDelimiter:=True, _
                   Tab:=False, Semicolon:=False, Comma:=False, Space:=True, Other:=False, _
                   FieldInfo:=Array(Array(1, xlDMYFormat), Array(2, xlSkipColumn))
End With

如果 TextToColumns 给您带来保加利亚月份名称方面的问题(VBA 非常以 US-EN 为中心),那么只需在现有代码中添加一行并可选择设置单元格格式。

with Selection
    .Replace What:=" г.", Replacement:=vbNullString, LookAt:=xlPart, _
             SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
             ReplaceFormat:=False
    .value = .value2
    .numberformat = "dd.mm.yyyy"
end with

我在这里使用了Selection (not particularly recommended),但您应该可以轻松转换。

【讨论】:

  • 这里是日期的示例列表。这会帮助你调整VBA吗? pastebin.com/ePwiEd3w 另外,我可以看到您使用过 TextToColumns,我认为这意味着我需要在某处有一个空列?还是不行?
  • 澄清一下,因为我不太精通 VBA:原始数据数组中是否应该有一个空列,比如在日期列之后(因为它不是唯一的)?如果我使用上面的第二个 sn-p 会发生这种情况:imgur.com/a/fPvo5;如果我使用第一个,17 将从年份中删除。如果我使用最后一个,尾随字符会被删除,但剩下的仍然是 Excel 的文本。 :(
  • 您如何让" г." 出现在VBA 代码中而不被还原为" ?."г 实际上是 unicode ChrW(1075),如果没有 ChrW,VBA 代码不会重现。
  • 嗯,一开始我是用点击的方式来录制宏的,所以г.就单独出现在了代码中。
猜你喜欢
  • 1970-01-01
  • 2016-03-26
  • 2023-03-18
  • 2013-09-18
  • 2018-09-28
  • 1970-01-01
  • 2013-08-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多