Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 查找/替换正确设置日期单元格格式的宏_Vba_Excel - Fatal编程技术网

Vba 查找/替换正确设置日期单元格格式的宏

Vba 查找/替换正确设置日期单元格格式的宏,vba,excel,Vba,Excel,我正在使用一个将某些数据导出为CSV格式的应用程序。但是,原始数据中的日期列格式不正确,并且包含不必要的年份尾随字符,这使得Excel在导入后无法正确解释 如果我在列上手动运行Find和Replace,这些值将自动识别为日期。但是,如果我将该操作记录为宏并再次运行,则会删除尾随字符,但列中的数据将保留为文本,而不是日期 以下是VBA代码: Sub formatDate() Columns("A:A").Select Selection.Replace What:=" г.", Replacem

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

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

以下是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 г.

使用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代码中显示而不还原为
“?”
?“
的?
Γ
实际上是unicode
ChrW(1075)
,VBA代码在没有ChrW的情况下不会复制。好的,最初我使用点击方法来记录宏,因此
Γ。
在代码中独立出现。