查找/replace正确格式化date单元格的macros

我正在使用将某些数据导出为CSV格式的应用程序。 但是,date列在原始数据中格式不​​正确,并且包含一年中不必要的尾部字符,导致Excel在导入后无法正确解释它。

如果我在列上手动运行“查找和replace”,则这些值将自动识别为date。 但是,如果将操作logging为macros,并再次运行,则删除尾随字符,但列中的数据保留为文本而不是date。

这是VBA代码:

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

date的区域格式是DD.MM.YYYY 。 此外,如果我简单地编辑任何结果单元格(F2)并按Enter键而不进行其他操作,Excel将切换到正确的格式。

样本数据:

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

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

通过固定的dd.mm.yyyy格式的文本看起来像date,

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

随着文本看起来像date显示date之后和尾随文本之前的空间,

 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为中心),那么只需在现有代码中添加一行即可,并可以select设置单元格格式。

 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 ( 不是特别推荐 ),但你应该能够轻松地转换。