Vba 查找/替换正确设置日期单元格格式的宏
我正在使用一个将某些数据导出为CSV格式的应用程序。但是,原始数据中的日期列格式不正确,并且包含不必要的年份尾随字符,这使得Excel在导入后无法正确解释 如果我在列上手动运行Find和Replace,这些值将自动识别为日期。但是,如果我将该操作记录为宏并再次运行,则会删除尾随字符,但列中的数据将保留为文本,而不是日期 以下是VBA代码:Vba 查找/替换正确设置日期单元格格式的宏,vba,excel,Vba,Excel,我正在使用一个将某些数据导出为CSV格式的应用程序。但是,原始数据中的日期列格式不正确,并且包含不必要的年份尾随字符,这使得Excel在导入后无法正确解释 如果我在列上手动运行Find和Replace,这些值将自动识别为日期。但是,如果我将该操作记录为宏并再次运行,则会删除尾随字符,但列中的数据将保留为文本,而不是日期 以下是VBA代码: Sub formatDate() Columns("A:A").Select Selection.Replace What:=" г.", Replacem
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 г.
使用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非常以美国为中心),那么只需在现有代码中添加一行,并可以选择设置单元格格式
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
here(),但您应该能够轻松地进行转换。是看起来像日期的文本,带有固定格式的附加字符,因此它们的长度都相同;e、 g.是2017年5月3日还是2017年5月3日?如果是这样,那么使用固定长度的文本到列以及正确的DMY与MDY格式是更好的方法。很抱歉,没有示例数据,因此没有解决方案。不幸的是,文本“应该是日期”不是固定长度的,因为生成程序使用月份名称,此外,日期有时是1位数,有时是2位数。因此,我想提供几个“带文本的日期”示例可能是个好主意。下面是一个日期示例列表。这有助于调整VBA吗?另外,我可以看到您使用了TextToColumns,我想这意味着我需要一个空列?还是不?我只是想澄清一下,因为我对VBA不太精通:在原始数据数组的某个地方是否应该有一个空列,比如在日期列之后(因为它不是唯一的一个)?如果我使用上面的第二个代码段,就会出现这种情况:;如果我使用第一个,17
将从年度中剥离。如果使用最后一个,尾随字符确实会被删除,但剩下的仍然是Excel的文本:(你是如何让“Γ。”
在VBA代码中显示而不还原为“?”
?“的?Γ
实际上是unicodeChrW(1075)
,VBA代码在没有ChrW的情况下不会复制。好的,最初我使用点击方法来记录宏,因此Γ。
在代码中独立出现。