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