🚀The world's best VBA AI has evolved. ExcelMaster is now an autonomous Agent.Read more →
Back to Blog

Excel ADDRESS 関数 — セル番地を「文字列」として組み立てる(値ではない)

|

Excel ADDRESS 関数 — セル番地を「文字列」として組み立てる(値ではない)

要点(TL;DR)ADDRESS行番号と列番号を受け取り、そのセル番地の テキストを返します。構文は =ADDRESS(row_num, column_num, [abs_num], [a1], [sheet_text])=ADDRESS(1, 1) は文字列 "$A$1" を返します — A1 の中身 ではありません。 これは値を取ってくる関数ではなく、ラベルを組み立てる関数です。abs_num 引数は $ ロックを制御し(1=$A$14=A1)、sheet_text はシート名を前に付けます。 INDIRECTOFFSET と違い、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$1A$1$A1A1 の制御
  • なぜ 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 形式の TRUEFALSE"R3C2" のような R1C1 を返す)、そして sheet_text はシート名を 前に付けます — =ADDRESS(3, 2, 1, TRUE, "Sheet2")"Sheet2!$B$3" を返します。 そのシート修飾された形こそ、まさに次に INDIRECT へ渡すような文字列です。

なぜ ADDRESS は揮発性でないのか(そしてなぜそれが重要か)

参照組み立てファミリーを結びつける、きれいな対比があります。INDIRECTOFFSET揮発性です — 何に解決されるか 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 は、たいてい一段だけ賢すぎる数式に現れます — INDEXXLOOKUP なら まっすぐ読み通せるところに立った 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 で包んだときだけです。

ある値のセル番地を見つけるには?

ADDRESSMATCH と組み合わせます: =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