【问题标题】:VBA Cdate to interpret DD-MM-YYYYVBA Cdate 解释 DD-MM-YYYY
【发布时间】:2018-11-02 12:41:05
【问题描述】:

我有一列以 DD-MM-YYYY 格式存储的日期。我正在使用 VBA 的 cdate 函数循环它们以将它们转换为值 - 但是,当月份的日期为 12 或更小时,Cdate 将日期解释为 MM-DD-YYYY。解决这个问题最方便的方法是什么?

【问题讨论】:

  • 如果您的区域设置不使用 dd-mm-yyyy 格式(看起来就是这种情况),并且如果日期实际存储为文本,则您必须自己解析日期字符串.
  • 如果日期在 excel 中实际上被格式化为日期,那么就没有理由将它们传递给 CDATE() 进行转换。只需将您的日期变量设置为单元格值。如果它们存储为文本,则必须使用 Mid() 解析字符串以重新排列并将结果传递给 Cdate()。
  • 它们不是,它们被格式化为文本(从 HTML 中提取的字符串,然后删除标签)
  • / 上拆分它们并将它们提供给Dateserial 函数。或者,使用 Data/Text-to-columns 向导并将列格式定义为 DMY(或 Power Query 中的等效项

标签: excel vba


【解决方案1】:

我会使用DateSerial 函数。试试这个:

Sub ConvertDate()
Dim datecell As Variant, i As Long

With Workbooks("book1").Sheets(1)
    For i = 1 To .Cells(Rows.Count, 1).End(xlUp).Row
        datecell = Split(.Range("A" & i), "/")
        .Range("B" & i) = DateSerial(datecell(2), datecell(1), datecell(0))
    Next i
End With

End Sub

这假设您的工作簿名为“Book1”并且日期值在 A 列中。结果将写入 B 列。

【讨论】:

    猜你喜欢
    • 2014-04-30
    • 1970-01-01
    • 2020-02-24
    • 2016-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    相关资源
    最近更新 更多