うるう年とは2月が29日まである年のことで、4年に一度訪れます。該当年がうるう年かどうかをVBAで判定する場合は、DateSereal関数を使います。
うるう年の判定
前提知識
Day関数およびYear関数、
If文を使用します。とりあえず一番下にあるコードをコピペすれば動きます。
判定方法
考え方としては、まず該当年の3/1を求め、
その前日が2月29日であれば、うるう年ということになります。
指定したセルの日付を取得し、その年の3月1日の前日を求めるマクロを書いてみます。
まずはアクティブセルの内容を変数yに代入し、データ型はDate(日付)にしておきます。
まずはアクティブセルの内容を変数yに代入し、データ型はDate(日付)にしておきます。
Day(DateSerial(Year(y), 3, 1) – 1)というのは、まず変数yの年をYear関数で求め、その年の3月1日から-1(前日)した日付=〇年2月〇日、の日付部分だけを求めています。
ややこしいですがこの例でいうと、アクティブセルの年=202x、3、1という数値をDateSereal関数で202x/3/1という日付にまずして、そこから-1した日付を取得して、その日付が何日かを判定しています。
ややこしいですがこの例でいうと、アクティブセルの年=202x、3、1という数値をDateSereal関数で202x/3/1という日付にまずして、そこから-1した日付を取得して、その日付が何日かを判定しています。
その日付が29であればうるう年で、そうでなければうるう年ではない、というメッセージを出すようにしたら完成です。
実行結果です。一応日付をメッセージに含めるためにデータ型をDateにしています(そうしないとシリアル値が表示される)。
メッセージに出さないのであれば、long型などでも問題なく動きます。
メッセージに出さないのであれば、long型などでも問題なく動きます。
うるう年の日付に対して実行した場合は、結果が変化します。
サンプルなのであまり実用性の高くないプログラムですが、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の形式で入力すれば、
自動で入力した年のその日付になります。年号も指定したい場合は、y...
コメント