我在尝试运行宏时发现了一个奇怪的问题。
在我的工作表中,我有一个我从另一个工作表中复制的列,其中的日期如下:
| 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行。
由于
答案 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
函数,该函数将文本转换为日期(尽管以特定于语言环境的方式)并对其进行比较。