[EXCEL] 西暦と異なった元号の和暦が混在する生年月日を効率的に入力する方法⇒「元号・年・月・日」を別々入力⇒合体 ~入力・集計の実践トラブルレスキュー~
▶ 目次 > 入力・集計の実践トラブルレスキュー
日付と時間のトラブルレスキュー
プチトラブルレスキューよりちょっと深掘りな「中級者向け」。
入力・集計実務の「困った」を5分でサクッと解決!
【まとめ】
和暦・西暦混在の生年月日入力を効率化するため「年・月・日」を別々に入力し、数式で西暦に変換する方法です(数式だけで完了する方法と、XLOOKUP関数を使う2パターン)。
これにより、入力ミスや環境依存を回避し、正確な集計が可能です。
【説明】
和暦・西暦混在の入力は面倒
和暦でも西暦でも、正しく入力されていれば Excel は問題なく集計できます。
しかし実務では、和暦・西暦の混在は「入力が面倒」。
本記事では、この“入力の手間”を減らし、和暦で入力しても西暦に自動修正する仕組みを紹介します。
1セルに入力すればいいけれど、それも面倒
和暦であれ西暦であれ、生年月日を1セルに入力すれば問題ありません。
でも、1セルへの入力はちょっと面倒(区切り記号や和暦略字)。

1セルへの入力が「苦」でない方は、本記事は不要です(テンキーだと楽)。そのまま、入力を続けてください。
西暦⇔和暦は「セルの書式設定」(Ctrl+1)で簡単にできますから。
参考記事:
[Excel]日付を和暦に直すのは簡単10秒!2024/1/21 → 令和6年1月21日
1セルに年月日を入れるのが面倒な方向け
以下の手順で、入力のストレス(や間違い)が減ります。
手順1:「年」「月」「日」を別セルに入力
*和暦・西暦不問。和暦は元号略称も必要
*入力⇒Tabで右セルに移動するのでリズムよく入力可能
*元号等、上セルと同じなら「Ctrl+D」で瞬間コピー可能
手順2:「年」「月」「日」を合体させて西暦(又は和暦)で表示
*和暦の場合は、西暦年に自動変換
*合体後は、和暦・西暦表示のどちらかだけでもでもいい。

合体のやり方は以下のとおり。5分あればできるでしょうか。
2つ方法を示しますが、結果は同じです。
方法1 数式内で完結(手順がシンプル)
① 「元号」欄に、プルダウンリスト(リスト入力)を設定する。
Alt⇒A⇒F⇒F で「データの入力規則」を開く⇒「設定」タブをクリック⇒「入力値の種類」で「リスト」を選択⇒「元の値」欄に「R,H,S,T,M」(またはM,T,S,H,R)と入れる(半角、「, 」で区切る)。
*該当者がいなければ、M(明治)、T(大正)は省略(1900/1/1より前の日付は対応不可)。
*リスト候補は、本来はここに記載するべきではないが、今回は例外(候補が限定的なので)。

これで、Alt + ↓ で、和暦のローマ字候補が出ます(マウス不要)。

② 「生年月日」欄に以下の数式を入れる(F3セルの場合)
=IF(
OR(C3="",D3="",E3=""),
"",
IFERROR(
DATE(
IF(C3>=100,C3,
SWITCH(B3,
"R", C3+2018,
"H", C3+1988,
"S", C3+1925,
"T", C3+1911,
"M", C3+1867,
""
)
),
D3,
E3
),
"")
)
=IF(
OR(C3="",D3="",E3=""),
"",
IFERROR(
DATE(
IF(C3>=100,C3,
SWITCH(B3,
"R", C3+2018,
"H", C3+1988,
"S", C3+1925,
"T", C3+1911,
"M", C3+1867,
""
)
),
D3,
E3
),
"")
)*自分のファイルへの貼り付け方
上のソースをコピー⇒メモ帳等に張り付け⇒セル番地を変更⇒全部コピー⇒「数式バー」に張り付け(セルに張り付けると1行目しか張り付かない)
数式の説明(ザックリ)
・C(年),D(月),E(日)が全て入力されているか判定
・C(年)が100以上なら西暦と判断し、そのまま使う
・Bの元号略字によって、C(和暦年)を西暦年に変換
・DATE関数で「年・月・日」を合体して日付を作る
・変な入力があれば、空欄にする
数式の説明(詳細版)
① 入力が揃っていないときは空欄
IF(OR(C3="",D3="",E3=""),""
年(C3)、月(D3)、日(E3)のどれかが空欄なら結果も空欄
⇒ 入力途中でエラーを出さない(入力者を焦らせない)
② C3(年) が 100以上なら西暦と判断IF(C3>=100, C3,
2022 → 西暦
1990 → 西暦
4 → 和暦
30 → 和暦
⇒ 西暦/和暦を自動判定
③和暦なら元号に応じて西暦へ変換
R4 → 2018+4 = 2022
H30 → 1988+30 = 2018
S45 → 1925+45 = 1970
④ DATE で日付に組み立てる
=DATE(年セル,月セル,日セル)
⇒ 2022/2/1 のように日付化(数式で扱えるシリアル値になる)
⑤ IFERROR で最終保険
=IFERROR( … , "" )
IFERROR( … , "" )
・元号が間違っている
・数字以外が入っている
⇒エラー表示は出さずに空欄 にする。
方法2:元号表からXLOOKUP関数で西暦に変換(数式がシンプル)
①元号表を作る

*本来は入力表とは別シートに作るべきですが、本例ではわかりやすいように同じシート上に作成しています。
*空欄に新しい年号を入れることもできます(そんなに使う?)。

② 入力表の「元号」欄に、プルダウンリスト(リスト入力)を設定する。
Alt⇒A⇒F⇒F で「データの入力規則」が開く⇒「設定」タブをクリック⇒「入力値の種類」で「リスト」を選択⇒「元の値」欄をクリック⇒元号表の略称の部分を範囲指定⇒OK

=$I$2:$I$8

③ 「生年月日」欄に以下の数式を入れる(F3セルの場合)
=IF(
OR(C3="",D3="",E3=""),
"",
IFERROR(
DATE(
IF(C3>=100,C3,
XLOOKUP(B3,$I$2:$I$8,$J$2:$J$8,"") + C3
),
D3,
E3
),
"")
)
=IF(
OR(C3="",D3="",E3=""),
"",
IFERROR(
DATE(
IF(C3>=100,C3,
XLOOKUP(B3,$I$2:$I$8,$J$2:$J$8,"") + C3
),
D3,
E3
),
"")
)*ファイルへの貼り付け方は「方法1」と同じ(修正して数式バーへ)。
数式の説明(ザックリ)*ほぼ「方法1」と同じ
・C(年),D(月),E(日)が全て入力されているか判定
・C(年)が100以上なら西暦と判断し、そのまま使う
・C(年)が100未満なら、「元号表」に基づき、C(和暦年)を西暦年に変換(XLOOKUP関数で西暦と和暦の差分年を取り出して和暦年に足す)
・DATE関数で「年・月・日」を合体して日付を作る
・変な入力があれば、空欄にする。
やっていることは、手順1と同じです。
ただし、入力された元号のローマ数字を元に、XLOOKUP関数を使って「元号表」の「西暦差」を足して、和暦年を西暦年にしています。
「参照元のトレース」を表示してみます。

右の元号表の「元号」「西暦差」を使っていることが「見える化」されます(どう使っているかは数式を見ないとわかりませんが)。
以上です。
危険!やってはいけない!「元号」「年」「月」「日」を「&」で繋ぐ
以下の方法でも、一見、上と同じ結果に見えます。

元号(空欄なら西暦扱い)と年と月と日を「/」を挟みながら「&」で繋げています(元号と年の間は「/」なし)。
このままだと文字データ扱いなので1を掛けて数値化しています。
一見問題なさそうですが、この方法は強引なやり方です。
環境(他のパソコン)によって違う日付になってしまうおそれがあるので、業務で使うのは避けるべきです。
誤った生年月日は、誤った年齢換算等の原因になりますから、注意が必要です。
(参考)Excel の和暦→西暦変換は「環境依存」で結果が変わる
例
・PC の和暦設定
・Windows の地域設定
・Excel のバージョン
これらが 1 つでも違うと、 同じファイルでも“別の日付”になります。
実際に起きる危険
・自分の PC では「R4 → 2022」
・同僚の PC では「R4 → 1992」
・共有フォルダに置くと日付がズレる
・年齢計算がズレる
・名簿の並び順が壊れる
自分のパソコンでは正しくても“他の パソコンだと違う”のが最大の問題です。
くどいですが、自治体・公的機関のように複数端末で運用する現場では、 事故の原因になるため絶対に避けるべきです。
ちょっとマニアックですが、お役にたったでしょうか?
このシリーズ、いずれ増やしていくつもりです。
お役に立ったら♡を是非!(アカウント不要)。励みになります。 &フォローしておくと必要なときにすぐ見つかって便利です。
軽めのトラブルはこちらをどうぞ
