このページの内容で出来ること
このページでは、エクセルの「INDEX関数」と「MATCH関数」を組み合わせることで、リストの中の特定の行にあるデータを抽出し、楽に変更する方法をご紹介します。下図のように、元のデータにの数値3に対して、特定の番号にだけ数値を加算するような場合に便利なエクセル関数です。
変更したデータの例
「INDEX関数」と「MATCH関数」は、大量のデータの中で、特定の一部だけデータを変更したいという場合に有効です。もちろんデータは、数値だけではなく文字列でも扱うことができます。
手順解説
このページではExcel(エクセル)が使えて、セルの中に直接関数(=から始まる英数字で構成された式)を入力できることが前提になっています。
【手順1】元リストを用意する
まずは、変更したい、元のデータ(リスト)を用意をします。下図のA~D列の3~22行目が元のデータ(リスト)にあたると考えてください。
番号が1から20までの行に対して、それぞれ数値1~3までの数値データを持っています。
例えば、「番号:1」のデータは「数値1=6.4」、「数値2=2.0」、「数値3=76.0」の数値データを持っています。3次元空間上の「ある点A」に対する「(X,Y,Z)座標」のようなイメージです。
番号が1から20までの行に対して、それぞれ数値1~3までの数値データを持っています。
例えば、「番号:1」のデータは「数値1=6.4」、「数値2=2.0」、「数値3=76.0」の数値データを持っています。3次元空間上の「ある点A」に対する「(X,Y,Z)座標」のようなイメージです。
【手順2】変更したいデータの条件を作る
元のデータの特定の行(番号)の「数値3」にだけ数値を加算したいという場合を想定します。加算する数値は「番号×100」とします。(例えば、番号:6に加算する数値は600)
このような場合は、データに加算したい値を新たにリストで作成します。E~H列の3~10行目が、特定の行(番号)へ加算したい数値の一覧です。「数値1」と「数値2」には加算しないため、「0」としています。
また、データに加算したい値のリストの並びは上から「番号:6,12,1,9,3,17,11,4」とランダムにしています。これは、必ずしも数値が昇順や降順に並んでいなくても「INDEX関数」と「MATCH関数」で対応ができることを示すため、あえてランダムな並びとしています。
このような場合は、データに加算したい値を新たにリストで作成します。E~H列の3~10行目が、特定の行(番号)へ加算したい数値の一覧です。「数値1」と「数値2」には加算しないため、「0」としています。
また、データに加算したい値のリストの並びは上から「番号:6,12,1,9,3,17,11,4」とランダムにしています。これは、必ずしも数値が昇順や降順に並んでいなくても「INDEX関数」と「MATCH関数」で対応ができることを示すため、あえてランダムな並びとしています。
【手順3】変更後のリストを作成する
元のデータ(リスト)のうち、変更したい番号に該当する「数値3」のデータだけ変更します。変更したい番号の元々の数値3のデータに、「番号×100」を加算した数値を変更後のデータ(リスト)にするところがゴールです。関数の具体例は、この後に示します。
最終的な関数の具体例
=D3+IFERROR(INDEX($E$3:$H$10,MATCH(I3,$E$3:$E$10,0),4),0)
・変更リストの範囲:データに加算したい値のリスト
・変更するか条件を調べるセル:データに加算したい値のリストの番号と一致するか調べるセル
・変更リストの条件検索範囲:データに加算したい値のリストの番号
・変更するか条件を調べるセル:データに加算したい値のリストの番号と一致するか調べるセル
・変更リストの条件検索範囲:データに加算したい値のリストの番号
このページで使用しているのは以下の3つの関数です。それぞれについての説明は、この後に示します。
①IFERROR関数
②INDEX関数
③MATCH関数
①IFERROR関数
②INDEX関数
③MATCH関数
「IFERROR関数」の説明
IFERROR関数は、数値が取得できずに、エラー(#N/A)となってしまった場合に、どのような値とするかを指定する関数です。
変更するリストには、指定したデータと、指定していないデータが存在します。このページの例で、指定したデータとは「番号6,12,1,9,3,17,11,4」を差します。
「INDEX関数を用いた場合、変更するか条件を調べるセルのデータと同じ値(文字列)が、変更リストの条件検索範囲にある場合は数値(文字列)を返してくれますが、指定していないデータの場合、エラー(#N/A)を返されることになります。そのため、変更リストの指定したデータに該当しない場合、どのような値とするかを指定する必要があります。
該当しないデータの場合は何も変更しない(加算しない)ため、エラーの場合の入力値として「0」にするということにしています。
「INDEX関数を用いた場合、変更するか条件を調べるセルのデータと同じ値(文字列)が、変更リストの条件検索範囲にある場合は数値(文字列)を返してくれますが、指定していないデータの場合、エラー(#N/A)を返されることになります。そのため、変更リストの指定したデータに該当しない場合、どのような値とするかを指定する必要があります。
該当しないデータの場合は何も変更しない(加算しない)ため、エラーの場合の入力値として「0」にするということにしています。
「INDEX関数」の説明
INDEX関数は、リスト(行列)の範囲を指定し、その行番号と、列番号を指定することで、リストの範囲内から指定した行と列に該当するセルのデータを取得する関数です。
行は、縦方向の番地。列は横方向の番地のことです。行と列を指定することで、リスト中で指定した行と列が交差した位置のセルのデータを取得するようなイメージです。
行は、縦方向の番地。列は横方向の番地のことです。行と列を指定することで、リスト中で指定した行と列が交差した位置のセルのデータを取得するようなイメージです。
「MATCH関数」の説明
MATCH関数は、一方向(縦もしくは横方向)のリストから一致するデータを検索します。調べるセルとリストのデータが一致した場合は、リストの何番目が一致したかを取得します。リストが縦方向の場合は上から、横方向の場合は左から何番目かを返します。
「INDEX関数」と「MATCH関数」のまとめ
このページの内容のまとめを示します。
- INDEX関数により、リストから行と列を指定して、指定した箇所のデータを取得します。
- MATCH関数により、リストから条件に一致する行もしくは列を取得します。
- MATCH関数で取得した行、もしくは列をINDEX関数に組み込むことで、条件に一致するデータと連動させたリストのデータを扱うことができます。
以上、備忘録のために、今回の記事を作成しました。何かのお役に立てば幸いです。