2014-12-29 126 views
1

基本上,我希望能夠做的是根據月份的第一天找到本月的第一個星期六。關於這一點,我得到了矛盾的信息。根據月份的第一天計算出第一個日曆星期六

我可以讓最終用戶選擇本月的第一個星期六,但我寧願不留下那令人印象深刻的壯舉。

例如,今年1月即將於週四開始。我想要的是點擊一個按鈕,說JAN,然後VBA會查看2015日曆年,並說第一個星期六是第三個。

如果這甚至是可能的。我的報告是SAT-SUN,SUMIFS按周過濾「> =」&(SUN DATE)和「< =」&(SAT DATE)。

所以我點擊JAN,它將日期設置爲010115,Excel/VBA確實有點神奇,確定第一個SAT是第三個,SUM語句會添加幾天來爲每個報告周設置日期範圍。

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

+1

WorksheetFunction.Weekday( 「2015年1月1日」,1)返回5是週四(如預期)。從所討論的蛾的第一天開始,循環通過日期(以任何格式,即使如我所示),直到你得到7(星期六)。我希望這是你正在尋找的。 –

回答

0

嘗試下面函數返回月份的第一個星期六:

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

非常歡迎;) –

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創建「報告周」進一步代碼。

相關問題