今週のお題「うるう年」
4年に1回、回ってくる、閏年。
「4年に1度」ってのが、一般の人の常識かな。
でも、実は例外がありまして。
「100で割れる年は、閏年ではない」のです。
次に来る「2100年」は、閏年ではないんです。
ただし、もう一つ例外。
「400で割れる場合は、閏年」
なので、「2000年2月29日」は、存在します。
火曜日、ですね。
ちなみに、Excelに日付を打ち込めば、曜日は簡単にわかります。
「セルの書式設定」で、ユーザー定義を選び、「aaa」と入れると、曜日表示になります。
関数なんて、要らないです。
ところで、ExcelVBAで、こんなことも出来ます。
セルA2に年を入れることにして…
Sub Uruu1()
Dim myYear as long
myYear = Range("A2").value
If myYear MOD 4 <> 0 Or (myYear MOD 100 = 0 And myYear MOD 400 <>0) Then
Range("B2").Value = "平年"
Else
End If
End Sub
セルB2に、「平年」「閏年」の、どちらかが表示されます♪
ここで、「MOD」は、余りを求める演算です。
MOD 4なら、4で割って、余りを出します。
つまり、「4で割って余りが出る場合か、または100では割れても400では割れない場合」、「平年」と表示するわけですね。
こんな方法もあります。
Sub Uruu2()
Dim myYear as long
myYear = Range("A2").value
If Day(DateSerial(myYear, 3, 1) -1 )=28 Then
Range("B2").Value = "平年"
Else
End If
End Sub
要は、「その年の3月1日の前日を求める」方法です。
DateSerial関数は、年月日を整数で指定すると、Excelが日付を処理する「シリアル値」に変換してくれます。
この「シリアル値」って、実は整数(時刻は小数)なので、それから1を引けば、前日になります。
それをDay関数にかければ、シリアル値から、前日の日付部分のみが取り出せ、28なら平年、29なら閏年、ってわけです♪
ただ、一つ、気をつけなければいけないことが、ありまして。
Excelにバグがあって、1900年2月29日が、存在してしまうんです。
まぁ、そんな前の日付、滅多には使わないでしょうが、歴史とかを扱う場合は、問題になる場合も、あるようです。
実は、前述のシリアル値は、基本的に1900年1月1日が1になっていて、1日ごとに1ずつ、足されていきます。
ところが、かつてのライバル(Lotus1-2-3!?)に、このバグがあったそうで。
互換性を取るために、このバグごと、取り込まなければいけなったそうです。
いろんな、大人の事情が、あったんですね。