VBScript うるう年の判定

VBScriptでうるう年を判定する方法を説明します。

C#など、いくつかの言語では、うるう年を判定するための関数が用意されていますが

VBScriptにはないので作成します。

うるう年の判定条件

現在私たちが使っている暦は「グレゴリオ暦」です。

グレゴリオ暦法では、うるう年を次のように決めています。

①西暦が4で割り切れる年はうるう年

②ただし、4で割り切れても100で割り切れる年はうるう年ではない

③ただし、100で割り切れても400で割り切れる年はうるう年

①~③の条件を1文で書くと、以下のようになります。

(西暦が4で割り切れ、かつ100で割り切れない年)または(西暦が400で割り切れる年)

 

プログラム例1

うるう年かどうか判定するプログラムの例です。

Dim input,ret

input = InputBox(“西暦(yyyy)を入力してください”)

ret = ((input Mod 4 = 0) And (input Mod 100 <> 0)) Or (input Mod 400 = 0)

If ret Then
MsgBox input & “年は、うるう年です”
Else
MsgBox input & “年は、うるう年ではありません”
End If

2行目でInputBoxを使用しています。

InputBoxはテキスト入力フィールドを備えたダイアログが表示されます。

引数には入力を促すメッセージを指定します。今回は「西暦(yyyy)を入力してください」と指定しています。

ユーザーが文字を入力して「OK」ボタンをクリックすると、テキスト入力フィールドに入力した文字列が戻り値となります。

その戻り値をinputという変数に代入しています。

3行目で、Modを使用しています。

Mod とは、割り算での余りの数を計算するための演算子と呼ばれる( + や – といった記号と同類の)ものです。

「input Mod 4 = 0」とは、InputBoxに入力した西暦を4で割ると0,つまり4で割り切れる、ということになります。

「input Mod 100 <> 0」とは、InputBoxに入力した西暦を100で割ると0以外,つまり100で割り切れない、ということになります。

この2つの条件がAND条件になっています。

次に、「input Mod 400 = 0」とは、InputBoxに入力した西暦を400で割ると0,つまり400で割り切れる、ということになります。

これが先ほどの条件と、OR条件になっています。

 

実行します。

「テキスト入力フィールド」に“2000”と入力し、「OK」ボタンをクリックします。

結果「2000年はうるう年です」と表示されます。

再度実行します。

「テキスト入力フィールド」に“2021”と入力し、「OK」ボタンをクリックします。

結果「2021年はうるう年ではありません」と表示されます。

 

DateAdd関数

DateAdd関数を使用して、うるう年かどうかを判定します。

DataAdd関数は、指定された時間間隔を加算した日付を返します。

うるう年の場合、2月は29日まであります。そのため、3月1日の1日前が29日か28日かでうるう年かどうかを判断することができます。

DataAdd関数の書式です。

DateAdd(strInterval, lngNum, varDate)

引数は以下が指定できます。

引数 説明
strInterval

必須。

追加する時間間隔の単位を表す文字列式を指定します。

以下が指定可能です。

設定値 説明
yyyy
q 四半期
m
y  
d
w 週数
ww 週の開始曜日
h 時間
m
s

 

lngNum

必須。

追加する時間間隔の数を表す数式を指定します。

将来の日時を取得するには正の数を指定します。

過去の日時を取得するには負の数を指定します。

varDate

必須。

時間間隔を追加する日付を表すバリアント型 (Variant) の値またはリテラル文字列を指定します。

 

プログラム例2

うるう年かどうかDateAdd関数を使って判定するプログラムの例です。

Dim input,ret

input = InputBox(“西暦(yyyy)を入力してください”)
ret = DateAdd(“d”,-1,input & “/03/01”)

If Right(ret,2) = “29” Then
MsgBox input & “年は、うるう年です”
Else
MsgBox input & “年は、うるう年ではありません”
End If

3行目で、DateAdd関数を使用しています。

2行目で入力された西暦の3月1日の1ち日前を求めて、retという変数に代入しています。

4行目以降で、retの日(右から2桁文字)が29日であればうるう年、そうでなければうるう年でない、と判断しています。

 

実行します。

「テキスト入力フィールド」に“2000”と入力し、「OK」ボタンをクリックします。

結果「2000年はうるう年です」と表示されます。

再度実行します。

「テキスト入力フィールド」に“2021”と入力し、「OK」ボタンをクリックします。

結果「2021年はうるう年ではありません」と表示されます。

まとめ

うるう年の計算は以下の2つの方法を説明しました。

・うるう年の3つの条件から式を作成し判断する方法

・DateAdd関数を使用して、3月1日の一日前の日にちが29日がどうか判断する方法

 

以上、VBScriptでうるう年を判定するプログラムでした。