列出两个日期之间的天数

3

我正在尝试编写一些代码,以便获取两个日期之间的每一天,并创建一个列表。我的代码如下:

Sub DateList()

    Dim start As Date
    start = DateValue("1/1/2001")

    Dim finish As Date
    finish = DateValue("1/1/2002")

    Dim datearray()
    ReDim datearray(finish - start + 1)

    For i = 0 To finish - start
        datearray(i) = start + i
    Next

    Range("A1:A" & UBound(datearray) + 1) = WorksheetFunction.Transpose(datearray)

End Sub

然而,结果看起来像这样:
   1/01/2001
   1/02/2001
   1/03/2001
   1/04/2001
   1/05/2001
   1/06/2001
   1/07/2001
   1/08/2001
   1/09/2001
   1/10/2001
   1/11/2001
   1/12/2001
13/01/2001
14/01/2001
15/01/2001
16/01/2001
17/01/2001
18/01/2001
19/01/2001
20/01/2001
21/01/2001
22/01/2001
23/01/2001
24/01/2001
25/01/2001
26/01/2001
27/01/2001
28/01/2001
29/01/2001
30/01/2001
31/01/2001
   2/01/2001
   2/02/2001
   2/03/2001
      ....

到第13行时就会出现问题。似乎在某个地方切换了dd/mm/yyyy格式和mm/dd/yyyy格式。我做错了什么?

2个回答

2
将此行添加为您的程序的最后一行:
    Range(A:A).NumberFormat = "d/mm/yyyy"

...或将范围设置为您喜欢的任何日期格式。


感谢@ExcelHero的回复,但它并没有解决问题。如果您查看第12行和第13行之间的差异,您会发现A12单元格是2001年12月1日(我想要的是2001年1月12日),然后A13是“13/1/2001”,根本无法识别为日期。 - Alex Wilding
你正在使用美国版的Excel,还是其他本地化版本,比如英国版? - Excel Hero

2
我怀疑你的计算机区域设置使用某种DMY作为默认日期设置。尽管Excel默认使用计算机的区域设置,但是VBA始终使用北美MDY。这是为了使代码可以在不同的区域区域使用而无需将每种编码日期例程转录到区域设置中。有一些方法可以解决VBA的EN-US中心方法(例如Range.FormulaLocal property),但是就所有意图和目的而言,如果您使用VBA编码,则需要使用MDY编码。
如果您将A列扩展足够宽,您会发现从2001年1月13日到2001年1月31日的值是左对齐的,而其他值是右对齐的。这是它们是文本值而不是实际日期(也称为数字)的第一个提示。
暂时忘记日期,将这些值视为从36,892开始到37,257的一系列长整数。
Sub DateList()
    Dim start As Long, finish As Long
    Dim datearray As Variant, i As Long

    start = CLng(DateValue("1/1/2001"))
    finish = CLng(DateValue("1/1/2002"))

    ReDim datearray(finish - start + 1)

    For i = 0 To finish - start
        datearray(i) = start + i
    Next

    Range("A1:A" & UBound(datearray) + 1) = WorksheetFunction.Transpose(datearray)
    Range("A1:A" & UBound(datearray) + 1).NumberFormat = "dd-mmm-yyyy"
End Sub

记住,日期的原始基础值(即Range.Value2属性)仅是自1899年12月31日以来的天数。在工作表上如何显示它可能会默认为用户的区域设置,但您可以按任何您认为合适的方式显示它们。

        DMY vs MDY

提示:在日期样式的数字格式中,有两种以星号开头的数字格式。在分布在具有各种区域设置的计算机之间的工作簿中,这些格式将更改为居住计算机正在运行的任何MDY或DYM格式。
有关DMY/MDY的VBA编码详见将字符串转换为日期VBA

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接