doodle-on-web

自分で調べたことや、仕事の中で質問されたことなどをまとめています。

【Excel】VLOOKUP結果のセルアドレスを取得したい?CELL+INDEXで解決

スポンサーリンク


【Excel】VLOOKUP結果のセルアドレスを取得したい?CELL+INDEXで解決

「VLOOKUPで値は取れたのに、そのセルの場所(アドレス)がわからない…」と詰まった経験はありませんか?

実は VLOOKUP単体ではセルアドレスを取得できません。しかし CELL関数 + INDEX+MATCH を組み合わせれば、たった1行の数式でアドレスを文字列として取得できます。

=CELL("address", INDEX(C2:C4, MATCH(102, A2:A4, 0)))
→ "$C$3"

この記事では、上記の数式の仕組みから、HYPERLINK関数を使った応用まで、実務ですぐ使えるレベルで解説します。


なぜセルアドレスが必要になるのか?

通常のLOOKUP系関数は「値」を返します。しかし以下のような場面では、値がどこにあるかという位置情報が必要になります。

  • HYPERLINK関数と組み合わせて、検索結果セルへのジャンプリンクを動的生成したい
  • ダッシュボードで「この値は〇〇シートの△△番地にあります」と表示したい
  • INDIRECT関数を使って間接参照をしたい
  • デバッグ目的で、どのセルが参照されているか確認したい

こうした用途に、これから紹介する CELL + INDEX + MATCH の組み合わせが活躍します。


CELL関数とINDEX+MATCHを最初から組み合わせて理解する

CELL関数の役割

CELL関数 は、指定したセルに関する情報を文字列で返す関数です。

=CELL(情報の種類, 参照)

情報の種類"address" を指定すると、そのセルの絶対参照アドレス(例:$B$5)を返します。

ただし、CELL関数に渡す「参照」はセル参照そのものでなければなりません。ここがポイントです。

VLOOKUPではなくINDEXを使う理由

関数 返すもの CELLと組み合わせ
VLOOKUP 値(数値・文字列) ❌ 不可
INDEX セル参照 ✅ 可能
XLOOKUP セル参照 ✅ 可能

VLOOKUPは「値」しか返さないため、CELL("address", VLOOKUP(...)) は正しく機能しません。一方、INDEX関数はセル参照そのものを返すという特性があるため、CELLと組み合わせることができます。

基本の数式パターン

=CELL("address", INDEX(返す範囲, MATCH(検索値, 検索範囲, 0)))

具体例:商品IDから価格セルのアドレスを取得する

以下のようなデータがあるとします。

A列(商品ID) B列(商品名) C列(価格)
101 りんご 150
102 みかん 80
103 ぶどう 300

商品ID 102 の価格セル(C3)のアドレスを取得したい場合:

=CELL("address", INDEX(C2:C4, MATCH(102, A2:A4, 0)))
→ "$C$3"

数式の読み方: 1. MATCH(102, A2:A4, 0) → A列で102を検索し、行番号 2(範囲内2番目)を返す 2. INDEX(C2:C4, 2) → C列の2番目のセル(C3)へのセル参照を返す 3. CELL("address", C3)"$C$3" という文字列を返す


Excel 365/2021以降ならXLOOKUPも使える

Excel 365やExcel 2021以降では XLOOKUP でも同様のことができます。記述がシンプルになるうえ、左方向の検索にも対応しています。

=CELL("address", XLOOKUP(102, A2:A4, C2:C4))
→ "$C$3"

新しい環境であれば積極的に活用しましょう。古いバージョンとの互換性が必要な場合はINDEX+MATCHを選んでください。


応用①:HYPERLINK関数でジャンプリンクを作る

取得したアドレスをHYPERLINK関数に渡すと、クリックで該当セルに飛ぶリンクを動的に生成できます。

同一シート内へのジャンプ:

=HYPERLINK(
  "#"&CELL("address", XLOOKUP(A1, A2:A4, C2:C4)),
  "結果セルへジャンプ"
)

先頭に "#" を付けることで、同一ブック内のセルへのリンクになります。

別シートへのジャンプ:

=HYPERLINK(
  "#Sheet2!"&CELL("address", INDEX(Sheet2!C:C, MATCH(A1, Sheet2!A:A, 0))),
  "Sheet2の結果セルへジャンプ"
)

別シートの場合は "#シート名!" をアドレスの前に結合します。ダッシュボードや検索UIを作る際に非常に便利です。


応用②:シート名付きのフルアドレスを取得する ★上級

慣れてきたら挑戦してみてください。別シートのセルを参照する際に、シート名も含めた完全なアドレスを文字列として取得できます。

=MID(CELL("filename", Sheet2!A1), FIND("]", CELL("filename", Sheet2!A1))+1, 100)
& "!" &
CELL("address", INDEX(Sheet2!C:C, MATCH(A1, Sheet2!A:A, 0)))

結果例: Sheet2!$C$3

CELL("filename", ...) でブックのフルパスを取得し、] 以降のシート名部分だけをMIDで切り出して結合しています。


よくあるミスと注意点

① VLOOKUPと組み合わせても動かない

前述の通り、VLOOKUPは値しか返しません。CELL("address", VLOOKUP(...)) は期待通りに動作しないため、必ずINDEX+MATCHかXLOOKUPを使いましょう。

② CELL関数の結果が更新されないことがある

CELL関数は揮発性関数ではないため、別のセルの値を変更しても自動で再計算されない場合があります。結果が古いと感じたら F9 キーで強制再計算してください。

③ 複数行ヒットした場合は最初の行を返す

MATCHは最初にマッチした行番号を返します。検索値が複数存在するデータでは、意図した行のアドレスが返っているか必ず確認しましょう。


まとめ

方法 アドレス取得 対応バージョン
VLOOKUP + CELL ❌ 不可
INDEX + MATCH + CELL ✅ 可能 全バージョン
XLOOKUP + CELL ✅ 可能 365 / 2021以降

LOOKUP結果のセルアドレスを取得する場面は限られていますが、知っておくとダッシュボード作成・動的リンク生成・デバッグなど応用の幅が大きく広がります。

まずは以下の基本パターンを自分のシートで試してみてください。

=CELL("address", INDEX(返す範囲, MATCH(検索値, 検索範囲, 0)))

一度動作を確認できると、応用アイデアがどんどん広がっていきます!