エクセルでうるう年かどうかif関数を使って判定する
A1セルに西暦年が入っているとしたとき、次の計算式でうるう年を判定することができます。
「date(A1,3,0)」という関数で、指定した年の3月1日の「1日前」の日付を計算することができます。
その結果、
- うるう年のときには指定した年の2月29日
- うるう年でないときには指定した年の2月28日
が得られます。
その後、day関数を使って「日にち」部分だけを抜き出して、それが「29」かを調べることで、うるう年かどうかの判定をすることができます。
もし、A1セルに日付形式(例えば「2016/2/1」)で入っている場合には、さらにyear関数を使って、次の計算式でうるう年を判定できます。
ところで、そもそもの話として、本当に「うるう年」かどうかを判定する必要があるのでしょうか?
この記事の目次
そもそも、うるう年かどうかを判定する必要があるのか?
うるう年を判定したい理由は、いろいろ考えられますが、次のようにうるう年かどうかを判定しなくても目的を達成できることも多いのです。
月末の日付を表示させたい
月末の日付を表示させたいという場合。
2月以外は月末の日付が決まっていますが、2月だけはうるう年かどうかにより月末の日付が変わってしまうので、大変なイメージがあるかもしれません。
例えば、B1セルに年、B2セルに月が入っている場合、次のような計算式で月末の日付を計算できます。
date関数で最後の引数(=日付)を「0」にすると「ついたちの1日前」という意味になります。
「翌月の月初の一日前」=「当月の月末」ということで、月末の日付が得られるのです。
日報で月末までの日付を自動で表示させたい
日報を作成するために、1日~月末までの日付を表示させたいという場合。
2月についてはうるう年かどうかで月末が28日か29日かが変わってしまいます。
でも、この場合、うるう年かどうかの判定をする必要はありません。
例えば、次のような感じで、月初の月と比較して、月が変わってしまった場合には日付を表示しないというような設定をしておけば、どの月にも使うことができます。
ポイントとなる計算式は、次のものです。
A1セルに入っている日付の「月」と違っている場合(=翌月になった場合)には表示させないという意味です。
よくよく考えると、月末の日付は、月によっても変わりますので、うるう年だけ特別扱いする意味がないのです。
2月の日数を計算したい
2月はうるう年によって営業日数が変わってしまうので、前期比較をする際にうるう年かどうかを考慮して比較を行いたいという場合があります。
でも、各月の日数の計算もうるう年かどうかで場合分けをする必要はありません。
例えば、B1セルに年、B2セルに月が入っている場合、次のような計算式で計算ができます。
date関数を使って翌月初・当月初の日付を作り、その引き算をすることで、当月の日数が出てきます。
うるう年かどうかにかかわらず、各月の日数を自動計算してくれますので、うるう年かどうかを意識する必要がありません。
あるいは、月を横に並べて、各月の日数を計算したいという場合には、次のような表を作ってもOKです。
1年の日数を計算したい
例えば、B1セルに年が入っている場合、次のような計算式で計算ができます。
これも、先ほどの例と全く一緒です。
date関数を使って翌年初、当年初の日付を作り、その引き算をすることで1年の日数を計算できます。