- Home »
- エクセル Q&A(Tips):目次 »
- うるう年を判定したい
いろいろな判定方法 topへ
- うるう年の定義
- 西暦年号が4で割り切れる年をうるう年とする。
- ただし、例外として、西暦年号が100で割り切れて400で割り切れない年は平年とする。
- うるう年の判定方法する数式の例
- Microsoftのサポート情報では以下のような数式が書かれています。
- =IF(OR(MOD(A1,400)=0,AND(MOD(A1,4)=0,MOD(A1,100)<>0)),"うるう年","うるう年ではない")
- 判定結果:OKのようです
- 2月29日があれば「うるう年」、なければ「平年」である・・・と考えたケース
- =IF(DAY(DATE(A2,2,29))=29,"うるう年","うるう年ではない")
DATE関数では、2/29がないときは次の3/1を返すようになっているのを利用しています。
- 判定結果:1900年の判定が不正です。
- (B)と同様の考え方で、3月1日の前の日が「29」であれば「うるう年」、なければ「平年」である・・・と考えたケース
- =IF(TEXT(DATE(A2,3,1)-1,"d")="29","うるう年","うるう年ではない")
ここでは、TEXT関数で日付を取り出していますので、比較対象も文字列"29"としてあります。
- 判定結果:1900年の判定が不正です。
- 月の最後の日を求める関数があったよね・・・ということで、2月の最終日が29であれば「うるう年」、なければ「平年」である・・・と考えたケース
- =IF(DAY(EOMONTH(DATE(A2,2,1),0))=29,"うるう年","うるう年ではない")
- 判定結果:OKのようです
- B,Cは1900年さえ関係しなければ使用上の問題はないのですが、ちょっと気持ちが落ち着かないところがあります。
よって、以下の数式のように1900年を例外処理すればよさそうです。
- =IF(A2=1900,"うるう年ではない",IF(DAY(DATE(A2,2,29))=29,"うるう年","うるう年ではない"))
- B,Cの判定がうまくいかないのは、Excelが使用しているカレンダー?には1900年2月29日が存在しているからです。
ところが、月末の末日を求めるEOMONTH関数では =EOMONTH(DATE(1900,2,1),0) で1900/2/28が返されます。
このことがちょっと気になったので、このページを作ってみました。
よねさんのExcelとWordの使い方|エクセル2010基本講座:目次|うるう年を判定したい