0

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

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

|     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它将返回一个 False 语句。

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

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

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

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

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

谢谢

4

2 回答 2

1

您不必手动更改 500 行。您可以使用 Text to Columns 功能来纠正问题。

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
于 2015-03-29T13:31:24.563 回答
0

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

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

.Value但是,作用于 的函数不会Range那样做。

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

于 2013-10-23T11:02:12.887 回答