根据每月的第一天计算出第一个星期六

时间:2014-12-29 20:41:07

标签: vba excel-vba excel

基本上,我希望能够根据每月的第一天找到该月的第一个星期六。而且我得到有关此事的相互矛盾的信息。

我可以让最终用户选择本月的第一个星期六,但我宁愿不留下令人印象深刻的壮举。

例如,即将到来的1月份将在周四开始。我想要的是点击一个显示JAN的按钮然后VBA会查看2015日历年,并说第一个星期六是第三个星期六。

如果可能的话。我的报告按周SAT-SUN和SUMIFS过滤"> ="&(SUN DATE)和"< ="&(SAT DATE)。

所以我点击JAN,将日期设置为010115,Excel / VBA确实有点魔力,确定第一个SAT是第3个,SUM语句添加几天来设置每个报告周的日期范围。 / p>

如果答案是否定的,那很好,我只能坚持我的另一个想法。

2 个答案:

答案 0 :(得分:1)

尝试使用以下功能在月中的第一个星期六返回:

Function GetFirstSatInMonth(ByVal initialDate As Date) As Date
Dim myDate As Date

myDate = DateSerial(Year(initialDate), Month(initialDate), 1)

Do While Weekday(myDate) <> vbSaturday
    myDate = DateAdd("d", 1, myDate)
Loop

GetFirstSatInMonth = myDate

End Function

用法:

Sub Test()

MsgBox (GetFirstSatInMonth(Date))

End Sub

答案 1 :(得分:0)

我是使用InputBoxMsgBox完成的,但您应该从代码中获取想法。

Sub TestIt()
    Dim MonthPick As Integer, YearPick As Integer, FirstSat as Date

    MonthPick = InputBox("What Month (as integer number)")
    YearPick = InputBox("What Year (as 4 digit integer number)")

    For x = 1 To 7
        If Weekday(DateSerial(YearPick, MonthPick, x)) = 7 Then '7 for Saturday by default
            FirstSat = DateSerial(YearPick, MonthPick, x)
            MsgBox FirstSat & " is the first Saturday"
            Exit For
        End If
    Next x
End Sub

您可以使用变量FirstSat为“报告周”创建更多代码。