XLOOKUPで#NAME?エラーになる原因|古いExcelとの互換性と代替案

本記事にはプロモーション(アフィリエイトリンク)を含みます。

XLOOKUPを使ったファイルを共有した

最新機能へのアップデートは、往々にして一人で抱えた作業となりがちです。私自身、Microsoft 365の恩恵を最大限に活用しました。これまで苦労していたVLOOKUPの制限がありました。それをXLOOKUPで鮮やかに突破したのです。数式の簡潔さに驚きました。検索列の左側を参照できる利便性にも酔いしれました。数万行のマスターデータを完成させた、その日のことです。ファイルを共有フォルダに格納しました。チャットで「修正完了です」と送りました。その数分後です。部長が私のデスクにやってきました。

部長は無言で私の画面を見ていました。ご自身のノートPCも交互に見ています。その姿に、嫌な予感がしたものです。

#NAME?が出たときに確認すること

部長の画面には、私が苦労して組んだはずの数式がありませんでした。無慈悲な「#NAME?」というエラーがずらりと並んでいたのです。最新のExcelを使っていれば、何の問題もない計算式でした。ですが、数年前の古いデスクトップ版Excel上では異物として扱われていました。部長は冷ややかに問いかけました。『昨日までは動いていたものが、なぜ今日は壊れているのですか』と。私は言葉に詰まってしまいました。最新の技術を取り入れたはずの私です。しかし、組織の標準環境から取り残されていた事実に気づいた瞬間でした。

この「#NAME?」の嵐を初めて見ました。自分のPCが壊れたのかと、かなり焦った記憶があります。

XLOOKUPが使えるExcelの範囲

古いバージョンのExcelでXLOOKUPが認識されず、#NAME?エラーが散乱している画面

XLOOKUP関数はMicrosoft 365やExcel 2021以降で導入されました。非常に強力な関数です。VLOOKUPには検索範囲の制約がありました。列番号指定も煩雑です。XLOOKUPはこれらの問題を一掃する、革命的な存在です。しかし、古いバージョンではこの機能は認識されません。Excelの構造上、避けられない問題のようです。

具体的には、XLOOKUPが含まれるファイルを開きます。すると、プログラム側は関数名を見つけられません。結果として、計算結果の代わりに「#NAME?」というエラーが表示されます。さらに厄介な点も見つかりました。数式バーを覗くと、見慣れない「_xlfn.」という文字列が付加されています。これは本来の数式の前にあるものです。これはExcelが『自分には解読できない新しい機能が含まれている』と判断した際に、自動で挿入する接頭辞です。

Excel 2019以前の環境でXLOOKUPが含まれるファイルを開くと、エラーが発生します。残念ながらその確率は100%です。例外はありません。

この「_xlfn.」が付いた時点で、そのセルは二度と計算結果を返しません。つまり、最新機能でスマートなコードを書いても無意味です。受け取り手の環境が対応していなければ、機能しません。

INDEXとMATCHへ置き換える

互換性のない関数を開いた際に数式バーに表示される_xlfn.プレフィックスの例

XLOOKUPが使えなくても、機能の劣るVLOOKUPに戻る必要はありません。古い環境でも高い柔軟性を維持できます。それは「INDEX」と「MATCH」の組み合わせです。多くのバージョンで動作します。これは、プログラマーの間でも古くから愛用されている定番のメソッドです。

INDEX関数は配列内の指定された行と列にある値を返します。MATCH関数は指定された値が範囲内のどの位置にあるかを特定する関数です。この二つを組み合わせると、データを自由自在に取得できるようになります。検索対象の列が検索値の左側にあっても大丈夫です。XLOOKUPが登場するずっと前から、この手法は確立されています。Excelの限界を突破する技術としてです。

INDEX/MATCH関数を使えば、VLOOKUPの弱点を解消できます。それは「検索列より左側のデータが拾えない」という制約です。

なぜINDEXとMATCHが最強の代替手段と言えるのでしょうか。Excel 2007以降の非常に古いバージョンでも問題なく動作するためです。一度この式を覚えてしまえば、心配はいりません。自分がどの会社に行こうと、計算式が壊れる心配はありません。あるいは相手がどのバージョンのExcelを使っていても大丈夫です。

共有前に互換性を確認する

XLOOKUPの代替として機能するINDEX関数とMATCH関数を組み合わせた数式の例

ファイルを送信する前の「ひと手間」は大切です。それが自分と相手を無駄な時間から救ってくれます。Excelには「互換性チェック」という機能が標準で搭載されています。これは非常に優秀な機能です。この手順を習慣化するだけで、エラーを未然に防ぎやすくなります。

手順は以下の通りです。まず、「ファイル」タブをクリックし、「情報」を選択します。次に「問題のチェック」という項目を展開します。「互換性チェック」を選択してください。これだけで、現在のファイルに含まれる機能の互換性が確認できます。古いバージョンのExcelで正しく動作するかどうか。一覧で確認できる仕組みです。XLOOKUPが含まれていれば、赤字で警告が通知されます。内容は「この機能は以前のバージョンでは使用できません」というものです。

この作業を毎回行うのは面倒だと感じるかもしれません。しかし、エラーを修正するのに数時間かかります。一方、送信前のチェックはわずか30秒です。どちらが生産的かは明白でしょう。自分一人のPC環境を絶対視してはいけません。常に相手の視点に立ちましょう、環境のゆらぎを前提として設計することが大切です。それがトラブルを防ぐ唯一の防波堤となります。

Excelで解決できない場合の選択肢

Excelの互換性チェック機能でサポートされていない機能が警告されている画面

Excelのバージョン問題に振り回される現実に、終止符を打ちませんか。どれだけ関数を極めても、自分のツールが「壊れる」リスクは常にあります。Officeのアップグレードサイクルや、組織の保守的な判断が影響するためです。そこで、Excelの閉じた世界から一歩踏み出しましょう。Pythonによるデータ処理という外の世界に目を向けてみてください。

PythonのPandasライブラリを使えば、Excelのバージョンは気になりません。Pandasはデータを取り込み、加工します。再出力するまでのプロセスも、OSやOfficeのバージョンに左右されずに実行可能です。一度プログラムを書いてしまえば、もう悩むことはありません。環境の違いによる「#NAME?」エラーからは解放されます。

以前、複雑なマクロと関数でガチガチに固めていたExcel業務がありました。思い切ってPython(Pandas)に置き換えたことがあります。すると、あれほど悩まされていたバージョン問題は嘘のように消え去りました。スクリプトさえあれば、どんなPCでも全く同じ結果が出ます。自動化の本当の楽園は、Excelの外にあるのかもしれないと気づきました。

Pythonを検討する前に整理する

『このファイル、壊れてるよ、』、この衝撃は、XLOOKUPの問題だけではありませんでした。私はその後も、Excelのバージョン問題で何度も頭を抱えることになりました。例えば、最新版のExcelで作成したPower Queryの機能は、古いバージョンの同僚のPCでは全く動きません。あるいはマクロの参照設定は、環境によって異なります。頻繁にエラーを吐き出しました。自分のPCでは完璧に動くはずのシートでした。それが誰かのPCで開いた途端に「壊れる」現象が起きました。

私にとって大きなストレスだったのです。

『どうして私だけこんなにトラブルに巻き込まれるのだろう』、そう悩んだ時期があります。しかし、それは私のPC環境を絶対的なものと捉えていたからです。『最新のExcel』という認識でした。組織全体の標準環境を軽視していたと、後になって気づかされました。会社によっては、OSのバージョンアップやOfficeの更新に慎重なところが多いです。セキュリティや互換性の観点から、あえて古いバージョンを使い続けているケースも珍しくありません。私の会社もまさにその典型です。

部署によってExcel 2016とMicrosoft 365が混在している状況でした。

対応するExcelを確認する

このような環境で、自分だけが最新機能を駆使して効率化を図ろうとすると、壁にぶつかります。

Excelのバージョン問題に悩まされ続けました。私がPythonに目を向けたのは、「環境に依存しない」という特性に惹かれたためです。プログラミングの「プ」の字も知らなかった私です。新しい言語を学ぶことは大きな挑戦でした。Excelで抱えていた課題を根本的に解決できるかもしれない、この期待がありました。それが私の学習意欲を掻き立てたのです。実際にPythonを学び始めました。すると、その期待は確信へと変わっていったのです。

PythonのPandasライブラリを使えば、Excelファイルを読み込みます。データ加工も同じ流れです。そして新しいExcelファイルとして出力します。この作業が、驚くほど簡単になりました。さらに安定して実行できることに気づきました。数万行のデータをVLOOKUPやXLOOKUPで処理すると、ファイルが重くなることがあります。計算に時間がかかる場面も多かったです。挙句の果てには「#NAME?」エラーで壊れてしまうこともあります。常に不安がつきまとっていました。

しかし、Pythonで同じ処理を行うと、スムーズに進みます。まるで魔法のようです。しかも、一度書いたスクリプトは、私のPCでも同僚のPCでも、あるいはサーバー上でも、全く同じ結果を返してくれるのです。

置き換え後に確認する

=XLOOKUP(A2,商品一覧!$A:$A,商品一覧!$D:$D,"該当なし")
=INDEX(商品一覧!$D:$D,MATCH(A2,商品一覧!$A:$A,0))

この「どこでも動く」という安定感こそが、私にはとても大きく見えました。もちろん、いきなり全部をPythonへ置き換える必要はありません。最初は、Excelで壊れやすい部分だけを外に出すくらいで十分です。たとえば、互換性が怪しい関数を使う前に、対象者のExcel環境を確認します。古いPCが残っている部署では、INDEXとMATCHで逃げる選択もありました。

それでも毎月同じ照合作業や集計作業で詰まるなら、Pythonで別ファイルとして処理する道があります。私の場合も、最初からきれいな設計はできませんでした。小さなCSVを読み込み、結果をExcelへ戻すだけの処理から始めました。それだけでも、関数の互換性に振り回される時間はかなり減ります。

小さく試して、壊れにくい形を選ぶことが大切だと感じました。

実際に使う前の確認項目

共有前には、相手のExcelのバージョン、XLOOKUPの使用箇所、代替式へ置き換えた場合の結果を確認します。複数人で使うファイルなら、数式を作った人の環境だけで動作確認を終えないことが大切です。

INDEXとMATCHに置き換えても、参照範囲や完全一致の指定を間違えると別の結果になります。置き換え後は、先頭・途中・末尾のデータを数件選び、XLOOKUPと同じ結果になるか確認してください。

関連リンクとチェックリスト

無料プレゼント

Excel業務を自動化する前に確認するチェックリスト(PDF)

自動化していい作業かどうか、VBAかPythonか、最初に避けるべき落とし穴。実務でよく迷うポイントを1枚にまとめました。メールアドレスだけで受け取れます。

無料でチェックリストを受け取る

¥980 ミニキット

コピペで動かせる3スクリプト+自動化チェックリスト

最新ファイルの自動選択・部署名ゆれの正規化・CSV文字コード確認の3本セット。今週の作業を1つだけ楽にするための最小キットです。

ミニキットを見る(¥980)

学習サービスとアンケート

たった1秒で仕事が片づく Excel自動化の教科書

関数まわりを底上げしたい方へ

たった1秒で仕事が片づく Excel自動化の教科書

吉田 拳・著。XLOOKUPやバージョン差による関数エラーに振り回されないよう、Excelの土台を整理し直したい方に。

Amazonで見る → 楽天で見る →

※Amazon/楽天のアフィリエイトリンクを含みます

このスキルを活かしてさらに前へ進むなら

Excel関数の互換性問題を入り口に、Pythonでのデータ処理まで視野を広げたい方には「Udemy」の動画講座が選択肢です。現役の実務者が作った講座が多く、セール期間なら手頃な価格で始められます。自分の場合は、まず1本だけ買って週末に少しずつ進めるやり方が続けやすかったです。

UdemyでExcel・Python講座を見てみる →

[アンケート] この記事は役に立ちましたか?

30秒で答えられます。改善の参考にします。

1問だけ回答する