找到&替换vba更改日期格式

时间:2015-10-14 14:34:13

标签: excel vba excel-vba replace

我有一系列带日期的单元格,其中包含必须替换的值。一旦我使用一般的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

请非常友好地建议如何摆脱这个恼人的问题。感谢。

3 个答案:

答案 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