以每月步骤循环遍历日期范围

Posted

技术标签:

【中文标题】以每月步骤循环遍历日期范围【英文标题】:Loop through date range with a monthly step 【发布时间】:2021-12-30 01:16:46 【问题描述】:

我在使用 VBA 时遇到问题,我正在尝试以每月步长循环进入日期范围,但我在“每月步长”部分苦苦挣扎。

其实我可以得到这个输出:

13/08/2021 
14/08/2021 
15/08/2021 
16/08/2021 
17/08/2021 
18/08/2021

而我想要得到的更像是:

08/2021 
09/2021 
10/2021 
11/2021 
12/2021 
01/2022 

这是我的代码:

aIndex = 1
    For Each Cell In Range("F2", Range("F2").End(xlDown))
            aIndex = aIndex + 1
            For J = Range("D" & aIndex) To Cell
                Debug.Print J
            Next J

    Next Cell

“F”和“D”列只包含格式为“DD/MM/YYYY”的日期,我在“D”和“F”日期之间循环。

提前致谢,

尼古拉斯。

【问题讨论】:

Debug.Print Format$(J, "mm/yyyy") 感谢braX,但我只想要“08/2021”的 1 个输出,而不是每天一个。这是实际输出:``` 07/2021 07/2021 08/2021 08/2021 08/2021 08/2021 08/2021 ``` 从最小日期的月份和年份到最大日期的月份和年份进行for next循环 【参考方案1】:

有很多方法可以做到这一点,但尽量保持与你所拥有的相似,删除不需要的东西,并改用字典:

Sub test()
  Dim sDate As String
  Dim dict As Object
  Dim Cell As Range

  Set dict = CreateObject("Scripting.Dictionary")

  For Each Cell In Range("F2", Range("F2").End(xlDown))
     sDate = Format$(Range("D" & Cell.Row), "mm/yyyy")
     If Not dict.Exists(sDate) Then
       dict.Add sDate, 1
       Debug.Print sDate
     End If
  Next

  Debug.Print "Total: " & dict.Count

End Sub

如果您的 Debug.Print 不是您所需要的,您可以在之后使用 Dictionary 进行一些操作。

【讨论】:

另外,您可能想了解Better way to find last used row

以上是关于以每月步骤循环遍历日期范围的主要内容,如果未能解决你的问题,请参考以下文章

如何循环遍历日期范围?

Oracle SQL 循环遍历日期范围

Windows 批处理文件 - 循环遍历日期范围数组,然后拆分每个项目

SQL Server 2008 中的 While 循环遍历日期范围,然后插入

在 SQL 中编写函数以遍历 UDF 中的日期范围

循环遍历索引和上一项