在Excel 2010中将文本转换为日期

时间:2016-04-13 08:59:33

标签: excel vba excel-vba types

我想使用VBA代码将我的数据(日期)从文本转换为日期。

For Each c In Range("B4:B" & Range("B" & Rows.Count).End(xlUp).Row)
    c.Value = DateValue(c.Value)
Next c

此代码不适用于其间的空白单元格。显示运行时错误(数据类型错误)。 这段代码:

 For Each c In Range("B4:B" & Range("B" & Rows.Count).End(xlUp).Row)
    c.Value = CDate(c.Value)
 Next c

显示空值的12.00.00 AM。

在粘贴新数据时,将所有文本转换为给定范围内的日期的基本思路。

请提出建议。感谢

3 个答案:

答案 0 :(得分:1)

您也可以尝试这样做:Isdate函数检查值是否为date。

For Each c In Range("B4:B" & Range("B" & Rows.Count).End(xlUp).Row)
      if Isdate(c.value) then
        c.Value = CDate(c.Value)
      Else End if
Next c

答案 1 :(得分:1)

这是一个双行代码(这不需要循环)

Sub Sample()
    [A1:A20].NumberFormat = "DD/MM/YYYY"
    [A1:A20] = [index(IF(A1:A20="","",DATEVALUE(A1:A20)),)]
End Sub

enter image description here

我假设范围来自A1:A20请根据需要进行更改。

如果您想了解此代码的作用,请参阅我给出的解释Here

这是INDEX=IF(A1="","",DATEVALUE(A1))

的组合

答案 2 :(得分:0)

根据我的收集情况,您有一系列包含您希望转换为日期的数据的单元格,但该范围内的某些单元格是空白的?你想用空白单元做什么?

如果你想忽略它们,只需添加一个IF语句来满足它们

For Each c In Range("B4:B" & Range("B" & Rows.Count).End(xlUp).Row)
    If c.Value <> "" Then
        c.Value = DateValue(c.Value)
    End If
Next c