Excel YEAR関数なしで「年」を計算する方法

Excel YEAR関数なしで「年」を計算する方法 Excel

本記事では、無料のWeb版Excelを使用して検証および画像の作成を行っています。Windowsはもちろん、MacやLinuxの方もブラウザさえあれば挑戦できます!

はじめに:Excelの日付、その正体に迫る冒険へ

皆さんは、Excelで「年」を取り出したいとき、どの関数を使いますか?

そう、もちろんYEAR関数ですよね!

=YEAR("2025/9/3")

と入力すれば、「2025」が返ってくる。これはExcelを使う上での常識であり、疑う余地のない事実です。

Excel説明画像

では、もし…もしも、この絶対的な信頼を置いているYEAR関数が、今日から使用禁止になったとしたら?

そして、もっと恐ろしい質問をしましょう。

皆さんが普段目にしている「2025/9/3」という日付は、Excelにとって本当の姿ではない…と言ったら、信じますか?

今回の記事は、単なる関数パズルではありません。

Excelが時間をどのように認識しているのか、その心臓部である「シリアル値」の謎を解き明かし、さらにはExcelがひっそりと抱え続ける「歴史的なバグ」の正体にまで迫る、知的な探求の旅です。

複雑な数式を一行で書くことだけがスキルではありません。

本質を理解し、賢く準備をすることで、いかにシンプルで美しい数式にたどり着けるか。

その思考のプロセスを、一緒に楽しんでいきましょう!


そもそも「シリアル値」とは何か?

本題に入る前に、Excelの日付の「本当の姿」について、少しだけ寄り道させてください。

私たちがセルに「2025/9/3」と入力すると、画面上ではそのように見えますが、Excelの内部では、これを全く別のものとして扱っています。

それが「シリアル値」です。

Excel説明画像

シリアル値とは、簡単に言えば「基準日からの経過日数」を表すただの数値(整数)です。

Excelでは、1900年1月1日を「1」として、そこから1日経つごとに数字が1ずつ増えていきます。

  • 1900年1月1日 → シリアル値 1
  • 1900年1月2日 → シリアル値 2
  • 2025年9月3日 → シリアル値 45903

なぜこんな仕組みになっているのでしょうか?

それは、日付を「数値」として扱うことで、「Aの日付からBの日付まで何日あるか?」といった計算を、単純な引き算(例: 45910 – 45903)で簡単にできるようにするためなのです。

賢い仕組みですよね。

今回の冒険は、このExcelの基本ルールを逆手に取り、シリアル値という「ただの数字」から「年」を導き出す壮大な試みです。


今回のミッション:自らの手で「年」を計算せよ!

目指すゴール: Excelの心臓部である「シリアル値」から、YEAR関数を一切使わずに、正しい「年」を抽出するロジックを自らの手で構築する。

ルール:

  • 数式一つで解決する、という縛りは無し!
  • むしろ、作業列や参照表を好きなだけ作成してOK!
  • ゴールは、シンプルで分かりやすい数式を組み立てるために、準備(作業列参照表の工夫)をすることにあります。

さあ、準備はいいですか?未知なるシリアル値の世界へ、いざ出発です!


ステップ1:冒険の準備 – 検証フィールドを構築する

何事も、まずは準備から。

私たちのロジックが本当に正しいのかを証明するために、広大な検証フィールドを最初に作ってしまいましょう。

検証対象「シリアル値」を並べる

まず、まっさらなシートのC1セルに「シリアル値」と入力します。

今回は、シリアル値「1」から「100,000」まで、実に10万日分を検証対象としましょう。

C2セルに、以下の数式を入力してください。

=SEQUENCE(100000)

SEQUENCE関数が、1から100,000までの連続した数値を、スピル機能で一瞬にしてC列に展開してくれます。圧巻ですね!

Excel説明画像

正解(YEAR関数)を並べる

次に、私たちが目指すべき「正解」を隣に用意しておきましょう。

D1セルに「

Excel説明画像

」と入力し、D2セルに以下の数式を入力します。

=YEAR(C2)

入力したら、D2セルのフィルハンドル(右下の小さい四角)をダブルクリックして、一番下まで数式をコピーしてください。

これで、各シリアル値に対応する「正しい年」がD列に並びました。

私たちの最終目標は、このD列と寸分違わぬ結果を出すことです。

Excel説明画像

ステップ2:歴史の謎を解く – 賢者の参照表を作成する

YEAR関数を使わずに年を計算するにはどうすればいいか?

答えは、「各年が、何日あって、いつから始まるのか」という情報を持つ、完璧なカンニングペーパー(参照表)を作ることです。

さあ、ここからがこの冒険のクライマックスです!

登場する「年」をリストアップする

まずは、10万日の中に、西暦何年が登場するのかをリストアップしましょう。

H1セルに「」と入力し、H2セルに以下の数式を入力します。

=UNIQUE(D2:D100001,FALSE,FALSE)

UNIQUE関数が、D列にずらっと並んだ年から重複を取り除き、登場する年(1900, 1901, … , 2173)だけのリストを自動で作成してくれます。

Excel説明画像

各年の「日数」を計算する(歴史のバグと向き合う)

ここが最重要ポイントです。

皆さんは「うるう年」のルールをご存知ですか?

1. 西暦が4で割り切れる年は、うるう年(366日)。
2. ただし、西暦が100で割り切れる年は、平年(365日)。
3. ただし、西暦が400で割り切れる年は、うるう年(366日)。

これが現代のルールです。このルールに従うと、西暦1900年は「100で割り切れる」ので、うるう年ではなく「平年」のはずですよね?

ところが…Excelは、1900年を「うるう年」として扱ってしまうのです!

これは、大昔の表計算ソフト「Lotus 1-2-3」が抱えていたバグを、互換性のためにExcelが意図的に引き継いだ結果です。

そのため、Excelの世界では、本来存在しないはずの「1900年2月29日」(シリアル値60)が存在してしまっています。不思議ですよね?

ちなみに、この「100で割り切れる年は平年」というルールは、未来においては正しく機能します。

Excel説明画像

例えば、2100年は100で割り切れて400で割り切れないため、Excelは正しく「平年」として扱います。

バグはあくまで1900年限定です。

具体的な数式

この「歴史のバグ」を考慮に入れた上で、各年の日数を計算する数式を組み立てましょう。

I1セルに「日数」と入力し、I2セルに以下の数式を入力して、下までコピーします。

=IFS(H2=1900,366,MOD(H2,400)=0,366,MOD(H2,100)=0,365,MOD(H2,4)=0,366,TRUE,365)

このIFS関数は、上から順に条件を判定していきます。

H2=1900,366: まず最初に「もし1900年なら、366日とする」という特別ルールを設けて、歴史のバグに対応します。

MOD(H2,400)=0,366: 400で割り切れるなら366日。

MOD(H2,100)=0,365: 100で割り切れるなら365日。(これで2100年が正しく平年になります)

MOD(H2,4)=0,366: 4で割り切れるなら366日。

TRUE,365: それ以外はすべて365日。

これで、Excelのルールに則った、完璧な各年の日数リストが完成しました。

Excel説明画像

各年の「開始シリアル値」を計算する

ゴールはもうすぐです!各年の1月1日(その年の始まり)が、シリアル値でいくつになるのかを計算しましょう。

J1セルに「年開始」と入力します。

まず、基準となる1900年1月1日は、シリアル値「1」です。

J2セルに手入力で「1」と入れましょう。

Excel説明画像

1901年の始まりは、1900年の始まり(1)に、1900年の日数(366)を足せば計算できますね。つまり、累計です。

J3セルに以下の数式を入力し、下までコピーします。

=SUM(I2:J2)

この数式は、上のセル(J2)と、その左隣のセル(I2)を合計します。

Excel説明画像

これを下にコピーしていくことで、前の年の開始シリアル値に、その年の日数がどんどん足されていき、各年の開始シリアル値が計算できます。

Excel説明画像

どうです?これで私たちの手元には、「この年からこの年までは、このシリアル値から始まる」という情報が詰まった、最強の参照表が完成しました!


ステップ3:必殺技の準備 – 範囲に名前をつける

数式を組む前に、一つだけ、実務でも非常に役立つ「準備」をしましょう。

それは、セル範囲に分かりやすい「名前」をつけることです。

これにより、数式がまるで日本語のように読めるようになり、間違いも減ります。

Web版Excelでは、上部のリボンから「数式」タブ → 「ネームマネージャー」を選択します。

表示された画面で「+ 新規」をクリックし、以下の2つの名前を定義してください。

Excel説明画像

1つ目:

  • 名前:
  • 参照先: =SAMPLE!$H$2:$H$275 (シート名がSAMPLEの場合)
Excel説明画像

2つ目:

  • 名前: 年開始
  • 参照先: =SAMPLE!$J$2:$J$275

これで準備は万端。いよいよ、YEAR関数に頼らない年の抽出に挑みます!

Excel説明画像

最終章:いざ、抽出! – 驚くほどシンプルな解決策

さあ、長かった旅もいよいよ終わりです。

私たちの手元には、最強の参照表と、分かりやすい名前があります。

E1セルに「YEAR関数なし」と入力し、E2セルに、次の数式を入力しましょう。

=LOOKUP(C2,年開始,年)

入力したら、下までフィルコピーしてください。

Excel説明画像

…どうでしょう?驚くほどシンプルだと思いませんか?

これは、古くからExcelに存在する名関数、LOOKUPです。

LOOKUP関数については以下の記事で詳しく解説しています。

この数式は、Excelにこう命令しています。

「C2セルのシリアル値を、“年開始”のリストから探して。そして、見つかった場所に対応する、“年”のリストの値を教えて!」

LOOKUP関数の賢いところは、完全に一致する値がなくても、「検索値以下の、最も大きい値」を見つけてくれる点です。

例えば、シリアル値「400」を探すと、「年開始」リストの中で400以下で最も大きいのは「367」(1901年の始まり)なので、対応する「1901」を返してくれるのです。

最後の審判 – 検証

さて、この結果が本当にD列のYEAR関数と10万件すべて一致しているのか、確かめてみましょう。

どこか空いているセル(例えばA3セル)に、以下の数式を入力してみてください。

=SUM(N(D2:D100001=E2:E100001))

この数式は、D列とE列を比較し、一致していればTRUE(1)、していなければFALSE(0)を返し、その合計を計算します。

結果として「100000」が表示されれば…完全勝利です!

まとめ:複雑な問題こそ、賢い準備でシンプルに

YEAR関数を使わずに年を抽出するという難題に、見事、打ち克つことができました。

そして、その過程で、Excelの日付の正体である「シリアル値」や、歴史的な「1900年うるう年問題」についても知ることができましたね。

今回の最も重要な教訓は、これかもしれません。

複雑な問題に直面したとき、ゴールから逆算して「どんな情報があれば楽になるか?」を考え、参照表や作業列を準備するスキルは、複雑な数式を一行で書くスキルと同じくらい、あるいはそれ以上に重要である。

実務で直面する課題も、まさにこれと同じです。

今回の思考のプロセスが、皆さんのExcelライフをより豊かに、そしてより本質的なものにするための一助となれば、これほど嬉しいことはありません。

タイトルとURLをコピーしました