gpt4 book ai didi

vba - 列出两个日期之间的天数

转载 作者:行者123 更新时间:2023-12-02 16:50:59 26 4
gpt4 key购买 nike

我正在尝试编写一些需要两个日期的代码,并创建这两个日期之间每一天的列表。我的代码是这样的:

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 格式之间存在切换。我做错了什么?

最佳答案

我怀疑您计算机的区域系统使用某种形式的 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 property )只是自 1899 年 12 月 31 日以来的天数。在工作表上的显示方式可能默认为用户的区域设置,但您可以以任何您认为合适的方式显示它们。

         DMY vs MDY

提示:在日期样式数字格式中,有两种以星号开头的数字格式。在分布在具有不同区域设置的计算机之间的工作簿中,这些设置将更改为常驻计算机在其下运行的 MDY 或 DYM。

有关 DMY/MDY 的 VBA 编码的更多信息,请访问 Convert String to Date VBA .

关于vba - 列出两个日期之间的天数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32262682/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com