【问题标题】:Figure out the first Calendar Saturday based on the first day of the month根据每月的第一天找出第一个日历星期六
【发布时间】:2017-10-27 09:50:47
【问题描述】:

基本上我想做的是根据每月的第一天找到每月的第一个星期六。我得到了与此相关的相互矛盾的信息。

我可以让最终用户选择每月的第一个星期六,但我不想让他们自行决定这一令人印象深刻的壮举。

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

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

所以我点击 JAN,将日期设置为 010115,Excel/VBA 做了一个小魔术,确定第一个 SAT 是第三个,SUM 语句添加几天来设置每个报告周的日期范围。

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

【问题讨论】:

  • WorksheetFunction.Weekday("Jan 1, 2015",1) 返回 5,即星期四(如预期的那样)。从有问题的飞蛾的第一天开始循环日期(以任何格式,即使我已经展示过),直到你得到 7(星期六)。我希望这就是你要找的。​​span>

标签: vba excel


【解决方案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

【讨论】:

  • 谢谢,这很好用,其他答案也一样。
【解决方案2】:

我是用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 为“报告周”创建更多代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-11
    • 2021-05-25
    • 1970-01-01
    • 1970-01-01
    • 2017-11-17
    • 1970-01-01
    • 2019-03-09
    相关资源
    最近更新 更多