LOOKUPとINDEXMATCHと

先日にちょっと話題になっていたトピック。

index matchとVlookupは大は小を兼ねる関係、Vlookupは情弱のサイン。

このアカウントの素性や、情弱なんて言葉を使って煽っているのは措いといて。
実際、VLOOKUP関数を使うか、XLOOKUP関数を使うか、あるいはINDEX関数とMATCH関数を併せて使うかは、要件によるとしか言いようがありません。

改めて説明するまでも無く、VLOOKUPとXLOOKUPとでは、圧倒的に後者が便利です。VLOOKUPだと融通が効かない部分がXLOOKUPで解消されていて、より簡潔に書けるので、使えれば使ったほうが良いでしょう。しかるに、実務的には単純に行きません。と言うのも、Excelで新しいバージョンが出て新関数が実装された場合、それが古いバージョンにも反映されるとは限らないからです。
Officeは2019も2016もサポート継続中です。業務でもまだまだ使われています。という事は、そもそもXLOOKUP関数を使用できないExcelが業務に組み込まれている可能性が充分にある訳です。これは、スピルのような新しい機能についても言えます。

INDEXとMATCHを組み合わせた実装は、汎用性が高く、2次元配列の座標を指定してデータを取り出す構造なので、解ればとても直感的です。ですが、関数を組み合わせて作るので、可読性はあまり良くありません。汎用的ではありますが、シンプルなルックアップをすれば良い場合には、むしろその実装は役不足となり得ます。つまり、これをするためにわざわざそんな何でも出来る機能を使わなくても良かろう、となるのですね。可読性は、実務上の保守性を考える際の要点です。

私が作る時には、

  • どのような機能が必要か

  • 共有するユーザーの範囲はどのくらいか

  • 誰がメンテナンスするか

  • どれくらい使い続けるか。当面の利用か長期の運用か

  • そのファイルを実行するExcelのバージョンは何があるか

などをまず考えます。簡単なルックアップがあれば良ければ、敢えてINDEXとMATCHを入れる必要はありません。ファイルを渡して、後のメンテナンスは相手がするのなら、長い数式は可読性を落とし、保守や改修を困難にするかも知れません。
もし使用するのが自社や同部署のメンバーのみであり、その組織内ではMicrosoft 365を全員が使っているのであれば、新しい機能を積極的に使います。XLOOKUPを使えば、シンプルかつ柔軟な実装が出来ます。XLOOKUPと構造化参照を使えば、だいたいの事はできます。
しかるに、別部署や顧客からの依頼であって、使用バージョンが不明確な場合は、VLOOKUPを入れたほうが安全です。法人が同一バージョン・エディションで揃えて資産運用するなど稀です。

もし、2次元配列上の座標を指定して取得するのが良く、かつ詳しい人がメンテナンスするのが判っているのであれば、INDEXとXMATCHを使うのを検討します。数式内改行とインデントを使えば、長くはなりますが可読性を上げられます。
余談ですが、私は、Excelのワークシート関数で最強レベルの関数の1つに、MATCH(とXMATCH)を挙げます。VBAでもWorksheetFunctionでそれを駆使します。

このように、実務的な観点から見れば、

  • 新しく便利な関数が出てくればそれを習って使えば事足りる

  • より汎用性の高い機能を持つ組み合わせを使えば良い

などとは全く言えません。新しい機能が搭載されているアプリケーションを使える環境を揃えて、皆がそれを習得できるようにすれば良いですが、様々の理由から、非現実的の理想論です。金を払ってアプリケーションを購入し、それを何年も使い続けてから買い替えるような組織では無理です。
大は小を兼ねる的な意見で大のほうを高級なものであるかのように言うのも当たりません。表計算ソフトは、狭い数式バーに数式を入れる仕組みなので、そこがどう見やすくなるかも重要です。色々できる長い数式を入れるよりも、作業列に分割して機能を分けて後で組み合わせたほうがはるかに扱いやすくなる事も、よくあります。業務用のツールとして作成するなら、このような観点は欠かせません。

ここから余談。
はじめに参照した意見に対して思ったのは、
INDEXとMATCHを使うのなら、範囲に名前をつけたりテーブル化して構造化参照をしないと可読性が著しく落ちるのにね、という事ですね。関数の組み合わせがどうこうの前にそちらが重要でしょうに。
さらに元の意見、VLOOKUPを象徴や指標みたいにして扱うのもどうなんだ、と思いますけれどね。皆さん色々大袈裟です。


この記事が気に入ったらサポートをしてみませんか?