CSVデータや基幹システムから出力されたファイルをExcelで開いたとき、
生年月日が「19870512」のような yyyymmdd形式 になっていて、
そのままでは年齢計算ができず困った経験はありませんか。
一見すると日付に見えるこの値も、Excel上では
「ただの文字列」や「数値」
として扱われていることが多く、通常の年齢計算式が正しく動かない原因になります。
本記事では、
・yyyymmdd形式が年齢計算できない理由
・関数だけで安全に日付へ変換する方法
・実務でつまずきやすい注意点
を、背景から順を追って解説します。
目次
- ✅ 「yyyymmdd」形式が年齢計算できない理由
- ・文字列・数値として扱われている
- ・表示形式を変えても解決しない
- ✅ 関数だけで「yyyymmdd」を日付に変換する方法
- ・LEFT / MID / RIGHT を使う基本パターン
- ・なぜこの方法が安全なのか
- ✅ 日付に変換した後の年齢計算方法
- ・DATEDIF関数を使う場合
- ✅ DATEDIFを使わない年齢計算の考え方
- ・YEAR関数とIF関数を使う方法
- ・この方法が実務向きな理由
- ✅ yyyymmdd形式でよくある実務トラブル
- ・先頭の0が消える
- ・基準日がTODAY関数になっている
- ✅ VBAを使う場合の考え方(補足)
- ✅ まとめ:「yyyymmdd」形式でも年齢計算は可能
✅ 「yyyymmdd」形式が年齢計算できない理由
この形式の最大の落とし穴は、
Excelが日付として認識していない
という点にあります。
見た目が日付でも、中身は日付ではありません。
・文字列・数値として扱われている
「19870512」は、Excelから見ると
・単なる数値
・または文字列
です。
そのため、DATEDIF関数やYEAR関数を使っても、
正しい年齢が計算できなかったり、エラーになったりします。
・表示形式を変えても解決しない
セルの表示形式を「日付」に変更しても、
中身が日付に変換されていなければ意味はありません。
この違いを理解していないと、
「なぜ計算できないのか分からない」
状態に陥りやすくなります。
✅ 関数だけで「yyyymmdd」を日付に変換する方法
まずは、yyyymmdd形式を正しい日付データに変換する必要があります。
・LEFT / MID / RIGHT を使う基本パターン
A2セルに「yyyymmdd」が入っている場合、
以下のように分解します。
- 年:LEFT(A2,4)
- 月:MID(A2,5,2)
- 日:RIGHT(A2,2)
これをDATE関数でまとめることで、
Excelが認識できる日付になります。
=DATE(LEFT(A2,4), MID(A2,5,2), RIGHT(A2,2))
・なぜこの方法が安全なのか
・関数の動きが分かりやすい
・文字列/数値どちらでも対応できる
・環境差が出にくい
実務で扱うデータほど、
「誰が見ても理解できる式」であることが重要です。
✅ 日付に変換した後の年齢計算方法
日付に変換できたら、年齢計算自体は難しくありません。
・DATEDIF関数を使う場合
変換後の日付セルを使って、
=DATEDIF(生年月日, 基準日, "Y")
とすれば、満年齢が求められます。
ただし、DATEDIF関数は一覧に表示されず、
知らない人には分かりにくい点に注意が必要です。
✅ DATEDIFを使わない年齢計算の考え方
実務では、DATEDIFを使わない方法を選ぶケースも少なくありません。
・YEAR関数とIF関数を使う方法
考え方は次の通りです。
- 基準年 − 生まれた年
- 誕生日を迎えていなければ −1
式にすると、
=YEAR(基準日) - YEAR(生年月日)
- IF(TEXT(基準日,"MMDD") < TEXT(生年月日,"MMDD"), 1, 0)
となります。
・この方法が実務向きな理由
・使っている関数がすべて一般的
・計算ロジックを説明しやすい
・引き継ぎ時に困らない
「動くかどうか」だけでなく、
「理解されるかどうか」も重要な判断軸です。
✅ yyyymmdd形式でよくある実務トラブル
・先頭の0が消える
「19990305」が
「199935」
のように見えるケースは、文字列管理ができていないサインです。
CSV取り込み時点で、
文字列として扱うかどうか
を意識する必要があります。
yyyymmdd形式のデータで先頭の0が消える問題は、
年齢計算以前に「Excelが数値として扱っている」ことが原因です。
先頭の0を含めて正しく表示・管理する方法や、
ゼロが消えないようにする実務上の対策については、
「【Excel】「0」を正しく表示する方法【先頭の0・ゼロのみ・非表示回避など実用テクニック】」
で詳しく解説しています。
・基準日がTODAY関数になっている
年齢を自動更新したい場合は便利ですが、
帳票用途では「いつ時点の年齢か分からない」
Excelになりがちです。
基準日をセルで明示する設計も検討しましょう。
TODAY関数を使えば、年齢を自動で更新することができますが、
基準日が日々変わるという特性を理解していないと、
「いつ時点の年齢なのか分からない」Excelになりがちです。
TODAY関数を使った年齢計算の仕組みや、
自動更新が向いているケース・向いていないケースについては、
「【Excel】TODAY関数を使って年齢を自動計算する方法【生年月日からカンタン算出】」
で詳しく解説しています。
✅ VBAを使う場合の考え方(補足)
関数だけで対応できますが、
処理件数が多い場合や、
毎回同じ変換を繰り返す場合は、VBAでの一括変換も選択肢になります。
VBA側で
・yyyymmdd → 日付変換
・基準日を統一
しておくことで、
関数をシンプルに保つことも可能です。
✅ まとめ:「yyyymmdd」形式でも年齢計算は可能
- yyyymmdd形式は、そのままでは日付ではない
- まずDATE関数で正しい日付に変換する
- 変換後に年齢計算を行うのが基本
- DATEDIFに頼らない設計も実務では有効
yyyymmdd形式のデータは、
「変換してから使う」
という一手間をかけるだけで、Excelは格段に扱いやすくなります。
年齢計算ができない原因を
「関数が悪い」と思う前に、
データの正体を確認する視点を持つことが、
Excelを安全に使い続けるコツです。