ADDRESS関数は、行番号と列番号から「$E$7」のようなセル番地を文字で作る関数です。「5行目・4列目のセル」のように位置を計算で求めたいとき、最大値がどのセルにあるかを知りたいとき、列番号を「AB」のような列の文字に直したいときに使います。
注意したいのは、ADDRESS が返すのは番地の文字だけで、そのセルの値ではないことです。値を取り出すには INDIRECT 関数と組み合わせます。この記事では、書き方と引数の違い、INDIRECT との組み合わせ、よく使う場面、エラーになるときの直し方まで、実際の Excel の画面で説明します。
ADDRESS関数の書き方(構文)
=ADDRESS(行番号, 列番号, [参照の種類], [参照形式], [シート名])
| 引数 | 意味 |
|---|---|
| 行番号 | 何行目か(1 以上) |
| 列番号 | 何列目か(1 以上。A 列が 1、B 列が 2) |
| 参照の種類(省略可) | 1=$B$1(絶対参照)、2=B$1(行だけ絶対)、3=$B1(列だけ絶対)、4=B1(相対参照)。省略すると 1 |
| 参照形式(省略可) | TRUE または省略で A1 形式、FALSE で R1C1 形式 |
| シート名(省略可) | 指定すると「Sheet2!$B$1」のようにシート名つきになる |
ADDRESS はどのバージョンの Excel でも使えます。
基本の使い方:九九表の答えのセルを探す
九九表(B3:J11)から、かけられる数(A14)とかける数(D14)の位置にあるセルの番地を作り、その値を取り出します。九九表は 3 行目・B 列から始まるので、行番号は「かけられる数 + 2」、列番号は「かける数 + 1」です。
=ADDRESS(A14+2,D14+1)

5 と 4 なら 7 行目・5 列目なので、G14 は $E$7 になりました(②)。この番地の値を J14 の =INDIRECT(G14) で取り出すと、5×4 の答え 20 です(③)。7 と 8 にすると $I$9 と 56 になりました(INDIRECT関数の使い方)。
まず動かしてみよう|この記事のサンプルをその場で試せます
ブラウザの上で ADDRESS 関数を試せます。「ADDRESS(練習ファイル)」は九九表の中から、かけられる数(A14)とかける数(D14)の位置のセル番地を作り(G14)、INDIRECT でその答えを取り出します(J14)。「ADDRESS(引数の違い)」では3〜5つ目の引数による違いを確かめられます。練習用ファイルの「九九表」「引数の違い」シートと同じ表です。
3〜5つ目の引数で番地の形を変える

| 式 | 結果 |
|---|---|
=ADDRESS(1,2) | $B$1 |
=ADDRESS(1,2,2) | B$1 |
=ADDRESS(1,2,3) | $B1 |
=ADDRESS(1,2,4) | B1 |
=ADDRESS(1,2,1,FALSE) | R1C2 |
=ADDRESS(1,2,1,TRUE,"Sheet2") | Sheet2!$B$1 |
3つ目で $ の付き方が変わり(①)、4つ目を FALSE にすると R1C1 形式(②)、5つ目にシート名を入れるとシート名つきの番地になりました(③)。ふつうは省略して $B$1 の形で使います。
ADDRESS関数のよく使う場面

| やりたいこと | 式 | 結果 |
|---|---|---|
| 最高点がどのセルか知る | =ADDRESS(MATCH(MAX(B2:B6),B2:B6,0)+1,2) | $B$4 |
| 列番号を列の文字に変える | =SUBSTITUTE(ADDRESS(1,28,4),"1","") | AB |
| 最後のデータのセル番地 | =ADDRESS(COUNTA(A:A),1,4) | A6 |
| 範囲の番地を作る | =ADDRESS(2,1,4)&":"&ADDRESS(6,2,4) | A2:B6 |
MATCH で最高点(95)が何番目かを調べ、見出しの1行分を足して行番号にすると、セル番地 $B$4 が分かりました(①)。28 列目は「AB1」から「1」を消して AB です(②)。作った範囲の番地を INDIRECT に渡すと、=SUM(INDIRECT(ADDRESS(3,2)&":"&ADDRESS(3,10))) で九九表の1の段の合計 45 のように、計算した範囲を集計できます。
よくある間違い

| 症状 | 考えられる原因 | 対処 |
|---|---|---|
| 値ではなく「$A$2」と表示される | ADDRESS は番地の文字を返す関数 | INDIRECT で囲んで値を取り出す。 |
| #VALUE! になる | ADDRESS の結果に足し算した/列番号が 0 | 値は INDIRECT で取り出してから計算する。行・列は 1 以上にする。 |
| #VALUE! になる | 列番号が 16,385 以上・行番号が 1,048,577 以上 | Excel の最大(XFD 列・1,048,576 行)を超えないようにする。 |
| シート名が違って #REF! | INDIRECT に渡した番地のシートが無い | シート名のつづりを確かめる。 |
試したところ、=ADDRESS(2,1)+1 と列番号 0 は #VALUE! でした(③)。=ADDRESS(1,16384) は $XFD$1 で、16385 列目は #VALUE! です。
よくある質問
逆に、セルから行番号・列番号を求めるには?
ROW 関数・COLUMN 関数を使います(COLUMN関数の使い方)。
値で探したセルの番地を知る別の方法は?
CELL 関数でも番地が分かります。=CELL("address",INDEX(B3:J11,5,4)) は $E$7 で、ADDRESS の結果と同じでした。
INDIRECT を使わずに位置で値を取り出せますか?
INDEX 関数なら、番地の文字を作らずに行と列の位置で値を取り出せます。=INDEX(B3:J11,5,4) は 20 です。INDIRECT はシートを変更するたびに計算し直すので、大きな表では INDEX のほうが軽くなります。

コメント