干支は年に紐付く
「あなた、なにどし?」干支を聞く言葉ですね。
干支は「子、丑、寅、卯、辰、巳、午、未、申、酉、戌、亥」の12種類がありますが、これらはもちろん、年と紐付いています。
これを書いている2018年は戌年です。
このように、西暦さえ分かれば干支もわかるため、VBAでも生年月日や西暦から干支を求めることが可能です。
干支と年の関係
干支は12年周期です。
そのため、西暦年を12で割った余りの数が、各干支と紐づくことになります。
余りが0なら申、1なら酉、と言った具合です。
年を12で割った余り | 干支 |
0 | 申 |
1 | 酉 |
2 | 戌 |
3 | 亥 |
4 | 子 |
5 | 丑 |
6 | 寅 |
7 | 卯 |
8 | 辰 |
9 | 巳 |
10 | 午 |
11 | 未 |
これを配列にするとVBAでのコードにすることが出来ます。
ソースコード
以下のコードは日付を渡すと干支を返す関数です。
コードの内容ですが、事前に干支を配列にしています。
配列のインデックスは年を12で割った余りになります。
引数の日付からyyyyの年部分を取得して、12で割った余りの値を干支の配列のインデックスとして返します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
Function GetEto(a_dtDate As Date) Dim sArEto() '// 干支配列 Dim iYear '// 年 Dim iRemain '// 年を12で割った余り ReDim sArEto(11) '// 干支を12で割った際の余りをインデックスとして配列を設定 sArEto(0) = "申" sArEto(1) = "酉" sArEto(2) = "戌" sArEto(3) = "亥" sArEto(4) = "子" sArEto(5) = "丑" sArEto(6) = "寅" sArEto(7) = "卯" sArEto(8) = "辰" sArEto(9) = "巳" sArEto(10) = "午" sArEto(11) = "未" '// 年を取得 iYear = CInt(Format(a_dtDate, "yyyy")) '// 年を12で割った余りを取得 iRemain = iYear Mod 12 GetEto = sArEto(iRemain) End Function |
使い方
上の干支を取得するGetEto関数の使い方です。
日付を引数に渡すと、対応する干支が返ってきます。
1 2 3 4 5 6 7 8 9 |
Sub GetEtoTest() Dim sRet sRet = GetEto("2018/1/1") Debug.Print sRet '// 戌 sRet = GetEto("1918/1/1") Debug.Print sRet '// 午 End Sub |
実行結果
戌
午