Excel自作 VBA 関数
日付から二十四節気を求める関数です。
カレンダー作成や日付が二十四節気のどれに当たるのか知りたい場合等にご使用ください。
VBEの標準モジュールに下のコードを登録して「Excelマクロ有効フォーム」で保存してください。
関数の登録方法は⇒♯000 ユーザー定義関数を登録する方法
登録されたら、シート上からユーザー関数「DSekki」が使用できます。
使い方は
ワークシート上で = DSekki(日付) の関数として使用することで、 市区町村を を取得できます。
【例】
DSekki(日付)
日付の二十四節気を求める関数。
DSekki(2021/1/5)→ 小寒
DSekki(2021/4/4)→ 清明
Function DSekki(D As Date) As String
'日付の二十四節気を求める関数。
'DSekki(日付)
'DSekki(2021/1/5)→ 小寒
'DSekki(2021/4/4)→ 清明
'1 小寒
'2 大寒
'3 立春
'4 雨水
'5 啓蟄
'6 春分
'7 清明
'8 穀雨
'9 立夏
'10小満
'11芒種
'12夏至
'13小暑
'14大暑
'15立秋
'16処暑
'17白露
'18秋分
'19寒露
'20霜降
'21立冬
'22小雪
'23大雪
'24冬至
On Error GoTo EXITFUN
Dim i As Long
Dim Y As Long
Dim SekkiC(1 To 24, 1 To 2) As Variant
If D = 0 Then
GoTo EXITFUN
End If
Y = Year(D)
SekkiC(1, 1) = DateSerial(Y, 1, Int(6.3811 + (0.242778 * ((Y - 1) - 1900)) - Int(((Y - 1) - 1900) / 4)))
SekkiC(2, 1) = DateSerial(Y, 1, Int(21.1046 + (0.242765 * ((Y - 1) - 1900)) - Int(((Y - 1) - 1900) / 4)))
SekkiC(3, 1) = DateSerial(Y, 2, Int(4.8693 + (0.242713 * ((Y - 1) - 1900)) - Int(((Y - 1) - 1900) / 4)))
SekkiC(4, 1) = DateSerial(Y, 2, Int(19.7062 + (0.242627 * ((Y - 1) - 1900)) - Int(((Y - 1) - 1900) / 4)))
SekkiC(5, 1) = DateSerial(Y, 3, Int(6.3968 + (0.242512 * (Y - 1900)) - Int((Y - 1900) / 4)))
SekkiC(6, 1) = DateSerial(Y, 3, Int(21.4471 + (0.242377 * (Y - 1900)) - Int((Y - 1900) / 4)))
SekkiC(7, 1) = DateSerial(Y, 4, Int(5.628 + (0.242231 * (Y - 1900)) - Int((Y - 1900) / 4)))
SekkiC(8, 1) = DateSerial(Y, 4, Int(20.9375 + (0.242083 * (Y - 1900)) - Int((Y - 1900) / 4)))
SekkiC(9, 1) = DateSerial(Y, 5, Int(6.3771 + (0.241945 * (Y - 1900)) - Int((Y - 1900) / 4)))
SekkiC(10, 1) = DateSerial(Y, 5, Int(21.93 + (0.241825 * (Y - 1900)) - Int((Y - 1900) / 4)))
SekkiC(11, 1) = DateSerial(Y, 6, Int(6.5733 + (0.241731 * (Y - 1900)) - Int((Y - 1900) / 4)))
SekkiC(12, 1) = DateSerial(Y, 6, Int(22.2747 + (0.241669 * (Y - 1900)) - Int((Y - 1900) / 4)))
SekkiC(13, 1) = DateSerial(Y, 7, Int(8.0091 + (0.241642 * (Y - 1900)) - Int((Y - 1900) / 4)))
SekkiC(14, 1) = DateSerial(Y, 7, Int(23.7317 + (0.241654 * (Y - 1900)) - Int((Y - 1900) / 4)))
SekkiC(15, 1) = DateSerial(Y, 8, Int(8.4102 + (0.241703 * (Y - 1900)) - Int((Y - 1900) / 4)))
SekkiC(16, 1) = DateSerial(Y, 8, Int(24.0125 + (0.241786 * (Y - 1900)) - Int((Y - 1900) / 4)))
SekkiC(17, 1) = DateSerial(Y, 9, Int(8.5186 + (0.241898 * (Y - 1900)) - Int((Y - 1900) / 4)))
SekkiC(18, 1) = DateSerial(Y, 9, Int(23.8896 + (0.242032 * (Y - 1900)) - Int((Y - 1900) / 4)))
SekkiC(19, 1) = DateSerial(Y, 10, Int(9.1414 + (0.242179 * (Y - 1900)) - Int((Y - 1900) / 4)))
SekkiC(20, 1) = DateSerial(Y, 10, Int(24.2487 + (0.242328 * (Y - 1900)) - Int((Y - 1900) / 4)))
SekkiC(21, 1) = DateSerial(Y, 11, Int(8.2396 + (0.242469 * (Y - 1900)) - Int((Y - 1900) / 4)))
SekkiC(22, 1) = DateSerial(Y, 11, Int(23.1189 + (0.242592 * (Y - 1900)) - Int((Y - 1900) / 4)))
SekkiC(23, 1) = DateSerial(Y, 12, Int(7.9152 + (0.242689 * (Y - 1900)) - Int((Y - 1900) / 4)))
SekkiC(24, 1) = DateSerial(Y, 12, Int(22.6587 + (0.242752 * (Y - 1900)) - Int((Y - 1900) / 4)))
SekkiC(1, 2) = "小寒"
SekkiC(2, 2) = "大寒"
SekkiC(3, 2) = "立春"
SekkiC(4, 2) = "雨水"
SekkiC(5, 2) = "啓蟄"
SekkiC(6, 2) = "春分"
SekkiC(7, 2) = "清明"
SekkiC(8, 2) = "穀雨"
SekkiC(9, 2) = "立夏"
SekkiC(10, 2) = "小満"
SekkiC(11, 2) = "芒種"
SekkiC(12, 2) = "夏至"
SekkiC(13, 2) = "小暑"
SekkiC(14, 2) = "大暑"
SekkiC(15, 2) = "立秋"
SekkiC(16, 2) = "処暑"
SekkiC(17, 2) = "白露"
SekkiC(18, 2) = "秋分"
SekkiC(19, 2) = "寒露"
SekkiC(20, 2) = "霜降"
SekkiC(21, 2) = "立冬"
SekkiC(22, 2) = "小雪"
SekkiC(23, 2) = "大雪"
SekkiC(24, 2) = "冬至"
If D < SekkiC(1, 1) Then
DSekki = SekkiC(24, 2)
GoTo EXITFUN
End If
For i = 24 To 1 Step -1
If D >= SekkiC(i, 1) Then
DSekki = SekkiC(i, 2)
GoTo EXITFUN
End If
Next
EXITFUN:
End Function
ここで紹介したコード使用による損害に対しては一切責任は負えません。