簡體   English   中英

VBScript 或 VBA 中的 ISO 周數

[英]ISO week number in VBScript or VBA

如何獲取 VBScript 或 VBA 中某個日期的ISO 周數

首先,請注意:

  1. 報告周年和周數很重要,因為日期的年份可能不同。
  2. 幾個 Windows 組件上周一包含一個錯誤

根據我的經驗,最簡單、最清晰、最可靠的計算方法是:

Sub WeekNum(someDate, isoWeekYear, isoWeekNumber, isoWeekDay)
  Dim nearestThursday
  isoWeekDay = WeekDay(someDate, vbMonday)
  nearestThursday = DateAdd("d", 4 - Int(isoWeekDay), someDate)
  isoWeekYear = Year(nearestThursday)
  isoWeekNumber = Int((nearestThursday - DateSerial(isoWeekYear, 1, 1)) / 7) + 1
End Sub

這也返回一周中的 ISO 日期,星期一從 1 開始計數。

在 A1 單元格中輸入任何日期,然后運行以下代碼...

Range("A2").FormulaR1C1 = "=INT((R1C-DATE(YEAR(R1C-WEEKDAY(R1C-1)+4),1,3)+WEEKDAY(DATE(YEAR(R1C-WEEKDAY(R1C-1)+4),1,3))+5)/7)"

可以通過 DatePart() VBA function 獲取:

    Sub IsoWeek()
    Dim isoWeekNum As Byte
    Dim myDate As Date
        myDate = DateValue("01-01-2022")
        isoWeekNum = DatePart("ww", myDate, vbMonday, vbFirstFourDays)
        If isoWeekNum > 52 Then ' Bug check (to avoid the bug with Mondays)
            If Format(myDate + 7, "ww", vbMonday, vbFirstFourDays) = 2 Then isoWeekNum = 1
        End If
        Debug.Print isoWeekNum
    End Sub

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM