社長の手書きメモで紹介する
年により異なる節分の日付と、閏年の計算?
西暦年を入れると、10年でも100年でも計算し表記するには・・
さまざまな計算方法があると思いますが・・・素直に文を読んで、その通り作ってみる。
最初はあまり工夫しすぎると、あとでわからなくなる・・
説明文は以下のとおりで・・・
説明分 |
年を4で割った余りで2日~4になる年別の割り当て |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
一般には毎年2月3日であるが常にそうではなく、1984年までは4年に1度の閏年に2月4日だった。1985年から2020年までは2月3日だったが、2021年からは閏年の翌年に2月2日になる。グレゴリオ暦での最初の節分となった1873年から22世紀初頭までの具体的な日付は表のようになる(重複している年はどちらの欄を使っても正しい日付が出る)。数十年のスケールで徐々に前倒しになってくるが、4で割り切れても閏年とならない1900年、2100年、2200年…の翌年に1日遅れて帳消しとなる。 立春の前日であり、立春は太陽黄経が315度となる日である。このように、間接的に天体の運行に基づいているので、日付は年によって異なり、また未来の日付は軌道計算に基づく予測しかできない。なお厳密には、基準とする標準時によっても異なるが、日本以外では祝う風習がないので、旧正月のように国による日付の違いが話題となることはない。 一方、400年に97回ある閏年では366日になるので4年前より少し早くなります。ただし、西暦年が100で割り切れる年は400で割り切れる年を除き平年になる(例えば、1900年、2100年は平年)ので、節分は2月2日から2月4日の中に納まるのです。 |
|
1.これを計算する方法を考えてみます。
まずエクセルを開いて・・
2.年を入力するセルに色付けをしておきます。
3.次にVBAを開いて
4.プロジェクトからSheet1を選択ダブルクリック
5.そこで以下のところでWorkSheetを選択します
6.するとSelectionCangeの項目が開くので・・・
これを変更します
7.Cangeの方を選びます
8.SelectionChangeの方は消してChangeを残します
9.ここにコードを書きます。
コード内容は以下です
‘-------------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)
‘セルの値が変更された時
Select Case Target.Row ‘目的となる行が
Case 2 ‘2行目で
Select Case Target.Column ‘目的となる列が
Case 2 ‘2列目のとき・・すなわちB2の場合
‘タイトルを記載する・・
Cells(Target.Row, Target.Column + 1) = “4で割った余り”
Cells(Target.Row, Target.Column + 2) = “節分の日付”
Cells(Target.Row, Target.Column + 3) = “閏区分”
‘ファンクションを実行する場合は下行のコメントアウトを外す
‘Call Setubun(Target.Value, Target.Row + 1, Target.Column)
End Select
End Select
End Sub
‘-------------------------------------
10.これが動くかまずはテストしてみて数字を入れてみます。
11.数値を入力すると隣の列からそれぞれを記載すればオーケー
12.コメントを外して、次はFunctionを記載します。
以下そのFunction
‘------------------------------------
Private Function Setubun(ByVal Val1 As Long, ByVal Row1 As Integer, ByVal col1 As Integer)
‘括弧の中の引数は・・ByVal Val1 As Long(年、長整数型), ByVal Row1 As Integer(行番号、単精度型整数型), ByVal col1 As Integer(列番号、単精度型整数)
Dim Hiduke As String ‘(節分の日付を文字列で指定)
For i = 0 To 20 ‘とりあえず入力した年から20年分計算し出力する
Cells(Row1 + i, col1) = Val1 + i ‘年に1を加えて記載
Cells(Row1 + i, col1 + 1) = Cells(Row1 + i, col1) Mod 4 ‘余りを計算 ‘Mod関数を使用
Select Case Cells(Row1 + i, col1 + 1) ‘4で割った余りが
Case 0: Cells(Row1 + i, col1 + 3) = “閏年” ‘0の時は閏年
Select Case Cells(Row1 + i, col1) Mod 100 ‘それでも100で割ったあまりが
Case 0 ‘0の年でも
Select Case Cells(Row1 + i, col1) Mod 400 ‘400で割って
Case 0 ‘余りがない年は
Cells(Row1 + i, col1 + 3) = “閏年” ‘閏年で
Case Else
Cells(Row1 + i, col1 + 3) = “特異年閏なし” ‘割り切れない年は 、特異年で閏年でない
End Select
End Select
End Select
‘ここからは年の計算で
Select Case Cells(Row1 + i, col1)
Case 1873 To 1884 ‘この間の年で
Select Case Cells(Row1 + i, col1 + 1) ‘年を割った余りが
Case 1: Hiduke = “3日”
Case 2: Hiduke = “3日”
Case 3: Hiduke = “3日”
Case 0: Hiduke = “3日”
End Select
Case 1882 To 1900 ‘この間の年で
Select Case Cells(Row1 + i, col1 + 1) ‘年を割った余りが
Case 1: Hiduke = “2日”
Case 2: Hiduke = “3日”
Case 3: Hiduke = “3日”
Case 0: Hiduke = “3日”
End Select
Case 1901 To 1917 ‘この間の年で
Select Case Cells(Row1 + i, col1 + 1) ‘年を割った余りが
Case 1: Hiduke = “3日”
Case 2: Hiduke = “4日”
Case 3: Hiduke = “4日”
Case 0: Hiduke = “4日”
End Select
Case 1915 To 1954 ‘この間の年で
Select Case Cells(Row1 + i, col1 + 1) ‘年を割った余りが
Case 1: Hiduke = “3日”
Case 2: Hiduke = “3日”
Case 3: Hiduke = “4日”
Case 0: Hiduke = “4日”
End Select
Case 1952 To 1987 ‘この間の年で
Select Case Cells(Row1 + i, col1 + 1) ‘年を割った余りが
Case 1: Hiduke = “3日”
Case 2: Hiduke = “3日”
Case 3: Hiduke = “3日”
Case 0: Hiduke = “4日”
End Select
Case 1985 To 2020 ‘この間の年で
Select Case Cells(Row1 + i, col1 + 1) ‘年を割った余りが
Case 1: Hiduke = “3日”
Case 2: Hiduke = “3日”
Case 3: Hiduke = “3日”
Case 0: Hiduke = “3日”
End Select
Case 2021 To 2057 ‘この間の年で
Select Case Cells(Row1 + i, col1 + 1) ‘年を割った余りが
Case 1: Hiduke = “2日”
Case 2: Hiduke = “3日”
Case 3: Hiduke = “3日”
Case 0: Hiduke = “3日”
End Select
Case 2055 To 2090 ‘この間の年で
Select Case Cells(Row1 + i, col1 + 1) ‘年を割った余りが
Case 1: Hiduke = “2日”
Case 2: Hiduke = “2日”
Case 3: Hiduke = “3日”
Case 0: Hiduke = “3日”
End Select
Case 2088 To 2100 ‘この間の年で
Select Case Cells(Row1 + i, col1 + 1) ‘年を割った余りが
Case 1: Hiduke = “2日”
Case 2: Hiduke = “2日”
Case 3: Hiduke = “2日”
Case 0: Hiduke = “3日”
End Select
Case 2101 To 2177 ‘この間の年で
Select Case Cells(Row1 + i, col1 + 1) ‘年を割った余りが
Case 1: Hiduke = “3日”
Case 2: Hiduke = “3日”
Case 3: Hiduke = “3日”
Case 0: Hiduke = “3日”
End Select
End Select
Cells(Row1 + i, col1 + 2) = Hiduke
Next i
End Function
‘---------------------------------
13.それで実行してみます。
14.数字をいれてみて、昨年の西暦をいれてみます。
15.でてきました