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 |
必須。 追加する時間間隔の単位を表す文字列式を指定します。 以下が指定可能です。
|
||||||||||||||||||||||
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でうるう年を判定するプログラムでした。