概要
「行番号と列番号からセル番地(A1、B3 など)を文字列として作りたい」
「=R[1]C[2] みたいな“位置情報”から $B$3 を生成したい」
「行・列を計算で求めて、その結果からセル番地を組み立てたい」
こういうときに使うのが ADDRESS 関数です。
ADDRESS は
行番号+列番号 → セル番地(文字列)
に変換してくれる関数です。
INDIRECT と組み合わせると「動的参照」にも発展できます。
ここでは、ADDRESS の基本から、よく使うテンプレート、例題までを、初心者向けにかみ砕いて解説します。
ADDRESS 関数の基本
書式の確認
ADDRESS の基本形はこうです。
=ADDRESS(row_num, column_num, [abs_num], [a1], [sheet_text])
必須なのは最初の2つです。
- row_num:行番号(1,2,3,…)
- column_num:列番号(1=A列、2=B列、3=C列…)
最低限これだけ指定すれば、=ADDRESS(2,3) → 「$C$2」
のように、絶対参照のセル番地(文字列)が返ってきます。
基本パターン:行番号+列番号からセル番地を作る
例1:2行目・3列目 → $C
=ADDRESS(2,3)
結果:
$C$2
行番号 2、列番号 3(=C列)なので、「$C$2」という文字列が返ります。
例2:5行目・1列目 → $A
=ADDRESS(5,1)
結果:
$A$5
「行と列が決まっている → セル番地文字列がほしい」というときの基本中の基本です。
絶対参照・相対参照の切り替え(abs_num)
abs_num の意味
第3引数 abs_num で、参照の形式を指定できます。
1:$A$1 形式(行列とも絶対)※省略時のデフォルト
2:A$1 形式(列は相対、行は絶対)
3:$A1 形式(列は絶対、行は相対)
4:A1 形式(行列とも相対)
例:2行3列を相対参照で返したい
A1 形式(相対参照)で欲しいとき:
=ADDRESS(2,3,4)
結果:
C2
同じく、行だけ絶対・列は相対にしたいとき:
=ADDRESS(2,3,2)
結果:
C$2
列だけ絶対・行は相対にしたいとき:
=ADDRESS(2,3,3)
結果:
$C2
「コピペしたときにどこを固定したいか」に応じて、この abs_num を使い分けます。
A1形式/R1C1形式の切り替え(a1)
a1 引数の意味
第4引数 a1 には TRUE / FALSE を指定します。
- TRUE または省略:A1 参照形式(A1、C5 など)
- FALSE:R1C1 参照形式(R1C1、R5C3 など)
例:2行3列を R1C1 形式で欲しい
=ADDRESS(2,3,1,FALSE)
結果:
R2C3
R1C1 形式を使うことは多くありませんが、
マクロや一部の応用で「R×C×」形式が必要なときに使います。
シート名付きでセル番地を作る(sheet_text)
sheet_text 引数
第5引数にシート名を指定すると、
「シート名!セル番地」の形で返すことができます。
=ADDRESS(2,3,1,TRUE,"Sheet1")
結果:
Sheet1!$C$2
他シートを INDIRECT で参照したいときの元ネタとして使えます。
行番号・列番号を計算で求めてから ADDRESS する
例:指定セルと同じ行・隣の列を文字列で表す
A2 の「行番号」と「列番号+1」を使って、
「A2 の右隣のセル番地」を文字列として求めたいとします。
行番号は ROW、列番号は COLUMN で取れます。
=ADDRESS(ROW(A2), COLUMN(A2)+1)
A2 は 2行1列なので、COLUMN(A2)+1 → 2列(B列)、
結果:
$B$2
このように、ROW / COLUMN と組み合わせると、
「位置関係からセル番地文字列を動的に生成する」ことができます。
例:現在の行・固定列のセル番地を作る
例えば、
「今の行の、常に C 列のセル番地を文字列で欲しい」
という場合、行は ROW()、列は固定で 3 にします。
=ADDRESS(ROW(),3)
5 行目でこの式を使えば → $C$5
10 行目なら → $C$10
のように、行位置に応じて変わる番地文字列を作れます。
ADDRESS と INDIRECT を組み合わせて「動的参照」にする
ADDRESS は文字列を返す関数なので、
そのままでは「番地の文字」が得られるだけです。
それを実際に“セルとして参照”したいときは INDIRECT を組み合わせます。
例:行番号が A1、列番号が B1 に入っている場合
A1:2
B1:3
C1 に、A1/B1 で指定されたセルの中身を表示したいとき。
=INDIRECT(ADDRESS(A1,B1))
A1=2, B1=3 → ADDRESS(2,3) → “$C$2”
INDIRECT(“$C$2”) → C2 の値が返る、という流れです。
「行列を計算で求め → ADDRESS で文字列 → INDIRECT で参照」
この3ステップは、動的参照の定番パターンです。
問題1
2行目・3列目のセル番地を 絶対参照($C$2) の文字列で取得したいです。
ADDRESS を使った式を書いてください。
=ADDRESS(2,3)
問題2
5行目・1列目のセル番地を 相対参照(A5) の文字列で取得したいです。
ADDRESS の第3引数 abs_num を使って式を書いてください。
=ADDRESS(5,1,4)
問題3
2行目・3列目のセル番地を R1C1形式(R2C3) で文字列として取得したいです。
ADDRESS の第4引数 a1 を FALSE にして式を書いてください。
=ADDRESS(2,3,1,FALSE)
問題4
シート名「Sheet1」の 4行目・2列目のセル番地をSheet1!$B$4 という文字列で取得したいです。
ADDRESS の第5引数を使った式を書いてください。
=ADDRESS(4,2,1,TRUE,"Sheet1")
問題5
A2 の「1列右」のセル番地を文字列で取得したいです。
ROW と COLUMN を使い、ADDRESS でセル番地文字列を作る式を書いてください。
=ADDRESS(ROW(A2),COLUMN(A2)+1)
ADDRESS は
- 行番号
- 列番号
- 絶対/相対
- A1/R1C1
- シート名
といった「位置情報」をまとめてセル番地文字列にしてくれる関数です。
ROW・COLUMN・INDIRECT などと組み合わせることで、
“動的なセル参照”や“参照ラベルの表示”など、応用範囲が一気に広がります。
