2013-10-23 187 views
0

尝试运行宏时发现了一个奇怪的问题。Excel无法识别日期

以我片我有从另一片复制像这样的日期的列:

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

所有细胞在此列是“日期”类型与“日/月/年“格式。

如果出现宏我想一个比较每个年份日期上,将工作,例如,如果我这样做:

Year(Range("D1").Value)=Year(Range("D2").Value)它返回一个真实的陈述

但是,如果我尝试比较日期本身不起作用。

例如,如果我尝试做:

Range("D1").Value <= Range("D2").Value它将返回虚假陈述。

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

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

而且如果我这样做了所有的值在我的专栏然后

Range("D1").Value <= Range("D2").Value会返回一个真实的陈述。

有人可以解释我为什么Excel这样做,我怎么能自动在我的专栏中有可利用的日期,因为我不会手动更改500行。

感谢

回答

0

这是一个与字符串类型数值类型隐式强制这样做。 (Excel的方式没有特定的日期类型,它使用它的数字类型来表示日期)。

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

然而.Value函数作用于Range不会这样做。

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

+0

感谢它的工作=) – Tom

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