查找/替换正确格式化日期单元格的宏

时间:2017-03-17 16:55:13

标签: excel vba excel-vba

我正在使用将某些数据导出为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 г.

1 个答案:

答案 0 :(得分:2)

使用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

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