条件に合うデータを全て抽出できる数式のQ&A集

「条件に合うデータをすべて順に抜き出す数式」を解説する11ページ目です。

 

ここでは、エラーが出たり、数式コピーで思った値が返ってこなかったり、エクセルが重くなったりとした問題の解決方法を解説します。

 

なお、解説の1ページ目を見るにはこちらです。

⇒1ページ目へ

1.「入力した数式は正しくありません」と表示

まずは、「入力した数式は正しくありません」と表示された場合です。

 

1-1.原因は?

このエラーの場合、原因は「カッコが多い」ことが考えられます。

 

そもそも、数式の基本的な形は次の通りです。

=IFERROR(INDEX(抽出対象の列,1/LARGE(INDEX((条件式)/ROW(条件範囲),0),ROW(A1))),"")

 

この内、どこか一つでもカッコが多い、または少ない場合にはエラーになるのです。

 

1-2.対処法は?

対処法は2つあります。

 

1-2-1.関数の引数ダイアログボックスで確認する

一つは、「関数の引数ダイアログボックスで確認する」ことです。

 

関数の引数 ダイアログボックスは、数式バーの左側にある「fx」を押すと立ち上がります。

 

そして、各関数をクリックし、エラーになっていないかを確認します。

 

例えば、2個目のINDEX関数でかっこが足りない場合には、次のように表示されます。

 

INDEX関数の配列は、本来赤矢印の「,」の前までが範囲なので、ここにかっこが足りないとみることができます。

このようにして、かっこに過不足がないかを確認していきます。

 

1-2-2.数式の基本形をコピーして作り直す

もう一つの方法は、「数式の基本形をコピーして作り直す」ことです。

 

かっこの数の過不足は、数式を手入力したために起こりやすいです。

 

ただ、どこのかっこが多いか足りないかを見るのも、慣れないと結構手間です。

 

そこで、数式の基本形をコピーし作り直したほうが分かりやすいかもしれません。

 

繰り返しになりますが、数式の基本形は以下の通りです。

=IFERROR(INDEX(抽出対象の列,1/LARGE(INDEX((条件式)/ROW(条件範囲),0),ROW(A1))),"")

 

これを使って、数式を作り直してみましょう。

2.数式コピーで思い通りの値が表示されない

次に、「数式コピーで思い通りの値が表示されない」場合です。

 

2-1.原因は?

数式を作ったセルは正しく表示され、コピーすると正しく表示されない場合、「適切に絶対参照にしていない」ことが考えられます。

 

絶対参照とは、「『$』を付けることで数式をコピーしても参照先が変わらないようにする」ことを言います。

 

適切に絶対参照にしないと、コピー時に参照先が変わって、結果正しい結果がかえってきません。

 

2-2.対処法は?

では、数式を見ながら、絶対参照にする個所を確認します。

 

まず、数式の基本形は以下の通りです。

=IFERROR(INDEX(抽出対象の列,1/LARGE(INDEX((条件式)/ROW(条件範囲),0),ROW(A1))),"")

 

この中の条件式を分解すると、次のようになります。

条件範囲 → 比較演算子 → 条件値

 

これらを組み合わせると、数式の基本形は次のようになります。

=IFERROR(INDEX(抽出対象の列,1/LARGE(INDEX((条件範囲→比較演算子→条件値)/ROW(条件範囲),0),ROW(A1))),"")

 

このうち、絶対参照にするのは、以下の通りです。

(1)条件値がセル番号以外

=IFERROR(INDEX(抽出対象の列,1/LARGE(INDEX((条件範囲→比較演算子→条件値)/ROW(条件範囲),0),ROW(A1))),"")

 

(2)条件値がセル番号

=IFERROR(INDEX(抽出対象の列,1/LARGE(INDEX((条件範囲→比較演算子→条件値)/ROW(条件範囲),0),ROW(A1))),"")

 

それぞれ赤字の箇所に「$」を付けます。

 

「$」の付け方は、「カーソルを当ててF4キーを1回押す」です。これを3ヶ所に行います。

 

すると例えば、数式は次のようになります。

=IFERROR(INDEX(A:A,1/LARGE(INDEX(($F$4:$F$9=$A$1)/ROW($A$4:$A$9),0),ROW(A1))),"")

 

これで、他のセルに数式をコピーしても正しい結果が得られるようになります。

3.エクセルが重くなった

続いて、数式を入れることで動きが重くなった場合です。

 

3-1.原因は?

原因は、数式の構成です。

 

この数式は、配列で計算をします。

 

通常、数式は途中の計算の答えが一つですが、配列数式は「複数の答え」が返ってきます。

 

結果、たくさんの箇所でこの数式を使うと、計算に時間が掛かってしまうのです。

 

経験的には、5000行×8列以上の時に重くなりました。

 

これはあくまで参考地です。パソコンのスペックなどでも変わってきます。

 

3-2.対処法は?

対処法は、「元データの最左列」を変えることです。

 

具体的には、「列の全行」ではなく、「列の1行目から条件範囲の最後の行」までにします。

 

例えば、次のような数式があるとします。

=IFERROR(INDEX(A:A,1/LARGE(INDEX(($F$4:$F$9=$A$1)/ROW($A$4:$A$9),0),ROW(A1))),"")

 

この数式を、できる限り軽くするには、次のように直します。

=IFERROR(INDEX(A1:A9,1/LARGE(INDEX(($F$4:$F$9=$A$1)/ROW($A$4:$A$9),0),ROW(A1))),"")

 

これで計算量が減り、結果動きが軽くなります。

 

ただし、指定の仕方がちょっと面倒になります。

4.抜き出す列を任意で変えたい

最後に、抜き出す列を任意で変えたい場合です。

 

4-1.抜き出す列を指定している箇所は?

数式の中で、抜き出す列を指定しているのは「抽出対象の列」です。

=IFERROR(INDEX(抽出対象の列,1/LARGE(INDEX((条件式)/ROW(条件範囲),0),ROW(A1))),"")

 

ここがA列であればA列の値が、D列であればD列の値が返ってきます。

 

4-2.対処法は?

「抽出対象の列」を一番左端の列ではなく「抜き出したい列」に変えると、任意の列の値を抜き出せます。

 

例えば、次のような数式があるとします。

=IFERROR(INDEX(A:A,1/LARGE(INDEX(($F$4:$F$9=$A$1)/ROW($A$4:$A$9),0),ROW(A1))),"")

 

この数式だと、A列の値が返ってきます。

 

これを、D列の値が返ってくるようにするには、次のように直します。

=IFERROR(INDEX(D:D,1/LARGE(INDEX(($F$4:$F$9=$A$1)/ROW($A$4:$A$9),0),ROW(A1))),"")

 

これで、任意の列の値を抜き出すことができます。

 

以上、参考になれば幸いです。

⇒ 次ページ「0を空白にする方法」へはこちら

7
8
9
10
11
12

口コミ・評判のいいExcel本の紹介】


Top