目次
このExcel INDIRECTチュートリアルでは、関数の構文、基本的な使い方、ExcelでINDIRECTを使用する方法を示す数多くの数式例を説明します。
Excelには数多くの関数が存在し、わかりやすいもの、習得に時間がかかるもの、使用頻度が高いものなど様々ですが、Excel INDIRECTはその一つです。 このExcel関数は計算や条件判定、論理テストなどを行うものではありません。
ExcelのINDIRECT関数とは何ですか? このチュートリアルを読み終えたら、数分後には包括的な答えが得られると思います。
Excel INDIRECT関数 - 構文と基本的な使い方
Excel INDIRECTは、その名前が示すように、セルや範囲、他のシートやワークブックを間接的に参照するために使用されます。 言い換えれば、INDIRECT関数は、ハードコーディングする代わりに、動的なセルや範囲の参照を作成できます。 結果として、数式自体を変更せずに数式内の参照を変更できます。 さらに、これらの間接参照は新しい行または列があっても変更されません。がワークシートに挿入されたとき、または既存のものを削除したとき。
例題を見るとわかりやすいかもしれませんが、どんなに簡単な数式でも、関数の引数を知っていないと書けませんよね。 そこで、まずはExcelのINDIRECT構文について簡単に見てみましょう。
INDIRECT関数の構文
ExcelのINDIRECT関数は、テキスト文字列からセル参照を返します。 2つの引数があり、1つ目は必須、2つ目は任意です。
INDIRECT(ref_text, [a1])ref_text - は、セル参照、またはテキスト文字列の形式でのセルへの参照、または名前付き範囲である。
a1 - は、引数 ref_text に含まれる参照の種類を指定する論理値である。
- TRUE または省略された場合、ref_text は A1 形式のセル参照として解釈される。
- FALSE の場合、ref_text は R1C1 の参照として扱われる。
R1C1 リファレンスタイプは特定の状況では便利かもしれませんが、おそらくほとんどの場合、使い慣れた A1 リファレンスを使いたいでしょう。 とにかく、このチュートリアルのほぼすべての INDIRECT 計算式は A1 リファレンスを使用するので、2 番目の引数は省略する予定です。
INDIRECT関数の基本的な使い方
この関数のインサイトに入るために、ExcelでINDIRECTをどのように使うかを示す簡単な数式を書いてみましょう。
例えば、セル A1 に数字 3 があり、テキスト A1 をセル C1 に入力します。 =INDIRECT(C1)
を他のセルに入れ、何が起こるか見てみましょう。
- INDIRECT関数は、セルC1の値であるA1を参照します。
- この関数はセルA1に送られ、返すべき値(数値3)を選びます。
つまり、この例でINDIRECT関数が実際に行っていることは テキスト文字列をセル参照に変換する .
まだ、実用的な意味合いが薄いと思われる方には、ExcelのINDIRECT関数の本当の力を発揮する数式をいくつかご紹介しますので、お付き合いください。
ExcelでINDIRECTを使用する方法 - 数式の例
上の例のように、ExcelのINDIRECT関数を使うと、あるセルのアドレスを別のセルに通常の文字列として入れ、2番目のセルを参照して1番目のセルの値を得ることができます。 しかし、このつまらない例は、INDIRECT関数のヒントに過ぎません。
実際のデータを扱う場合、INDIRECT関数は、他のセルの値や他のExcelの数式が返す結果を使用して作成した非常に複雑な文字列を含む、任意のテキスト文字列を参照に変換できます。 しかし、馬よりもカートを優先して、一度にいくつかのExcel間接式を実行することは避けましょう。
セルの値から間接参照を作成する
ExcelのINDIRECT関数では、A1とR1C1の参照スタイルが使えますが、通常、1つのシートで両方のスタイルを同時に使うことはできず、次の方法で2つの参照タイプを切り替えるしかありません。 ファイル> オプション> 数式 > R1C1チェックボックス ExcelのユーザーがR1C1を別の参照方法として使うことを考えることが少ないのは、このためです。
INDIRECT式では、同じシート上でどちらの参照形式も使用できます。 先に進む前に、A1参照形式とR1C1参照形式の違いを知っておくとよいかもしれません。
A1スタイル は、Excelの通常の参照タイプで、列と行番号を続けて参照します。 例えば、B2は、B列と2行目の交点にあるセルを参照します。
R1C1スタイル 例えば、R4C1 は、シートの 4 行 1 列のセル A4 を指します。 文字の後に数字がない場合は、同じ行または列を参照していることになります。
そして、次にINDIRECT関数がA1とR1C1の参照をどのように扱うかを見てみましょう。
上のスクリーンショットにあるように、3つの異なる間接式が同じ結果を返しています。 なぜかもうお分かりですか? きっとそうですよね : )
- セル D1 に数式を入力します。
=INDIRECT(C1)
この数式は、セルC1を参照し、その値(テキスト文字列)を取得するものです。 A2 をセル参照に変換し、セルA2に移動してその値である222を返します。
- セル D3 に数式を入力します。
=indirect(c3,false)
第2引数のFALSEは、参照される値(C3)がR1C1セル参照、すなわち行番号に続く列番号のように扱われるべきであることを示します。 したがって、INDIRECT式はセルC3の値(R2C1)を2行1列の接続部(セルA2)への参照として解釈します。
セルの値やテキストから間接参照を作成する
セルの値から参照を作成したのと同じように、この関数でも テキスト文字列 となっており セル参照 をINDIRECT式の中で、連結演算子(&)で繋ぎます。
次の例では、数式: =INDIRECT("B"&C2) は、次の論理的連鎖に基づいてセル B2 から値を返します。
INDIRECT関数は、ref_text引数の要素を連結する - text B とセルC2の値 -> セルC2の値は2番で、セルB2を参照する -> 数式はセルB2に移動してその値である10番を返します。
名前付き範囲でのINDIRECT関数の使用
セルやテキストの値から参照を行う以外に、ExcelのINDIRECT関数で 名前付き範囲 .
例えば、シートに以下のような名前の範囲があるとします。
- りんご・・・B2:B6
- バナナ - C2:C6
- レモン - D2:D6
上記の範囲に対するExcelの動的参照を作成するには、セル(例えばG1)にその名前を入力し、間接式からそのセルを参照するだけです。 =INDIRECT(G1)
.
さらに、このINDIRECT式を他のExcel関数に埋め込んで、指定した範囲内の値の合計や平均を計算したり、怒りの範囲内の最大値/最小値を求めたりすることができるようになりました。
=sum(間接法(g1))
=平均値(間接法(g1))
=max(indirect(g1))
=min(間接(g1))
ExcelのINDIRECT関数の使い方の概要がわかったところで、より強力な数式を試してみましょう。
別のワークシートを動的に参照するINDIRECT式
ExcelのINDIRECT関数は、「動的な」セル参照だけでなく、「その場で」他のワークシートのセルを参照することもできますので、その方法を紹介します。
例えば、Sheet 1に重要なデータがあり、Sheet 2にそのデータを取り込みたいとします。 次のスクリーンショットは、Excelの間接式がこのタスクを処理する方法を示しています。
スクリーンショットにある数式を分解して理解しよう。
ご存知のように、Excelで他のシートを参照するには、シート名の後にエクスクラメーションマークとセル/範囲参照を記述するのが一般的な方法です。 シート名!範囲 シート名にはスペースが含まれることが多いので、一重引用符で囲むとよいでしょう(スペースではなくシート名)。 'マイシート!'$A$1 .
あとは、あるセルにシート名、別のセルにセルアドレスを入力して、それらをテキスト文字列として連結し、INDIRECT関数に渡すだけです。 テキスト文字列では、セルアドレスや数値以外の要素をダブルクォートで囲み、連結演算子(&)を使ってすべての要素を連結しなければならないことを覚えておいてください。
以上を踏まえると、次のようなパターンになります。
INDIRECT("'") & シート名 & "'!" & データを取り込むセル )上のスクリーンショットのように、セルA1にシート名、セルBにセルアドレスを入力します。 その結果、次のような数式が得られます。
INDIRECT("'" & $A$1 & "'!" & B1)
また、数式を複数のセルにコピーする場合は、$A$1のように絶対セル参照を使ってシート名への参照を固定する必要がありますので、ご注意ください。
備考
- 2シート目の名前とセルのアドレスが書かれているセル(上の式ではA1とB1)のどちらかが空だと、INDIRECT式はエラーを返します。 これを防ぐには、IF関数でINDIRECT関数をくくることができます。
IF(OR($A$1="",B1=""), "", INDIRECT("'" & $A$1 & "'!" & B1))
- 他のシートを参照するINDIRECT式が正しく動作するためには、参照先のシートが開いている必要があります。 そうでない場合、式は#REFエラーを返します。このエラーを回避するには、IFERROR関数を使用すると、どんなエラーが発生しても空文字列を表示します。
IFERROR(INDIRECT("" & $A$1 & "'!" &B1), "")
別のワークブックへのExcel動的参照の作成
Excelの別のワークブックを参照する間接式は、別のスプレッドシートを参照するのと同じ考え方です。 シート名とセルアドレスに加えて、ワークブック名を指定するだけです。
簡単に説明するために、他の本を参照する方法から始めましょう(本やシートの名前にスペースが含まれる場合はアポストロフィを付けます)。
'[Book_name.xlsx]Sheet_name'!Range。
セルA2にブック名、B2にシート名、C2にセルアドレスがあると仮定すると、以下の式が得られます。
=INDIRECT("'[" & $A$2 & "]" & $B$2 & "'!" & C2)
数式を他のセルにコピーする際に、ブック名やシート名の入ったセルを変更されたくないので、それぞれ$A$2、$B$2という絶対セル参照を使ってロックしています。
そして、次のパターンを使うことで、別のExcelワークブックへの動的参照を簡単に記述することができるようになりました。
=INDIRECT("'[" & 書籍名 & "]" & シート名 & "'!" & 携帯アドレス )注意:数式が参照するワークブックは常に開いている必要があります。そうでない場合、INDIRECT関数は#REFエラーを投げます。 いつものように、IFERROR関数で回避することができます。
=IFERROR(INDIRECT("[" & A2 & "]" & $A$1 & "'!" & B1), "")
Excel INDIRECT関数を使用してセル参照をロックする
通常、Microsoft Excel では、シートに新しい行や列を挿入したり、既存の行や列を削除すると、セル参照が変更されます。 これを防ぐために、INDIRECT 関数を使用して、いかなる場合でも維持されるべきセル参照を操作することができます。
違いを説明するために、次のようにしてください。
- 任意のセルに任意の値、例えばセルA1に20番を入力します。
- 他の2つのセルからA1を異なる方法で参照する。
=A1
と=indirect("a1")
- 1行目の上に新しい行を挿入します。
どうなるかというと、そのセルが 同様 INDIRECT の数式を含むセルは、新しい行が挿入されても数式が変更されず、現在空のセル A1 を参照しているため、20 が返されるようになりました。
このデモの後、INDIRECT関数は役に立つというより、厄介だという印象を持たれたかもしれません。 では、別の方法で試してみましょう。
例えば、セルA2:A5の値を合計したいとすると、SUM関数を使えば簡単にできます。
=SUM(A2:A5)です。
しかし、行を削除したり挿入したりしても、数式は変更されないようにしたい。 最も明白な解決策である絶対参照の使用は役に立ちません。 念のため、数式を入力してみてください。 =sum($a$2:$a$5)である。
をあるセルに挿入し、新しい行(例えば3行目)を挿入し、...変換された数式を見つけることができます。 =sum($a$2:$a$6)です。
.
もちろん、ほとんどの場合、このようなMicrosoft Excelの提供する方法で問題なく動作します。 しかし、数式を自動的に変更されたくない場合もあるでしょう。 このような場合は、INDIRECT関数を使用することで解決します。
=sum(間接法("a2:a5"))
Excelは「A1:A5」を範囲参照ではなく、単なる文字列として認識しているので、行の挿入や削除を行っても、何も変化はありません。
INDIRECTと他のExcel関数を併用する
SUM以外にも、INDIRECTはROW、COLUMN、ADDRESS、VLOOKUP、SUMIFなどのExcel関数で頻繁に使用されています。
例1.INDIRECT関数とROW関数
Excelでは、ROW関数は値の配列を返すためによく使われます。 たとえば、次の配列の式(Ctrl + Shift + Enterキーを押す必要があることを忘れないでください)を使って、範囲A1:A10で最も小さい3つの数値の平均を返すことができます。
=平均値(small(a1:a10,row(1:3)))
しかし、ワークシートに1行目から3行目までの新しい行を挿入すると、ROW関数の範囲がROW(1:4)に変更され、数式は3つの数値ではなく、4つの小さい数値の平均を返します。
これを防ぐには、ROW関数にINDIRECTを入れれば、何行挿入、削除されても、配列式は常に正しく保たれます。
=平均値(small(a1:a10,row(indirect("1:3"))))
INDIRECTとROWをLARGE関数と組み合わせて使う例をもう少し紹介します:範囲内の最大数N個を合計する方法。
例2.INDIRECT関数とADDRESS関数
ExcelのINDIRECTとADDRESS関数を併用することで、あるセルの値をその場で取得することができます。
覚えているかもしれませんが、ExcelではADDRESS関数を使って、行番号と列番号でセルのアドレスを取得します。 例えば、数式で言うと =ADDRESS(1,3)
は、C1 が 1 行目と 3 列目の交点にあるセルなので、文字列 $C$1 を返します。
セル間接参照を作成するには、次のようにADDRESS関数をINDIRECT式に埋め込むだけです。
=間接的(アドレス(1,3))
もちろん、この簡単な式はテクニックを示すものに過ぎません。 そして、本当に役に立つと思われる例をいくつか挙げてみましょう。
- INDIRECT ADDRESSの数式 - 行と列を切り替える方法。
- VLOOKUPとINDIRECT - 異なるシートから動的にデータを引き出す方法。
- INDIRECT with INDEX / MATCH - 大文字小文字を区別するVLOOKUP式を完璧なものにする方法。
- Excel INDIRECTとCOUNTIF - 連続しない範囲またはセルの選択でCOUNTIF関数を使用する方法。
ExcelのデータバリデーションでINDIRECTを使用する
ExcelのINDIRECT関数とデータ検証を使用すると、ユーザーが最初のドロップダウンで選択した値に応じて異なる選択肢を表示するカスケード型ドロップダウン・リストを作成することができます。
単純な従属ドロップダウン・リストを作るのはとても簡単です。 必要なのは、ドロップダウンの項目を格納するためのいくつかの名前付き範囲と、 単純な =INDIRECT(A2)
ここで、A2 は最初のドロップダウンリストが表示されているセルです。
より複雑な3レベルメニューや複数単語の入力があるドロップダウンを作るには、SUBSTITUTE関数を入れ子にしたもう少し複雑なINDIRECT式が必要になります。
Excelデータ検証でINDIRECTを使用する方法の詳細なステップバイステップのガイダンスについては、こちらのチュートリアル:Excelで従属ドロップダウンリストを作成する方法 をご覧ください。
Excel INDIRECT関数 - 起こりうるエラーと問題点
上記のように、INDIRECT関数はセルや範囲の参照を扱う際に非常に便利ですが、Excelの数式でINDIRECTを多用すると透明性に欠けるため、すべてのExcelユーザーがINDIRECTを積極的に利用しているとは限りません。 INDIRECT関数は参照するセルが数式内で使用されている値の最終位置ではないため、確認が困難なのです。これは、特に大規模で複雑な数式を扱う場合には、実に紛らわしいものです。
INDIRECTは、他のExcel関数と同様に、引数の使い方を間違えるとエラーを出すことがあります。 ここでは、最も典型的な間違いをリストアップしています。
Excel INDIRECT #REF!エラー
多くの場合、INDIRECT関数は3つのケースで#REF!エラーを返します。
- ref_text は有効なセル参照ではありません。 Indirect」式の ref_text パラメーターが有効なセル参照でない場合、その式は #REF! エラー値になります。 起こりうる問題を回避するために、INDIRECT 関数の引数を確認してください。
- レンジリミットを超えている 間接式の ref_text 引数が 1,048,576 行または 16,384 列の制限を超えるセル範囲を参照している場合、Excel 2007、2010、Excel 2013 でも #REF エラーが発生します。 それ以前の Excel バージョンでは制限超過を無視して何らかの値を返しますが、期待した値ではないことがよくあります。
- 参照したシートまたはワークブックが閉じている。 間接式が他のExcelワークブックまたはワークシートを参照している場合、その他のワークブック/スプレッドシートが開かれている必要があり、そうでなければINDIRECTは#REF!エラーを返します。
Excel INDIRECT #NAME?エラー
これは最も明白なケースで、関数名に何らかの誤りがあることを意味し、次のポイントに繋がります : )
英語以外のロケールでのINDIRECT関数の使用について
INDIRECT関数の英語名が、14カ国語に翻訳されていることをご存じだろうか。
|
|
全リストを入手したい方は、こちらのページをご覧ください。
英語以外のローカライズでよくある問題は、INDIRECT関数の名前ではなく、異なる 地域設定 に対して リストセパレーター 北米やその他の国の標準的なWindowsの設定では、デフォルトの リストセパレーター はコンマですが、ヨーロッパ諸国ではコンマは「カンマ」として予約されています。 10進シンボル とのことです。 リストセパレーター にはセミコロンが設定されます。
その結果、2つの異なるExcelロケール間で数式をコピーする際に、エラーメッセージ""が表示される場合があります。 この数式に問題があることがわかりました...。 " というのは リストセパレータ もし、このチュートリアルのINDIRECT式をExcelにコピーする際にこのエラーが発生した場合は、すべてのカンマ(,)をセミコロン(;)に置き換えるだけで直ります。
リストセパレーターとデシマルシンボルがどのように設定されているかを確認するには、お使いのマシンで コントロールパネル にアクセスしてください。 地域と言語>追加設定 .
このチュートリアルでは、ExcelでINDIRECTを使用する方法について説明しました。 INDIRECTの長所と短所がわかったところで、INDIRECT関数を使用して、Excelのタスクをいかに簡略化できるか試してみましょう。 読んでくださってありがとうございました!