目次
このチュートリアルでは、ADDRESS関数の構文を簡単に紹介し、その使い方として、Excelのセル番地などを返す方法を紹介しています。
Excelでセル参照を作成するには、列と行の座標を手入力します。 または、ADDRESS関数に入力された行と列の番号からExcelのセルアドレスを取得します。 これだけではほとんど意味がありませんが、他の関数と組み合わせると、セルを直接参照できない場合にこの手法が唯一の解決策になる場合があります。
Excel ADDRESS関数 - 構文と基本的な使用方法
ADDRESS関数は、指定された行と列の番号に基づいてExcelのセルアドレスを取得するための関数です。 セルアドレスは、実際の参照ではなく、テキスト文字列として返されます。
この機能は、Microsoft 365 - Excel 2007のすべてのバージョンのExcelで利用可能です。
ADDRESS関数のシンタックスは以下のとおりです。
ADDRESS(row_num, column_num, [abs_num], [a1], [sheet_text])最初の2つの引数は必須である。
行番号 - セル参照に使用する行番号。
列番号 - は、セル参照を構築するための列番号です。
最後の3つの引数は、セル参照形式を指定するものであり、オプションである。
abs_num - 参照タイプ、絶対または相対。 以下の数値のいずれかを取ることができ、デフォルトは絶対。
- 1 または省略 - $A$1 のような絶対セル参照
- 2 - 混合参照:A$1のような相対列と絶対列
- 3 - 混合参照:絶対列と $A1 のような相対列
- 4 - A1 のような相対的なセル参照.
a1 - 参照スタイル、A1またはR1C1。 省略された場合、デフォルトのA1スタイルが使用される。
- 1 または TRUE または省略 - 列が文字、行が数字である A1 参照スタイルで、セルのアドレスを返します。
- 0 または FALSE - R1C1 参照スタイルで、行と列が数字で表現されているセルアドレスを返します。
シートテキスト - 外部参照に含めるワークシート名。 シート名は、"Sheet2 "のように引用符で囲んだテキスト文字列で指定する。 省略するとワークシート名は使用されず、アドレスは現在のシートをデフォルトとする。
例えば、こんな感じです。
=ADDRESS(1,1)
- は、最初のセル(すなわち、最初の行と最初の列の交点にあるセル)のアドレスを絶対セル参照$A$1として返します。
=アドレス(1,1,4)
- は、最初のセルのアドレスを相対セル参照 A1 として返す。
次の表では、ADDRESS式で返すことができる、さらにいくつかの参照タイプを紹介しています。
式 | 結果 | 商品説明 |
=ADDRESS(1,2) | $B$1 | 絶対セル参照 |
=アドレス(1,2,4) | B1 | 相対セル基準 |
=アドレス(1,2,2) | B$1 | 相対列と絶対行 |
=アドレス(1,2,3) | $B1 | 絶対列と相対行 |
=アドレス(1,2,1,false) | R1C2 | R1C1方式の絶対基準 |
=アドレス(1,2,4,false) | R[1]C[2]です。 | R1C1 スタイルでの相対参照 |
=ADDRESS(1,2,1,, "Sheet2") | シート2!$B$1 | 別のシートへの絶対的な参照 |
=ADDRESS(1,2,4,, "Sheet2") | シート2!B1 | 他のシートとの相対的な参照 |
ExcelでADDRESS関数を使う方法 - 計算式の例
以下の例は、より大きな計算式の中で ADDRESS 関数を使用し、より困難な作業を行う方法を示しています。
指定された行と列のセル値を返す
行番号と列番号から特定のセルから値を取得する場合は、ADDRESS関数とINDIRECTを併用します。
INDIRECT(ADDRESS(row_num, column_num))ADDRESS関数はセルのアドレスをテキストで出力し、INDIRECT関数はそのテキストを通常のリファレンスに変換して対応するセルの値を返します。
例えば、E1の行番号とE2の列番号からセルの値を求めるには、次のような数式を使用します。
=indirect(アドレス(e1,e2))
最大値または最小値を持つセルのアドレスを取得する
この例では、まずMAX関数とMIN関数を使って範囲B2:B7で最も高い値と最も低い値を求め、それらの値を特殊なセルに出力します。
セルE2。 =MAX(B2:B7)
セルF2。 =MIN(B2:B7)です。
そして、ADDRESSとMATCH関数を組み合わせて、セルのアドレスを取得するのです。
最大値を持つセル。
=アドレス(マッチ(e2,b:b,0), カラム(b2))
最小値を持つセル。
=アドレス(マッチ(f2,b:b,0), カラム(b2))
最高値と最低値を別々のセルに入れたくない場合は、MAX/MIN関数をMATCHの第1引数にネストすることができます。 例えば、以下のようになります。
値が最も大きいセル。
=アドレス(match(max(b2:b7),b:b,0),column(b2))
値が最小のセル。
=アドレス(match(min(b2:b7),b:b,0),column(b2))
これらの計算式の仕組み
行番号を求めるには、MATCH(lookup_value, lookup_array, [match_type]) 関数を使います。 この式では、lookup value は MAX または MIN 関数が返す数値、 lookup array は列全体です。 したがって、配列内の lookup value の相対位置はシート上の行番号と正確に一致します。
もちろん、数式に直接入力してもよいのですが、COLUMNを使うと、対象となる列がシートの真ん中にある場合、手作業で列番号を数える手間を省くことができます。
列番号から列文字を取得する
任意の数値を列文字に変換するには、SUBSTITUTEの中のADDRESS関数を使用します。
substitute(アドレス(1, 列番号 ,4), "1","")例として、A2の数字に対応する列の文字を探してみましょう。
=substitute(アドレス(1,a2,4),「1」, 「」)
下の結果を見ると、シートの1列目はAで当たり前、10列目はJ、50列目はAX、100列目はCVということになりますね。
この式の仕組み
手始めに、ADDRESS関数を設定して、対象列の最初のセルへの相対参照を返すようにします。
- 行番号には1を使用します。
- 列番号には、番号を含むセル(この例ではA2)への参照を指定します。
- abs_numの引数には4を入力します。
その結果、ADDRESS(1,A2,4)はA1を返すことになります。
行座標を削除するには、上記の数式をSUBSTITUTE関数で囲み、「1」を空文字列("")に置き換えます。 完了です。
名前付き範囲のアドレスの取得
Excelで名前付き範囲のアドレスを見つけるには、まず最初と最後のセル参照を取得し、それらを結合する必要があります。 これは、プレダイナミックExcel(2019以降)とダイナミックアレイExcel(Office 365、Excel 2021)で少し異なる動作をします。 以下の例は、Excel 2019~Excel 2007の場合です。 Excel 365とExcel 2021の手順はこちらです。
範囲内の最初のセルのアドレスを取得する方法
名前付き範囲の最初のセルへの参照を返すには、次の一般的な数式を使用します。
ADDRESS(ROW()内) レンジ ),COLUMN()。 レンジ ))範囲名を「Sales」とすると、実際の計算式は次のようになります。
=ADDRESS(ROW(Sales), COLUMN(Sales))
そして、範囲内の左上のセルのアドレスを返します。
この数式では、ROW関数とCOLUMN関数がそれぞれ範囲内のすべての行番号と列番号の配列を返し、それを基にADDRESS関数がセルアドレスの配列を作成します。 しかし、この数式は1つのセルに入力されているので、配列の最初の項目(範囲内の最初のセルに対応する)だけが表示されます。
範囲内の最後のセルのアドレスを取得する方法
名前付き範囲の最後のセルのアドレスを求めるには、次の一般的な数式を使用します。
ADDRESS(ROW()内) レンジ )+ROWS( レンジ )-1,COLUMN()。 レンジ )+COLUMNS( レンジ )-1)この数式を「売上高」という範囲に適用すると、次のような形になります。
=ADDRESS(ROW(Sales) + ROWS(Sales)-1, COLUMN(Sales) + COLUMNS(Sales)-1)
そして、範囲の右下のセルへの参照を返します。
今回は、もう少し複雑な計算が必要です。 前の例と同様に、ROW 関数は、範囲内のすべての行番号(この例では {4;5;6;7} )を配列で返します。 これらの行番号を、総行数から 1 を引いた数だけ「シフト」し、配列の最初の項目が最終行番号になるようにします。 総行数を求めるために、ROWS 関数を使用しその結果から1を引くと(4-1=3)、{4;5;6;7} + 3 = {7;8;9;10} となり、初期配列の各要素に3を足してシフトさせる。
列番号も同様に計算します:{2,3,4}+3-1 = {4,5,6}
上記の行番号と列番号の配列から、ADDRESS関数はセルアドレスの配列を作成しますが、範囲内の最後のセルに対応する最初のものだけを返します。
また、行番号と列番号の配列から最大値を選ぶことでも同じ結果が得られます。 ただし、これは配列式でのみ有効で、正しく補完するためには Ctrl + Shift + Enter を押す必要があります。
=ADDRESS(MAX(ROW(Sales)), MAX(COLUMN(Sales)))
名前付き範囲のフルアドレスを取得する方法
名前付き範囲の完全なアドレスを返すには、前の例の2つの数式を連結して、その間に範囲演算子(:)を挿入するだけです。
ADDRESS(ROW()内) レンジ ), COLUMN( レンジ )) & ":" & ADDRESS(ROW( レンジ ) + ROWS( レンジ )-1, COLUMN( レンジ ) + COLUMNS( レンジ )-1)このサンプルデータセットで動作させるために、一般的な「範囲」を実際の範囲名「売上高」に置き換えています。
=ADDRESS(ROW(Sales), COLUMN(Sales)) & ":" & ADDRESS(ROW(Sales) + ROWS(Sales)-1, COLUMN(Sales) + COLUMNS(Sales)-1)
そして、完全なレンジアドレスとして取得します。 絶対 参照 $B$4:$D$7:
レンジアドレスを返すには 縁故 の参照(B4:D7のように$記号を付けない)、両方のADDRESS関数の引数abs_numを4に設定します。
=ADDRESS(ROW(Sales), COLUMN(Sales), 4) & ":" & ADDRESS(ROW(Sales) + ROWS(Sales)-1, COLUMN(Sales) + COLUMNS(Sales)-1, 4)
もちろん、同じ変更を最初と最後のセルの個々の数式で行えば、このような結果になります。
Excel 365とExcel 2021で名前付き範囲のアドレスを取得する方法
従来の「1つの数式に1つのセル」の動作とは異なり、新しいExcelでは、複数の値を返す可能性のある数式は、自動的にこれを行います。 このような動作を「スピル」と呼びます。
例えば、次の数式は、最初のセルのアドレスを返す代わりに、指定した範囲内の各セルのアドレスを出力します。
=ADDRESS(ROW(Sales), COLUMN(Sales))
のアドレスを取得するために だいいちのでんち のみ、Excel 2019以前ではデフォルトで発動する暗黙の交差を有効にする必要があります。 そのためには、範囲名の前に@記号(暗黙の交差演算子)を付けます。
=ADDRESS(@ROW(Sales), @COLUMN(Sales))
同様に、他の数式も修正することができます。
を得るために 最後のセル を範囲とする。
=ADDRESS(@ROW(Sales) + ROWS(Sales)-1, @COLUMN(Sales) + COLUMNS(Sales)-1)
を取得するために 名前付き範囲のアドレス :
=ADDRESS(@ROW(Sales), @COLUMN(Sales)) & ":" & ADDRESS(@ROW(Sales) + ROWS(Sales)-1, @COLUMN(Sales) + COLUMNS(Sales)-1)
下のスクリーンショットはその結果を示しています。
補足:旧バージョンで作成された数式を含むワークシートを動的配列Excelで開くと、Excelによって暗黙の交差演算子が自動的に挿入されます。
このチュートリアルで取り上げたすべての数式を詳しくご覧になりたい方は、以下のサンプルワークブックをダウンロードしてください。 読んでくださってありがとうございました!また来週のブログでお会いしましょう
練習用ワークブック(ダウンロード
Excel ADDRESS関数 - 計算式の例 (.xlsx ファイル)