- ベストアンサー
エクセル関数(現時点もしくは死亡時の年齢を表示させる)
エクセルの関数で、出生年月日と死亡年月日(健在者は、契約年月日)は入力済みです。 別の列に死亡(契約)年月日から出生年月日をひいて、契約(もしくは現時点)時の年齢や死亡時の年齢を表示させる関数を教えてください。 また、明治38年以降が、自動的に計算されて西暦になおせますが、それ以前(文化や弘化など)も西暦になおせる関数があればおしえてください。 セルC4に死亡年月日(健在者は、契約年月日かまだ未契約の方はTODAY) セルC3に出生年月日(死亡・健在問わず) 印刷範囲外で、セルJ4に死亡年月日の西暦表示 同様にセルJ3に出生年月日の西暦表示 セルK3とK4をあらかじめ結合させておいて、そのセルに年齢を表示させたいと思います。 アドバイスをお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは。 ユーザー定義関数を作ってみました。 以下で分かるように、慶長からです。 A1: 天明2年 =HenkanYear(A1) →1782年 となります。 A1 : 慶応 =HenkanYear(A1,0) 1866 という数字になります。 また、 1993/3/2 とシリアル値か文字列を入れれば、 →平成5年3月2日 どちらでも変換が可能です。 M2年 →1869年 A2 : M2年 =HenkanYear(A2,0) とすれば、1869 という数字になります。 (ただし、シリアル値-数字の場合は、すべて元号付きに変わりますから、表示形式には関係がありません。) なお、私製 DATEDIF関数も作れますが、この関数は、もともと、ナンセンスな部分があるので、できれば、一般関数で行えばよいと思います。 また、年号の変換を関数で、MS-DOS時代に作りました。そのときは、大化からですが、南北朝時代がうまくいきません。 標準モジュールでお試しください。 '----------------------------------------------- Private Const NENGO As String = "慶長,元和,寛永,正保,慶安,承応,明暦,万治,寛文,延宝,天和,貞享,元禄,宝永,正徳,享保,元文,寛保,延享,寛延,宝暦,明和,安永,天明,寛政,享和,文化,文政,天保,弘化,嘉永,安政,万延,文久,元治,慶応,明治,大正,昭和,平成" Private Const HAJIME As String = "1596,1615,1624,1644,1648,1652,1655,1658,1661,1673,1681,1684,1688,1704,1711,1716,1736,1741,1744,1748,1751,1764,1772,1781,1789,1801,1804,1818,1830,1844,1848,1854,1860,1861,1864,1865,1868,1912,1926,1989" Private Const OWARI As String = "1615,1624,1644,1648,1652,1655,1658,1661,1673,1681,1684,1688,1704,1711,1716,1736,1741,1744,1748,1751,1764,1772,1781,1789,1801,1804,1818,1830,1844,1848,1854,1860,1861,1864,1865,1868,1912,1926,1989" Public Function HenkanYear(arg As Variant, Optional flgNen As Boolean = True) '年号変換関数, flgNen オプションは、年を数値にする v.2662865.01 Dim arNengo As Variant Dim arHajime As Variant Dim arOwari As Variant Dim yFing As Integer Dim i As Integer Dim mYear As Integer Dim gYear As String Dim yFig As Integer Dim buf As String arNengo = Split(NENGO, ","): arHajime = Split(HAJIME, ","): arOwari = _ Split(OWARI, ",") If IsDate(arg) And Not (arg Like "[一-龝][一-龝]*") Then arg = CDate(arg) Select Case VarType(arg) Case vbString If InStr(arg, "日") > 0 Then arg = Replace(arg, "日", ""): arg = Replace(arg, "年", "/"): arg = Replace(arg, "月", "/") End If If InStr(1, arg, "m", 1) = 1 Or InStr(1, arg, "t", 1) = 1 Or InStr(1, arg, "s", 1) = 1 Or InStr(1, arg, "h", 1) = 1 Then arg = Replace(arg, "m", "明治", , , 1): arg = Replace(arg, "t", "/", , , 1): _ arg = Replace(arg, "s", "昭和", , , 1): arg = Replace(arg, "h", "平成", , , 1) End If ReDim Preserve arOwari(UBound(arOwari) + 1) arOwari(UBound(arOwari)) = Year(Date) If Left(arg, 4) Like "[一-龝][一-龝]#*" Then For i = LBound(arNengo) To UBound(arNengo) If StrComp(arNengo(i), Left(arg, 2)) = 0 Then yFig = i Exit For End If Next i mYear = CInt(arHajime(yFig)) + CInt(Val(Mid(arg, 3, 2))) - 1 If InStr(arg, "/") > 0 Then buf = Mid$(arg, InStr(arg, "/")) Else buf = "年" & Mid$(arg, 5) End If End If If flgNen = False Then HenkanYear = mYear Else HenkanYear = mYear & buf End If Case vbDate mYear = Year(arg) For i = UBound(arHajime) To LBound(arHajime) Step -1 If mYear >= arHajime(i) Then gYear = arNengo(i) If mYear = arHajime(i) Then gYear = gYear & "元年" Else gYear = gYear & CStr(mYear - arHajime(i) + 1) End If HenkanYear = gYear & "年" & Format(arg, "m月d日") Exit For End If Next i End Select End Function
その他の回答 (3)
- redowl
- ベストアンサー率43% (2140/4926)
>それ以前(文化や弘化など)も西暦になおせる関数があれば 【和暦を西暦に変換 関数】は、組み込まれていないので・・・ http://www.fct.co.jp/benri/nenrei/sei-gen.all.html を参考にしてみては? (データ取り込み後、配列変換出来る関数式を組めるのであれば、ゼロから入力するよりも楽ですが・・・)
補足
http://park2.wakwak.com/~fivesprings/books/age.html 上記のサイトで、簡単に(平成18年までですが・・・)年齢計算はできました。 BUT 職場のPCは、ネットはできないので、(専用のサイトしかいけない)使用できそうにもないです・・・
- imogasi
- ベストアンサー率27% (4737/17069)
>文化や弘化など)も西暦になおせる関数があればおしえてください 今ではあまりそんな必要は、特殊な世界・業界以外は必要ないでしょう。 http://www.netz.co.jp/kenbun/kurasi/dentaku/koyomi.html のようなサイトが見つかりました。 年号と西暦年の対照表を作り、関数ならVLOOKUP関数でできそう。
補足
たしかに、簡単に和暦を西暦に変換できますね。 これを、年齢に変換する関数に組み込んでみますね。 でも、なかなかだな。
- edomin
- ベストアンサー率32% (327/1003)
=DATEDIF(C3,C4,"Y") で、年齢が出ます。 この関数は、サポートされなくなる可能性がある関数です。 でも、まだ使えます。office2007では、どうなるか判りませんが…。 また、明治38年以前の年号には対応している関数はありません。 表示させるには、自分で年号と年を定義して表を作るしかありません。
補足
=DATEDIF(C3,C4"y") で、確かに簡単に年齢はでるんですが、 問題は、M38以前なんですよね。 古い戸籍の人はたいていが、明治初期か、弘化とか慶応とかでして、西暦だけで、単に満年齢で表示させるしかないですかね・・・
お礼
とっても詳しく説明していただいてありがとうございます。 少しづつ理解していこうと思いますが・・・ またゆっくり確認して仕上げていきますね。 ありがとうございました。