十干・十二支を知る   「年齢・干支シミュレーション」


匠への技

 「匠への技」第8弾は、誕生和暦年から年齢と干支を知る計算式です。 
以外と知っているようで知られていない干支、今回は干支にまつわる一般常識も含めて説明をします。
干支とは、10年で1周する干12年で1周する支があり、十干十二支で表現します。
60歳を還暦といいますが意味は、60年で自分の生まれた干支に戻る意味から還暦と呼ばれています。
例えば、平成14年生まれの人は、十干の壬(ミズノエ)、十二支の午(ウマ)となります。60歳を迎える昭和17年生まれの方も壬午(ミズノエウマ)となります。
要するに60年で自分が生まれた干支に戻ったことになり、その1周期を還暦といった言葉で表現します。
  • 干支とは
     干支は、古来中国に始まった制度で、月の満ちかけをもとにした大陰暦を使用していた時代、木・火・土・金・水の五行をそれぞれ「え」「と」にあてた十干十二支を配し、60通り(60歳還暦)の組合わせをつくって暦、方角、時刻等を表すのに使用され、人々の生活に深くかかわリ合いを持っていました。今でも、生まれ年を干支で表したリ、旧暦としての旧正月やお盆の習しなど人々の生活に深いかかわリ合いを残しています。
●干支表
十干 十二支
キノエ
キノト ウシ
ヒノエ トラ
ヒノト ウシ
ツチノエ タツ
ツチノト
カノエ ウマ
カノト ヒツジ
ミズノエ サル
ミズノト トリ
  イヌ
 


 画面デザイン       ブック名:takumivol-008.xls   シート名:干支早見

    セル書式の説明へ   1:B6  2:B8  3:B12  4:D12  5:B14  6:B16  7:D16  8:B18  9:D18
  

■ 仕 様 設 計
@テーブルのセット
 元号テーブル、西暦テーブル、十干テーブル、十二支テーブルからなる4つのテーブルを用意し各々の検索キーを元に引用する。
  • 元号テーブルは、1:明治 2:大正 3:昭和 4:平成 とした。
  • 西暦テーブルは、明治30年から平成20年に該当する西暦年をテーブル化。
    キーは、元号キー(元号テーブルのキー1桁)+和暦年(2桁)
    各々の元年は重複する年として前後する元号分の2レコードを用意した。
      ※画面デザインのキー145と201を参照

  • 十干テーブルは、本来の順位からすると「甲」(キノエ)から始まりますが西暦年から関数式で求めると4番目になり関数式で求める順位でテーブル化しています。本当の順位を知るためにテーブルに「本順」の項目で番号を付していまので十干の順位は本順に示す順番で覚えてください。
      ※内容は画面デザインを参照

  • 十二支テーブルは、本来の順位からすると「子」(ネ)から始まりますが十干同様西暦年から関数式で求めると4番目になり関数式で求められるようにテーブル化しています。本当の順位を知るために「本順」の項目で番号を付していますので十二支の順位は、本順に示す順番で覚えてください。

      ※内容は画面デザインを参照
A入力箇所
 入力は、調べたい人の誕生元号キー(1〜4)と和暦年の2項目です。その箇所は画面デザインの黄色のセル位置です。


 使用する関数  
  1. IF(論理式,真の条件,偽の条件)   
  2. AND(論理式1, 論理式2, ...)
  3. VLOOKUP(検索値,範囲,列番号,検索の型)
  4. MOD(数値,除数)
  5. TODAY( )
  6. YEAR(シリアル値)
・・・・・8回目登場
・・・・・3回目登場
・・・・・3回目登場
・・・・・初回
・・・・・初回
・・・・・初回



 解説
  1. セルB6  元号     (入力)                                    <画面デザインへ>
    干支を知りたい人の誕生元号テーブルのコードを入力します。

  2. セルB8  和暦年    (入力)                                    <画面デザインへ>
    干支を知りたい人の誕生和暦年を入力します。 

  3. セルB12  西暦検索キー    (非入力)                             <画面デザインへ>
    入力した元号と和暦年から西暦テーブルの参照キーを求めます。 
    関数式  =IF(AND(B6<>"",B8<>""),B6*100+B8,"")
    • AND関数 AND(B6<>"",B8<>"")  元号と和暦年の両方が入力されているときTRUEとなり、B6*100+B8 の式が適用されます。この式は、西暦年のキー 元号(1桁)+和暦年 の計算結果を代入します。昭和20年であれば、 1*100+20 となり 結果 120 となります。
      FALSEのときは、ヌル "" を代入します。

  4. セルD12 西暦年を表示   (非入力)                               <画面デザインへ>
    セルB12の西暦検索キーから西暦年を求め西暦表示します。

    関数式  =IF(B12="","","西暦"&VLOOKUP(B12,I2:J117,2,FALSE)&"年")

    • 論理式 B12="" セルB12の西暦検索キーが空欄の場合は、 "" を代入します。
    • 論理式が偽の条件の場合は、VLOOKUP(B12,I2:J117,2,FALSE) により該当する西暦検索キーの引用値(西暦年)と用い文字列連結(&) "西暦"&VLOOKUP(B12,I2:J117,2,FALSE)&"年" 「西暦XXXX年」 と表示させます。
      セルE12は、VLOOKUPで引用した西暦年をダイレクトに代入しています。これは後続するセルで西暦年を引数とするために用意したワークセルです。ワークセルなので文字色を背景に合わせるなりすれば見た目わからなくなりますがここではあえて表示するようにしました。
    • VLOOKUP関数の引数の内、FALSEは検索の型で完全一致を意味します。キーが一致しない場合は #N/A を返します。

  5. セルB14 年齢   (非入力)                                     <画面デザインへ>
    当日までの年齢を計算し表示します。

    関数式  =IF(E12="","",YEAR(TODAY())-E12)

    • 論理式 E12="" セルE12の内容が空欄の場合は、 "" を代入します。
    • 論理式が偽の場合は、YEAR(TODAY()) YEAR関数でTODAY()関数で求める本日の日付から西暦年を求めます。
      求めた結果から誕生西暦年セルE12を減算して年齢を求めています。求めた年齢はは、満年齢になりますので誕生前であれば1歳を減算することになります。

  6. セルB16 十干   (非入力)                                     <画面デザインへ>
    西暦年から該当する十干を求めます。

    関数式  =IF(E12="","",VLOOKUP(MOD(E12,10),K2:N12,2,FALSE))

    • 論理式 E12="" セルE12の内容が空欄の場合は、 "" を代入します。
    • 論理式が偽の場合は、十干テーブルから該当する十干を代入します。今回初めて登場した MOD関数は、数値を除数で割ったときの剰余を返します。戻り値は除数と同じ符号になります。西暦年を10で除した余りを十干テーブルの参照キーとして該当する十干を求めています。本来の順番と相違しますが、の時が庚(カノエ)の時が辛(カノト)・・・の時が己(ツチノト)と参照することができます。その値を検索キーとしてVLOOKUP関数で十干テーブルから十干名を代入します。
    • 十干の名称になりますので VLOOKUP関数に列数を定義し名称を参照しています。
    • VLOOKUP関数の引数の内、FALSEは検索の型で完全一致を意味します。キーが一致しない場合は #N/A を返します。

  7. セルD16 十干の読み  (非入力)                                 <画面デザインへ>
    セルB16の十干の読みを代入します。

    関数式  =IF(B16="","",VLOOKUP(MOD(E12,10),K2:N12,3,FALSE))

    • 論理式 B16="" セルB16の内容が空欄の場合は、 "" を代入します。
    • 論理式が偽の場合は、基本的に、セルB16の十干名の代入と同じで、VLOOKUP関数の列位置の指定のみの違いとなります。十干テーブルの読みは3列目になりますのでを定義します。
    • VLOOKUP関数の引数の内、FALSEは検索の型で完全一致を意味します。キーが一致しない場合は #N/A を返します。

  8. セルB18 十二支    (非入力)                                  <画面デザインへ>
    西暦年から該当する十二支を求めます。

    関数式  =IF(E12="","",VLOOKUP(MOD(E12,12),K14:N26,2,FALSE))

    • 論理式 E12="" セルE12の内容が空欄の場合は、 "" を代入します。
    • 論理式が偽の場合は、十二支テーブルから該当する十二支を代入します。十二支は1周期12年となりますのでMOD関数により12を基数として余りを求め、その値が十二支の参照キーになり十二支テーブルから引用します。十干と同様に本来の十二支の順番にはならず、0の申(サル)から始まります。最後の12番目(検索キー:11)が未(ヒツジ)です。
    • 十二支の名称になりますので VLOOKUP関数に列数を定義し名称を参照しています。
    • VLOOKUP関数の引数の内、FALSEは検索の型で完全一致を意味します。キーが一致しない場合は #N/A を返します。

  9. セルD18 十二支の読み    (非入力)                              <画面デザインへ>
    セルB18の十二支の読みを代入します。
    関数式  =IF(B18="","",VLOOKUP(MOD(E12,12),K14:N26,3,FALSE))
    • 論理式 B18="" セルB18の内容が空欄の場合は、 "" を代入します。
    • 論理式が偽の場合は、基本的に、セルB18の十二支名の代入と同じで、VLOOKUP関数の列位置の指定のみの違いとなります。十干テーブルの読みは3列目になりますのでを定義します。
    • VLOOKUP関数の引数の内、FALSEは検索の型で完全一致を意味します。キーが一致しない場合は #N/A を返します。

 WebMambowから
 干支は、現代社会・生活に直接影響があるわけでもなく、年度替わりに来年の干支は・・・ といったくらいの存在と思います。しかし、日本古来から使われている干支、日本の文化に多少なりとも息ついており、その意義、由来、呼び方など知ることも日本人として必要なことなのかも知れません。 ^^ゞ
今回の干支は、母親に聞かれたことがきっかけ。Excelで簡単に知る方法を考えました。


○「匠への技」VOL-8で作成したExcelブックのダウンロード

  演習できるExcelブックを用意しています。下図のダウンロードボタンをクリックして下さい。

     Excel Book Name: takumivol-008.xls  Download file: takumivol-008.lhz