【问题标题】:Replace "H" with ":" of a date and hour without changing the format of date vba将日期和小时的“H”替换为“:”而不更改日期vba的格式
【发布时间】:2018-10-19 12:10:38
【问题描述】:

我有各种日期(类型字符串),格式为 dd/mm/yyyy hhHmm : dd/mm/yyyy hhHmm 我需要将它们转换为实际类型的日期,格式为 dd/mm/yyyy hh:mm : dd/mm/yyyy hh:mm

我的问题是,当我手动执行替换命令时,一切正常,但如果我在宏中执行替换命令,它突然从 dd/mm/yy hhHmm 变为 mm/dd/yyyy hh:mm,这意味着我的数据全错了。

我用 for 循环split 函数 解决了这个问题,我会把解决方案放在这里,所以也许有同样问题的其他人可以得到它作为感谢每次我在这里得到帮助时,你都感谢:

lastRowRan = Cells(Rows.Count, "B").End(xlUp).Row 
For Each cell In Range("I2:I" & lastRowRan)
        dateArray = Split(cell)
        dateArray(1) = Replace(dateArray(1), "H", ":")
        cell.Value = CDate(Format(CDate(dateArray(0) & " " & dateArray(1)), "dd/mm/yyyy hh:mm")) 
Next

但显然,由于这些日期有数千个,有时可能需要一点时间。所以我一直在想,有没有更快的方法?

.NumberFormat 似乎不起作用。

【问题讨论】:

  • 我想我不明白。当我将日期作为字符串获取时,将“H”替换为“:”格式不会改变。见:imgur.com/j3cdguK
  • 看看DateValue。您可以根据需要格式化日期

标签: excel vba datetime replace format


【解决方案1】:

使用DateSerial(Year, Month, Day)TimeSerial(Hour, Minute, Second) 建立一个真实的约会:

Dim lastRowRan As Long
lastRowRan = Cells(Rows.Count, "B").End(xlUp).Row

Dim Cell As Range
For Each Cell In Range("I2:I" & lastRowRan)
    If Not IsDate(Cell.Value) Then
        Cell.Value = DateSerial(Mid$(Cell.Value, 7, 4), Mid$(Cell.Value, 4, 2), Left$(Cell.Value, 2)) + TimeSerial(Mid$(Cell.Value, 12, 2), Right$(Cell.Value, 2), 0)
        Cell.NumberFormat = "dd/mm/yyyy hh:mm"
    End If
Next Cell

【讨论】:

    【解决方案2】:

    试试:

    Sub Test()
    
        Dim LastRow As Long
        Dim i As Long
        Dim ClearDate As Date
    
        LastRow = Sheet1.Range("A" & Rows.Count).End(xlUp).Row '<= Change to cover your range
    
        For i = 1 To LastRow '<= Set the right start & end point
            With Sheet1 '<=Cahnge to fit your sheet
                ClearDate = CDate(Replace(Range("A" & i), "H", ":"))
                .Range("A" & i).Offset(0, 1).Value = ClearDate
            End With
        Next i
    
    End Sub
    

    结果:

    【讨论】:

    • 您好,抱歉拖了这么久。你的代码在这一行给了我一个错误“不兼容的类型” ClearDate = CDate(Replace(Range("A" & i), "H", ":"))
    • 你好!很高兴听到你的反馈。我再次运行代码,我没有收到错误。你能看看我的答案所附的图片吗?这就是我得到的。
    • 这是我犯的一个愚蠢的错误。这也很好用!我只需要更改列。我的专栏是 I 和 J 而不是 A!对此感到抱歉。
    • @Luis Gustavo 如果答案能解决您的问题,请投票帮助他人!
    猜你喜欢
    • 1970-01-01
    • 2020-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-04
    • 2019-12-11
    • 2012-01-03
    • 2016-09-03
    相关资源
    最近更新 更多