ExcelVBA(マクロ)でうるう年かどうか判定する方法/DateSerial関数の使い方

IT

うるう年とは2月が29日まである年のことで、4年に一度訪れます。該当年がうるう年かどうかをVBAで判定する場合は、DateSereal関数を使います。

Advertisements

うるう年の判定

前提知識

判定方法

leapyear1
考え方としては、まず該当年の3/1を求め、
leapyear2
その前日が2月29日であれば、うるう年ということになります。
leapyear3
指定したセルの日付を取得し、その年の3月1日の前日を求めるマクロを書いてみます。
まずはアクティブセルの内容を変数yに代入し、データ型はDate(日付)にしておきます。
leapyear4
Day(DateSerial(Year(y), 3, 1) – 1)というのは、まず変数yの年をYear関数で求め、その年の3月1日から-1(前日)した日付=〇年2月〇日、の日付部分だけを求めています。
ややこしいですがこの例でいうと、アクティブセルの年=202x、3、1という数値をDateSereal関数で202x/3/1という日付にまずして、そこから-1した日付を取得して、その日付が何日かを判定しています。
leapyear5
その日付が29であればうるう年で、そうでなければうるう年ではない、というメッセージを出すようにしたら完成です。
leapyear6
実行結果です。一応日付をメッセージに含めるためにデータ型をDateにしています(そうしないとシリアル値が表示される)。
メッセージに出さないのであれば、long型などでも問題なく動きます。
leapyear7
うるう年の日付に対して実行した場合は、結果が変化します。

サンプルなのであまり実用性の高くないプログラムですが、y = どうたらこうたら及び実行結果の部分を変更すれば、色々と切り回しが効くはずです。

' vba
Dim y As Date
' アクティブセルの日付を取得
y = ActiveCell.Value
' yの年の3/1の前日が29日かどうか判定
If Day(DateSerial(Year(y), 3, 1) - 1) = 29 Then
MsgBox y & "はうるう年です"
Else
MsgBox y & "はうるう年ではありません"
End If
Excel(エクセル):日付、時間、曜日、シリアル値
Excelの時間関連操作、設定、関数などまとめです。 セルの表示設定 基本 日付をセルに入力したい場合、m/dあるいはm-dの形式で入力すれば、 自動で入力した年のその日付になります。年号も指定したい場合は、yyyy...

コメント