Excel无法识别日期

时间:2013-10-23 10:56:54

标签: excel vba

我在尝试运行宏时发现了一个奇怪的问题。

在我的工作表中,我有一个我从另一个工作表中复制的列,其中的日期如下:

|     D      | 
|15/01/2013  |
|20/01/2013  |
|01/02/2013  |

此列中的所有单元格均为“日期”类型,格式为“dd / mm / yyyy”。

如果使用宏我想比较每个日期的年份,它会起作用,例如,如果我这样做:

Year(Range("D1").Value)=Year(Range("D2").Value)它返回一个True语句

但如果我试图比较日期本身就不会有效。

例如,如果我尝试:

Range("D1").Value <= Range("D2").Value它将返回一个错误的声明。

但是我发现了一些奇怪的东西,如果我手动进入D2的公式栏,例如,我点击它,然后按Enter键,现在我的列看起来像这样。

|     D      | 
|15/01/2013  |
|  20/01/2013|
|01/02/2013  |

如果我对列中的所有值执行此操作,那么

Range("D1").Value <= Range("D2").Value将返回True语句。

有人可以解释一下,为什么Excel会这样做以及如何在我的列中自动获得可利用日期,因为我不会手动更改500行。

由于

2 个答案:

答案 0 :(得分:1)

您不必手动更改500行。您可以使用“文本到列”功能来纠正问题。

Range("D1:D500").TextToColumns Destination:=Range("D1"), DataType:=xlDelimited, _
    TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
    Semicolon:=False, Comma:=False, Space:=False, Other:=False, _ 
    FieldInfo:=Array(1, 4), TrailingMinusNumbers:=True

答案 1 :(得分:0)

这与字符串类型到数字类型的隐式强制有关。 (顺便说一句,Excel没有特定的日期类型;它使用其数字类型来表示日期)。

Year函数将隐式地将提供的参数转换为数字类型;所以删除任何无关的空格。

.Value作用于Range的功能不会这样做。

考虑在相邻列中使用DATEVALUE函数,该函数将文本转换为日期(尽管以特定于语言环境的方式)并对其进行比较。