我有一系列带日期的单元格,其中包含必须替换的值。一旦我使用一般的Find& amp;替换 - 它运作顺利。当我在VBA中执行此操作时,单元格的格式将更改,并且日期将转换为错误的格式,例如2015年12月10日(10月12日),但成为2015年12月10日(12月10日)。这是代码:
Sub find_replace()
ActiveSheet.Range("T1", Range("T1").End(xlToRight).Offset(0, -2)).Select
With Selection
.NumberFormat = "dd/mm/yyyy"
.Replace What:="P.", Replacement:="", LookAt:=xlPart, SearchOrder:=xlByColumns, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
.Replace What:=".", Replacement:="/", LookAt:=xlPart, SearchOrder:=xlByColumns, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
End With
End Sub
请非常友好地建议如何摆脱这个恼人的问题。感谢。
答案 0 :(得分:1)
由.NumberFormat
引起的。尝试将其更改为.NumberFormat = "mm/dd/yyyy"
编辑:此外,如果完全没必要,可能只是注释/删除该行。
Edit2:以上不是问题所在。如果在运行宏并使用dd/mm/yyyy
格式的日期后,您可以对列进行文本操作,该怎么办?突出显示日期,转到数据 - >文字到列,选择"分隔"并保留为" Tab",但在下一个屏幕(3的第3步)中,选择"列数据格式" as"日期:MDY",然后点击"完成"。
答案 1 :(得分:0)
日期()我是意大利人并且总是和日期争吵..
如果您要转换的日期总是如P.01.10.2015
到10月1日
请尝试以下代码,否则请更改right(x,x)
,mid(x,x,x)
Sub find_replace()
Dim cell As Range
Dim yr As String, mnt As String, dy As String
Dim d As Date
For Each cell In ActiveSheet.Range("T1", Range("T1").End(xlToRight).Offset(0, -2))
yr = Right(cell, 4)
mnt = Mid(cell, 6, 2)
dy = Mid(cell, 3, 2)
d = DateSerial(yr, mnt, dy)
Range(cell.Address) = d
Next cell
End Sub
答案 2 :(得分:0)
以下是我之前评论的循环示例:
Sub ParseDates()
Dim vData
Dim rData As Range
Dim x As Long
Dim y As Long
Dim stemp As String
Set rData = ActiveSheet.Range("T1", Range("T1").End(xlToRight).Offset(0, -2))
vData = rData.Value2
For x = LBound(vData, 1) To UBound(vData, 1)
For y = LBound(vData, 2) To UBound(vData, 2)
stemp = Replace$(Replace$(vData(x, y), "P.", ""), ".", "/")
If IsDate(stemp) Then vData(x, y) = CDate(stemp)
Next y
Next x
rData.Value2 = vData
End Sub