【 2016年9月15日  サイト 移転のお知らせ 】
      AddinBox サイトを [ DION ] から [ さくら インターネット ] へ移転しました。  なお、旧サイト は 2017年10月 まで残します。
      この ページ の 移転先 URL  ⇒⇒  http://addinbox.sakura.ne.jp/eto_topic.htm  
 
ロゴ(青) 干支の算出方法 ロゴ(緑)
 kt関数アドインでは【kt干支】関数で、年・月・日・時刻の干支を求める事ができますが、ここでは、
ワークシート上でエクセルの標準関数だけを使って干支を求める方法を解説します。

 先ず最初に、普段「えと」と言うと、年賀状に「うま年」「とら年」とするように『その年』に対する
   (ね) (うし) (とら) (う) (たつ) (み)
   (うま) (ひつじ) (さる) (とり) (いぬ) (い)
を指して言いますが、これは本当は【十二支】の事です。本来『干支』とは『干支』という文字が
示すように【十干と十二支】の組み合わせの事です。

十干】とは
   甲(きのえ :木の兄())
   乙(きのと :木の弟())
   丙(ひのえ :火の兄)
   丁(ひのと :火の弟)
   戊(つちのえ :土の兄)
   己(つちのと :土の弟)
   庚(かのえ :金の兄)
   辛(かのと :金の弟)
   壬(みずのえ :水の兄)
   癸(みずのと :水の弟)

という10種の文字が十二支と同じように循環して割り当てられています。10種と12種の組み
合わせなので、干支が再び元に戻るには60回かかります。『還暦』という呼び名は、暦(干支)
が一巡りして元に戻ってきたという事から付けられています。その読みは右側の漢字を意味し
ており、「木火土金水」とは中国の五行のことです。

  十干/十二支に関して詳しく知りたい方は、下記サイトを参考にしてください。
        おこよみ焼き 【おこよみ焼き】の『暦の読み方/十干,十二支

  十干/十二支は、年・月・日いずれであっても、10種/12種の文字が、間を空ける事無く循環して
割り当てられていきます(年なら1年ごとに、月なら1ヶ月ごとに、日なら1日ごとに、次の組み合わせ
へ移ります)。ということは、どこか基準となる位置の十干/十二支が判れば、後はそこから10なり
12単位で割り振っていけば求まるという事です。

  しかし、「1年ごと、1ヶ月ごと」という基準が、壁に掛かっている今の暦とは一寸異なります(日に
ついては問題ありません)。十干/十二支を考える場合、年および月は『二十四節気』の日付を
期間の区切りとして扱います。

  二十四節気に沿った『月の数え方』では、立春・立夏など二十四節気の内の【節】に当たる
日付で月を区切り、概ね「2月4日頃〜翌年2月3日頃」を1年とします([概ね/頃]と書いた
のは、春分日と同じ様に年によって1日程前後するからです)。

   【節】に当たる日付は、概ね下記の通りです(年によって1日程前後します)。
      立春(2月4日)啓蟄(3月5日)清明(4月4日)立夏(5月5日)
      芒種(6月5日)小暑(7月7日)立秋(8月7日)白露(9月7日)
      寒露(10月8日)立冬(11月7日)大雪(12月7日)小寒(1月6日)

  したがって、立春より前の日付では、年の干支は、新暦で言えば「前年」の干支になります。
また、月の干支は立春より前が12月、小寒より前が11月になります。
  これら二十四節気の日付は、エクセル関数だけでは簡単に求める事はできませんので、
年と月の十干/十二支は無理だという事になります。
(2003/10/21 エクセル一般式で「二十四節気」日付を求める略算式を見つけました)

  ただし、先に言った年賀状で使うような「新暦の1月1日〜」という見方の干支で良いなら、
単純に「西暦年」だけを見て循環させれば良いので、こちらは「日」と同じ様に簡単に求める
事ができます。

--------------------------------------------------------------------------
では、実際にどうやって算出するかですが、先ず基準となる位置の干支を知る必要があります。
ここでは、下記を用います。

  【基準干支】
        の干支    1900年    →[庚子(かのえ・ね)]
        の干支    1900/1/1→[甲戌(きのえ・いぬ)]

この基準干支からスタートして、その年数/日数分だけ、
      『甲乙丙丁戊己庚辛壬癸』    『子丑寅卯辰巳午未申酉戌亥』
という並びの中を循環させて、最後の位置が求める干支になります。実際にグルグルと回さなくても、
エクセルにはMOD関数という剰余を求める関数がありますので、それを利用します。

年の十干
  =MID("甲乙丙丁戊己庚辛壬癸",MOD((年-1900+の位置(7)-1),10)+1,1)
    → =MID("甲乙丙丁戊己庚辛壬癸",MOD((年-1894),10)+1,1)
      → =MID("甲乙丙丁戊己庚辛壬癸",MOD((年+6),10)+1,1)    (*1)
        → =MID("甲乙丙丁戊己庚辛壬癸",MOD((年-4),10)+1,1)    (*1)
年の十二支
  =MID("子丑寅卯辰巳午未申酉戌亥",MOD((年-1900+の位置(1)-1),12)+1,1)
    → =MID("子丑寅卯辰巳午未申酉戌亥",MOD((年-1900),12)+1,1)
      → =MID("子丑寅卯辰巳午未申酉戌亥",MOD((年+8),12)+1,1)    (*1)
        → =MID("子丑寅卯辰巳午未申酉戌亥",MOD((年-4),12)+1,1)    (*1)

    (*1) 被除数に【除数の倍数】を加えても剰余の結果は同じです
              (-1894)+19*10=  6 , (-1900)+159*12 =  8
              (-1894)+18*10= -4 , (-1900)+158*12 = -4

日の十干
  =MID("甲乙丙丁戊己庚辛壬癸",MOD((日付-"1900/1/1"+の位置(1)-1),10)+1,1)
    → =MID("甲乙丙丁戊己庚辛壬癸",MOD((日付-2+の位置(1)-1),10)+1,1)    (*2)
      → =MID("甲乙丙丁戊己庚辛壬癸",MOD((日付-2),10)+1,1)
        → =MID("甲乙丙丁戊己庚辛壬癸",MOD((日付+8),10)+1,1)    (*1)
日の十二支
  =MID("子丑寅卯辰巳午未申酉戌亥",MOD((日付-"1900/1/1"+の位置(11)-1),12)+1,1)
    → =MID("子丑寅卯辰巳午未申酉戌亥",MOD((日付-2+の位置(11)-1),12)+1,1)    (*2)
      → =MID("子丑寅卯辰巳午未申酉戌亥",MOD((日付+8),12)+1,1)
(*2)
セル上では[1900/1/1]のシリアル値は1
になりますが、Lotus1-2-3との互換を
採る為に残されたバグによるものです。エクセルでは[1900/2/29]という存在しない
日付もカウントしてしまう為、[1900/3/1]以前のシリアル値が本来採るべき値より1少
なくなっています。しかし、ここでは本来の正しい値(即ち、2)で計算しないと結果が
狂ってしまいます。何故なら[1900/1/1〜1900/3/1]という日数は[31+28+1=60]で
すが、シート上で[1900/3/1-1900/1/1+1]を計算すると[61-1+1]となって結果が61
になってしまいます。[1900/2/28]以前の日付で計算しようとした場合は、その日付
自体も[1900/1/1]と同じ様にズレていますので、この場合は2ではなく1で計算する
必要があります。しかし、現在の干支を求める為に使おうとするのが普通ですから、
[1900/1/1]は2として計算式を組み立てます。尚、VBA(又はVB)では[1900/1/1]
のシリアル値は正しく2として扱われます。
--------------------------------------------------------------------------
基準の干支は何時のものでも良い訳ですから、試しに2002年1月1日を基準にしてみましょう。
結果はご覧のように同じ式になります。

【基準干支】
    年
の干支 2002年      →[壬午(みずのえ・うま)]
      の干支 2002/1/1  →[己巳(つちのと・み)]

年の十干
  =MID("甲乙丙丁戊己庚辛壬癸",MOD((年-2002+の位置(9)-1),10)+1,1)
    → =MID("甲乙丙丁戊己庚辛壬癸",MOD((年-1994),10)+1,1)
      → =MID("甲乙丙丁戊己庚辛壬癸",MOD((年+6),10)+1,1)    (*3)
        → =MID("甲乙丙丁戊己庚辛壬癸",MOD((年-4),10)+1,1)    (*3)
年の十二支
  =MID("子丑寅卯辰巳午未申酉戌亥",MOD((年-2002+の位置(7)-1),12)+1,1)
    → =MID("子丑寅卯辰巳午未申酉戌亥",MOD((年-1996),12)+1,1)
      → =MID("子丑寅卯辰巳午未申酉戌亥",MOD((年+8),12)+1,1)    (*3)
        → =MID("子丑寅卯辰巳午未申酉戌亥",MOD((年-4),12)+1,1)    (*3)

  (*3) 被除数に【除数の倍数】を加えても剰余の結果は同じです
            (-1994)+20*10 = 6 , (-1996)+167*12 = 8
            (-1994)+19*10 = -4 , (-1996)+166*12 = -4

日の十干
  =MID("甲乙丙丁戊己庚辛壬癸",MOD((日付-"2002/1/1"+の位置(6)-1),10)+1,1)
    → =MID("甲乙丙丁戊己庚辛壬癸",MOD((日付-37257+の位置(6)-1),10)+1,1)
      → =MID("甲乙丙丁戊己庚辛壬癸",MOD((日付-37252),10)+1,1)
        → =MID("甲乙丙丁戊己庚辛壬癸",MOD((日付-2),10)+1,1)    (*4)
          → =MID("甲乙丙丁戊己庚辛壬癸",MOD((日付+8),10)+1,1)    (*4)
日の十二支
  =MID("子丑寅卯辰巳午未申酉戌亥",MOD((日付-"2002/1/1"+の位置(6)-1),12)+1,1)
    → =MID("子丑寅卯辰巳午未申酉戌亥",MOD((日付-37257+の位置(6)-1),12)+1,1)
      → =MID("子丑寅卯辰巳午未申酉戌亥",MOD((日付-37252),12)+1,1)
        → =MID("子丑寅卯辰巳午未申酉戌亥",MOD((日付+8),12)+1,1)    (*4)

    (*4) 被除数に【除数の倍数】を加えても剰余の結果は同じです
              (-37252)+3725*10 = -2 , (-37252)+3105*12 = 8
              (-37252)+3726*10 =  8



サンプルブックを下記に用意しています。
     eto_doc.lzh (13KB)

--------------------------------------------------------------------------
(2002/10/11 追記)
  壁掛けカレンダー用のシートで『月の干支』を書き添えたいと言っても、下記のように月の
干支というものは【節】を区切りに変わるものであり、「カレンダー通りの毎月1日」を区切
りに変わるものではありません


  【節】に当たる日付は、概ね下記の通りです(年によって1日程前後します)。
    立春(2月4日)啓蟄(3月5日)清明(4月4日)立夏(5月5日)
    芒種(6月5日)小暑(7月7日)立秋(8月7日)白露(9月7日)
     寒露(10月8日)立冬(11月7日)大雪(12月7日)小寒(1月6日)

        (2003/10/21 エクセル一般式で「二十四節気」日付を求める略算式を見つけました)

  したがって、どうしても「月の干支」を添えたいという場合には、下記のような『断わり事』が
必要になります。
      その月にある【節】日付以降の干支を「その月」を代表する干支として書き記す
砕いて言えば、
      【節】より前の日数より、【節】以降の日数の方が圧倒的に多いのだから、毎月15日頃の
      「月の干支」を取り出して、それを『その月の干支』として使ってしまおう

という『お断わり』です。

以上のような「お断り」の下で求めると、下記のような式になります。

    【基準干支】 の干支 2002/1/15 → 辛丑(かのと・うし)

月の十干
  =MID("甲乙丙丁戊己庚辛壬癸",
                MOD((((年-1)*12+月)-(2001*12+1)+の位置(8)-1),10)+1,1)
    → =MID("甲乙丙丁戊己庚辛壬癸",MOD((年*12+月-24018),10)+1,1)
      → =MID("甲乙丙丁戊己庚辛壬癸",MOD((*12++2),10)+1,1)    (*5)

    (*5) 年*12+月-24018 → 年*12+月-24018+(2402*10) → 年*12+月+2

月の十二支
  =MID("子丑寅卯辰巳午未申酉戌亥",
                MOD((((年-1)*12+月)-(2001*12+1)+の位置(2)-1),12)+1,1)
    → =MID("子丑寅卯辰巳午未申酉戌亥",MOD((年*12+月-24024),12)+1,1)
      → =MID("子丑寅卯辰巳午未申酉戌亥",MOD(,12)+1,1)    (*6)

    (*6) 年*12+月-24024 → 年*12+月-24024+(2002*12) → 年*12+月 → 月

(注) この式を示す際には、【お断り】があるのだという事を、必ず書き添えて下さい。




  [ Home へ戻る ]

ロゴ(ゴールド)   ロゴ(ゴールド)

角田 桂一 Mail:addinbox@h4.dion.ne.jp CopyRight(C) 2001 Allrights Reserved.