要点(TL;DR) —
ADDRESSは行番号と列番号を受け取り、そのセル番地の テキストを返します。構文は=ADDRESS(row_num, column_num, [abs_num], [a1], [sheet_text])。=ADDRESS(1, 1)は文字列"$A$1"を返します — A1 の中身 ではありません。 これは値を取ってくる関数ではなく、ラベルを組み立てる関数です。abs_num引数は$ロックを制御し(1=$A$1、4=A1)、sheet_textはシート名を前に付けます。INDIRECTやOFFSETと違い、ADDRESSは揮発性では ありません — 純粋な文字列の算術です。名前を付けたセルを実際に読むには、 包んでください:=INDIRECT(ADDRESS(...))。
=ADDRESS(3, 2) ' -> "$B$3" (テキスト、B3 の値ではない)
=ADDRESS(3, 2, 4) ' -> "B3" (相対、$ ロックなし)
=ADDRESS(MATCH(x, A:A, 0), 1) ' -> A 列で x がある位置の番地
ADDRESS は参照組み立てファミリーの中の異端児です。INDIRECT は文字列を参照
へ 変え、OFFSET は参照 へ 動きます。ADDRESS は逆方向へ進みます —
素の行番号と列番号から番地のテキストを生み出します。そのためニッチであり、
値を返すと期待する人にありふれて誤解されます。このガイドはそれを解きほぐし、
誰も覚えていない $ ロックの引数を示し、実際に一席を勝ち取るわずかな仕事について
率直に述べます。
このガイドで学べること
- 考え方の軸: 数値を入れると番地の文字列が出る(読み取りの逆)
- 最大の誤解: 返すのはテキストであって、セルの値ではない
abs_num引数 —$A$1対A$1対$A1対A1の制御- なぜ
ADDRESSは揮発性でないのか(そしてそれが心地よい対比な理由) - 本当の用途: どこに 値があるかを報告する、
INDIRECTに渡す - 率直な判断:
ADDRESSがほとんど必要ないとき
考え方の軸: 行番号と列番号を入れると、ラベルが出る
これまでの関数はどれもセルを 読んで きました。ADDRESS はもっと狭く、
もっと機械的なことをします。行番号と列番号を与えると、その位置を
記述する テキストを組み立てます。
=ADDRESS(1, 1) ' -> "$A$1"
=ADDRESS(10, 3) ' -> "$C$10"
=ADDRESS(5, 27) ' -> "$AA$5" (27 列目 = AA — 文字への変換をやってくれる)
本当に役立つ唯一のことは、この列番号から列文字への変換です。27 列目が AA、
53 列目が BA だと知るのは手作業では面倒で、ADDRESS はそれをただやってくれます。
それ以外は、Excel の番地文法を話す文字列ジェネレーターと考えてください —
それ以上ではありません。
誰もがつまずく誤解
これを一度読めば、もう半日を無駄にすることはありません。ADDRESS は
テキストを返すのであって、値を返すのではない。 =ADDRESS(1,1) は
6 文字の "$A$1" を与えます — セルにそう入力したのと同じです。A1 の中を
覗きません。
=ADDRESS(1, 1) ' -> "$A$1" (文字列)
=INDIRECT(ADDRESS(1, 1)) ' -> A1 の実際の中身
ADDRESS が組み立てた番地を、それが指すものへ変えるには、
INDIRECT に手渡さなければなりません。
それがテキストを生きた参照に変える関数です。この組み合わせ —
INDIRECT(ADDRESS(...)) — こそ、ADDRESS が数式に現れる最も一般的な理由です。
ADDRESS がデータを取ってくると期待している自分に気づいたら、あなたが欲しいのは
別の関数です。
abs_num 引数: どの部分がロックされるか
第 3 引数 abs_num は、文字列に $ 記号がいくつ入るかを決めます —
参照上で F4 を押して得られるのと同じ絶対/相対のロックです。
=ADDRESS(3, 2, 1) ' -> "$B$3" (1 = 完全な絶対 — 既定)
=ADDRESS(3, 2, 2) ' -> "B$3" (2 = 行ロック、列は相対)
=ADDRESS(3, 2, 3) ' -> "$B3" (3 = 列ロック、行は相対)
=ADDRESS(3, 2, 4) ' -> "B3" (4 = 完全な相対)
さらに 2 つの省略可能な引数が文字列を仕上げます。a1(既定は A1 形式の TRUE。
FALSE は "R3C2" のような R1C1 を返す)、そして sheet_text はシート名を
前に付けます — =ADDRESS(3, 2, 1, TRUE, "Sheet2") は "Sheet2!$B$3" を返します。
そのシート修飾された形こそ、まさに次に INDIRECT へ渡すような文字列です。
なぜ ADDRESS は揮発性でないのか(そしてなぜそれが重要か)
参照組み立てファミリーを結びつける、きれいな対比があります。INDIRECT と
OFFSET は揮発性です — 何に解決されるか Excel が予測できないため、
編集のたびに再計算します。ADDRESS はまったく揮発性ではありません。
生きた参照には決して触れず、数値の算術をして文字を返すだけです。=ADDRESS(5, 3)
は "$C$5" であり、ブックに何があろうと常にそうです。
実務的な結論。ADDRESS は単独では無料です — パフォーマンスの代償なしに好きなだけ
使えます。揮発性が入り込むのは、セルを読むために INDIRECT で包んだときだけです。
だから ラベル だけが必要なら — 「最大値はセル $C$5 にあります」という報告など
— ADDRESS 単独なら安く静かなままです。
ADDRESS が得意な本当の仕事
正当化する 2 つのパターン、そして率直な「まあそれくらい」が 1 つ。
' 1) 値が何かだけでなく、どこにあるかを報告する(MATCH と組み合わせる)
=ADDRESS(MATCH(MAX(B:B), B:B, 0), 2) ' -> B 列で最大値の番地
' 2) INDIRECT に渡すシート修飾された参照文字列を組み立てる
=INDIRECT(ADDRESS(row, col, 1, TRUE, SheetName))
- 「どのセルにこれが入っている?」 —
MATCHは 位置(数値)を与え、ADDRESSはその位置を人間が読める番地に変えます。監査や QA のシートで、 人をある場所に指し示す必要があるときに役立ちます: 「最大の差異: セル $C$5」。 INDIRECT用の動的な参照文字列 — すでに行番号と列番号を計算しているなら、ADDRESSは$ロックとシート名を含め、INDIRECTが必要とする正確なテキストを 組み立てます。
判断の分かれ目: あなたはたぶん ADDRESS を必要としない
率直な見解。ADDRESS は 3 つの中で最も飛ばしてよい関数です。 現代の Excel では、
人がこれで答えようとする問いには、たいていもっときれいな答えがあります。
- 「この位置の値をちょうだい」 →
INDEXまたはXLOOKUPが値を直接返します。 文字列 →INDIRECTの往復も揮発性もありません。 - 「この値はどこ?」 → 下流の数式が実際に必要とするのは、しばしば
MATCH単独(行番号)だけです。人間が読める$C$5を組み立てる価値があるのは、 人 がそれを読まなければならないときだけです。 - 「列番号を文字に変換する」 → これが
ADDRESSが唯一独自にうまくやる小さな 仕事で、通常は=SUBSTITUTE(ADDRESS(1, col, 4), "1", "")で行を取り除きます。
だから ADDRESS は、番地をテキストとして特に必要とするときに使ってください
— 人が読む報告のため、または INDIRECT 参照の文字列側として。それ以外は
INDEX/XLOOKUP/MATCH が、文字列を経由する遠回りなしにたどり着かせてくれます。
それを知っていれば、たった 1 つの INDEX で済むところに、脆い
INDIRECT(ADDRESS(...)) の塔を建てずに済みます。
ExcelMaster はどう役立つか
ADDRESS は、たいてい一段だけ賢すぎる数式に現れます — INDEX や XLOOKUP なら
まっすぐ読み通せるところに立った INDIRECT(ADDRESS(MATCH(...))) の積み重ねです。
ExcelMaster は意図 — 値を見つける、それがどのセルにあるか報告する、
計算した位置から読む — を認識し、直接的な版を書きます。値が欲しいなら
XLOOKUP/INDEX、番地をラベルとして本当に必要とするときにだけ MATCH 付きの
ADDRESS を。あなたは、次の人が実際に読める、より短く非揮発性の数式に
たどり着きます。
よくある質問
Excel の ADDRESS 関数は何を返しますか?
行番号と列番号から組み立てたセル番地のテキストです。=ADDRESS(1,1) は
文字列 "$A$1" を返します — A1 の値ではありません。名前を付けたセルを読むには、
INDIRECT で包みます: =INDIRECT(ADDRESS(1,1))。
ADDRESS が返す番地から値を取得するには?
ADDRESS はテキストを組み立てるだけで、INDIRECT がそのテキストを生きた参照に
変えます。組み合わせます: =INDIRECT(ADDRESS(row, col))。ただし現代の Excel では、
INDEX(range, row, col) がたいてい往復も揮発性もなしに値を直接取得します。
abs_num 引数は何をしますか?
返される文字列の $ ロックを制御します: 1 = $A$1(絶対、既定)、
2 = A$1(行ロック)、3 = $A1(列ロック)、4 = A1(相対)。
参照上で F4 を押したときの動きを映しています。
ADDRESS は INDIRECT や OFFSET のように揮発性ですか?
いいえ。ADDRESS は揮発性ではありません — 数値の算術をしてテキストを
返すだけなので、余分な再計算を決して引き起こしません。揮発性が現れるのは、
セルを実際に読むために INDIRECT で包んだときだけです。
ある値のセル番地を見つけるには?
ADDRESS を MATCH と組み合わせます: =ADDRESS(MATCH(value, A:A, 0), 1) は
A 列における value の番地を返します。下流の数式が位置(人間が読める番地ではなく)
だけを必要とするなら、MATCH 単独で十分です。
検証環境
検証環境: Excel 365 (Windows 11) — 最終確認 2026-07-01。
関連ガイド: Excel INDIRECT · Excel OFFSET · Excel XLOOKUP · Excel FILTER · Excel SUMIFS
