Excel vba循环通过01.Month和01.01。给出最小和最大天数

时间:2017-11-09 16:15:32

标签: excel vba excel-vba

所以我将最小和最大日期存储为Date个对象。我尝试在for循环中迭代它们。

Sub dateTest()
    Dim min_date As Date
    Dim max_date As Date

    min_date = ThisWorkbook.Worksheets("setup").Cells(22, 5).value
    max_date = ThisWorkbook.Worksheets("setup").Cells(23, 5).value

    Dim currentDate As Date
    For currentDate = min_date To max_date
        MsgBox (currentDate)
    Next
End Sub

然而,循环显示每个月的每一天,而我只需要每个月的第一天和(在另一个循环中)仅在1月1日。我该如何做到这一点?

我试过

For currentDate = min_date To max_date Step 7
            MsgBox (currentDate)
Next

但它只允许将一天作为一个步骤,因此此代码显示每周一天,而不是每月一天或每年一天。

3 个答案:

答案 0 :(得分:2)

此代码将从包含min_date的月份的第一天到包含max_date的月份的第一天干净循环:

extends Shape

答案 1 :(得分:1)

如果您想要一个消息框显示每个月的第一天,您可以检查日期是否为1(每个月的第一天)。

For currentdate = min_date To max_date
    If Day(my_date) = 1 Then
        MsgBox (my_date)
    Else
        'Do Nothing
    End If
Next

这将返回每月第一天的消息框。

要显示1月1日,请检查月份。

For currentdate = min_date To max_date
    If Month(currentdate) = 1 Then
        If Day(currentdate) = 1 Then
            MsgBox (currentdate)
        End If
    Else
        'Do Nothing
    End If
Next

答案 2 :(得分:1)

DateAdd功能应该有所帮助:

假设您的最短日期始终是该月的第一天:

currentDate = GetNextFirstDayOfMonth(min_date)

如果您的最短日期不在该月的第一天,请更换行" currentDate = min_date"与

Function GetNextFirstDayOfMonth(d)
    If Day(d) > 1 Then
       GetNextFirstDayOfMonth = DateSerial(Year(d), Month(d), 1)
    Else
       GetNextFirstDayOfMonth = DateSerial(Year(d), Month(d) - 1, 1)
    End If
End Function

并添加以下功能:

:after