VBAでうるう年の判定を行う方法が2通り

ある年がうるう年かどうかを判定するには、VBAでは2通りの方法が考えられます。

1つはプログラミング言語とは関係なく、うるう年の考え方を実装する方法です。

もう1つはDateSerial関数を使う方法です。DateSerial関数についての詳細は「年月日の数値をDate型に変換する(DateSerial)」をご参照ください。

それぞれについてコードで説明します。

1. うるう年の考え方を実装する方法

一般的なうるう年かどうかの判定は以下の4つの判定を行います。先の判定でうるう年である・ない、が確定した場合は以降の判定は行いません。

  1. 年が400で割り切れる場合はうるう年とする。
  2. 100で割り切れる場合はうるう年ではなく通常年とする。
  3. 4で割り切れる場合はうるう年とする。
  4. それ以外はうるう年ではなく通常年とする。

 

2. DateSerial関数での判定方法

DateSerial関数を使う方法は、対象年の3月1日の1日前の2月末日が29日かどうかでうるう年か判定します。1日前はDay関数で取得します。

1日前を計算することになるため、先に紹介したコードよりも内部では無駄な処理が行われていることになります。

Day関数についての詳細は「VBAで年、月、日を取得する(Year、Month、Day)」をご参照ください。
DateSerial関数についての詳細は「年月日の数値をDate型に変換する(DateSerial)」をご参照ください。

どれぐらい遅くなるのか処理速度を確認したところ、2000回ループしてうるう年判定関数を実行した場合、上のコードは約0.6秒、このコードは約2.4秒ほど掛かっており、1.8秒ほど上のコードよりも遅いです。ただ、1回の処理あたりでは0.0009秒遅い、というぐらいのものです。

DateSerialの3番目の引数が0の場合は前月末日を意味するため以下のように書いても同じ意味になります。

 

利用方法

上に2つの関数を紹介しましたが、どちらも使い方は同じです。

ループで1000から3000年までの2000年間についてうるう年かどうかの判定を行うサンプルです。