質問

VBA の日付が DST かどうかを知る関数は何ですか?

役に立ちましたか?

解決

現在以外の日付の場合 (DST 2007 以降):

まず、月内の特定の平日の数を見つける関数が必要です。

Public Function NDow(Y As Integer, M As Integer, _
                N As Integer, DOW As Integer) As Date  

' Returns Date of Nth Day of the Week in Month  

NDow = DateSerial(Y, M, (8 - Weekday(DateSerial(Y, M, 1), _
              (DOW + 1) Mod 8)) + ((N - 1) * 7))  

End Function  

次に、DST 日と次の関数呼び出しを確認できます。

秋:NDow(年(新しい日付), 11, 1, 1)
春:NDow(年(新しい日付), 3, 2, 1)

現在の日付の場合:

Windows API関数GetTimeZoneInformationを呼び出すと、ステータスの列挙(整数)が返されます。

このコードは、Chip Pearson の優れた Excel サイトから入手しました。

ピアソンのサイト

他のヒント

ヨーロッパの夏時間 (中央ヨーロッパ時間) をどのように考慮するか疑問に思っている人のために、次のスクリプトを変更しました。 チップ・ピアソン. 。3 月の最終日曜日(午前 2 時から午前 3 時)と 10 月の最終日曜日(午前 3 時から午前 2 時)が時間の切り替わり日となります。

次のコードは、Excel のボタンのクリック イベントです。

Dim dates As String
dates = "A1:A20"

For Each c In Worksheets("Sheet1").Range(dates).Cells
    If (IsDateWithinDST(c.Value)) Then
        c.Value = DateAdd("h", 1, c.Value)
    End If
Next

必要なメソッドを含むモジュールが見つかります ここ.

ヨーロッパの DST について詳しくは、こちらをご覧ください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top