2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

VLOOKUPはなぜ危険なのか

Last updated at Posted at 2026-01-22

Excel の VLOOKUP は、誰もが一度は使ったことのある関数だろう。
「ID を入れたら名前が出る」「マスタから値を引いてくる」──便利で分かりやすい。

しかし同時に、こんな経験はないだろうか。

  • 昨日まで合っていたのに、今日は結果が違う
  • 数字は合っているのに、意味が合わない
  • なぜその値が出ているのか説明できない
  • 誰も触れない Excel ファイルが出来上がった

結論を先に言えば、

VLOOKUP が危険なのではない。
VLOOKUP に「やらせすぎている」ことが危険なのだ。

VLOOKUP が実際にやっていること

まず、VLOOKUP の仕様を冷静に見る。

VLOOKUP は次のことしかしていない。

  1. 指定した範囲の左端列を上から順に探す
  2. 検索値と一致した最初の行を見つける
  3. 指定した列番号の値を返す

重要なのは、VLOOKUP は次のことを 一切考慮しない 点だ。

  • キーが一意かどうか
  • 複数行が一致していないか
  • どの行が「正しい」か
  • 業務的に意味のある順序か

つまり VLOOKUP は意味を理解しない配列検索 である。

ユーザーが VLOOKUP に期待していること

一方、ユーザーの期待はこうだ。

  • 「正しいマスタ情報を取りたい」
  • 「1対1で対応しているはず」
  • 「欠損や不一致があれば気づきたい」
  • 「業務的に正しい値を返してほしい」

つまりユーザーは無意識に、

  • JOIN
  • 関係の解決
  • データ整合性の保証

を VLOOKUP に期待している。

ここに、最初のズレがある。

1対1でも VLOOKUP は安全ではない

よく言われる説明にこういうものがある。

「1対1なら VLOOKUP は問題ない」

これは 設計論としては誤り だ。

1対1は「事実」ではなく「期待」

実務で言う「1対1」は、大抵次のような意味だ。

  • そう設計した
  • そうなるはず
  • 今のところはそう見える

しかし現実には、

  • 片側にデータがない
  • キーが一致しない
  • 重複が混入する

といったことは日常的に起こる。なぜなら、ユーザーはデータを事前に検証していないからだ。

VLOOKUP は壊れた 1対1 を検出しない

1対1が壊れたとき、

  • マージ(結合)なら、欠損や重複が可視化される
  • VLOOKUP は、沈黙したまま「それっぽい値」を返す

これは データ安全性の観点で最悪 だ。

1対1を期待する処理であっても、
VLOOKUP をいきなり使うのは正しい選択ではない。

1対多で VLOOKUP が破綻する理由

1対多とは、1つのキーに複数行が対応する関係だ。

  • 顧客 → 注文
  • 商品 → 売上明細

この場合、本来の正しい答えは 集合(複数行) である。

VLOOKUP はどの値を選ぶのか?

答えはシンプルだ。

一番上にある行

これは、

  • ソート順
  • データの読み込み順
  • 偶然の配置

に依存する。

つまり、

1対多が発生した瞬間、
VLOOKUP の結果は予測不能になる。

1対多で「欲しい値」がある場合、それは必ず次のいずれかである。

  • 最新
  • 最大/最小
  • 有効フラグが立っている
  • 条件を満たすもの

これらは 業務ルール であり、データを整理・定義する工程が先に必要 である。

VLOOKUP は、この工程を代替できない。

多対多はさらに危険になる

多対多とは、両側に複数の対応がある関係だ。

  • 商品 ↔ キャンペーン
  • 社員 ↔ プロジェクト

多対多が分かりにくい理由

  • どれが代表なのか分からない
  • 中間構造が必要
  • 組み合わせ自体が意味を持つ

人間の直感に合わない構造である。

「一部だけ多対多」が最悪

特に危険なのがこのケースだ。

  • 大半は 1対1 に見える
  • しかし一部のキーだけ多対多

この場合、

  • 普段は正しく見える
  • 特定条件でだけ結果が変わる
  • 原因を説明できない

という 最悪の事故パターン になる。

検証できない処理は、

  • バグがあっても気づけない
  • レビューできない
  • 監査に耐えない

VLOOKUP は、この状況をさらに悪化させる。

多対多が見えた瞬間にすべきこと

  • 「探す」のをやめる
  • 関係を明示する
  • 中間表を作る
  • 条件を言語化する

つまり、

計算を始める前に、データ構造を確定させる

期待する結果を得るには、まずデータを整理する

1対多や多対多で「欲しい値」がある場合、それは必ず次のいずれかだ。

  • 最新
  • 最大/最小
  • 有効フラグが立っているもの
  • 条件を満たすもの

これは 業務ルール であり、
計算の問題ではない

つまり、

VLOOKUP の前に、
参照データの整理と定義が必要

である。

ユーザーが本当に理解すべきこと

ここまでの問題は、すべて一つに集約される。

関係構造を理解しないまま計算を始めている

必要なのはスタースキーマの「考え方」

難しいデータベース理論は不要だ。
理解すべきなのは、次の最小限だけでよい。

  • 数値は 事実(Fact)
  • 名前や分類は 属性(Dimension)
  • Fact から Dimension への関係は「多対一」
  • 多対多は中間構造が必要

これが、いわゆる スタースキーマの思考 である。

(Dimension から見れば 1対多だが、設計と計算の基準は常に Fact → Dimension の多対一である)

スタースキーマは「安全装置」になる

この考え方を少しでも持っていれば、

  • 「これ本当に 1対1?」と立ち止まれる
  • 「どの1件を取るの?」と考えられる
  • 「これは計算じゃない」と気づける

この 立ち止まれる感覚 が、事故を防ぐ。

まとめ:VLOOKUP を書く前に考えること

やるべきこと

  • データを Fact / Dimension に分けて考える
  • 関係が 1対1 か 1対多かを意識する
  • 多対多が見えたら計算を止める
  • 結合は前処理(マージ)で行う
  • VLOOKUP は最後の手段にする

やらなくていいこと

  • VLOOKUP の小技を極める
  • 数式で多対多をねじ伏せる
  • IFERROR で問題を隠す
  • 「たぶん大丈夫」を信じる

おわりに

VLOOKUP は間違った関数ではない。
だが、間違った期待を背負わされすぎた関数 である。

本当に重要なのは、

VLOOKUP をどう書くかではなく、
そもそも書いてよい構造かどうかを判断すること

その判断を可能にする最小限の知識が、スタースキーマという「考え方」 だ。

Excel を「計算ツール」から安全なデータ処理ツールとして使いたいなら、最初に見直すべきなのは VLOOKUP ではなく、データを理解することなのである。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?