- ベストアンサー
エクセルで条件抽出をする方法
- エクセルの条件抽出は、特定の条件を満たすデータを抽出する機能です。
- SHEET1のデータに対して、SHEET2の□に値を入力すると、条件に合致するデータが表示されます。
- 具体的には、SHEET2の□に対応するセルに値を入力すると、SHEET1の対応する行が表示されます。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
配列数式などを使った関数はデータが多くなると計算に負担がかかります。式は複雑になっても分かり易い式を使って対応することでしょう。 シート2のA1,B1,C1に抽出したいデータが入力されるとして、 シート1では例えば作業列としてE2セルには次の式を入力して下方にオートフィルドラッグします。 =IF(OR(COUNT(A2:C2)=0,COUNT(Sheet2!A$1:C$1)=0),"",IF(AND(Sheet2!A$1<>"",Sheet2!B$1="",Sheet2!C$1=""),IF(A2=Sheet2!A$1,MAX(E$1:E1)+1,0))+IF(AND(Sheet2!A$1="",Sheet2!B$1<>"",Sheet2!C$1=""),IF(B2=Sheet2!B$1,MAX(E$1:E1)+1,0))+IF(AND(Sheet2!A$1="",Sheet2!B$1="",Sheet2!C$1<>""),IF(C2=Sheet2!C$1,MAX(E$1:E1)+1,0))+IF(AND(Sheet2!A$1<>"",Sheet2!B$1<>"",Sheet2!C$1=""),IF(AND(A2=Sheet2!A$1,B2=Sheet2!B$1),MAX(E$1:E1)+1,0))+IF(AND(Sheet2!A$1<>"",Sheet2!B$1="",Sheet2!C$1<>""),IF(AND(A2=Sheet2!A$1,C2=Sheet2!C$1),MAX(E$1:E1)+1,0))+IF(AND(Sheet2!A$1="",Sheet2!B$1<>"",Sheet2!C$1<>""),IF(AND(B2=Sheet2!B$1,C2=Sheet2!C$1),MAX(E$1:E1)+1,0))+IF(AND(Sheet2!A$1<>"",Sheet2!B$1<>"",Sheet2!C$1<>""),IF(AND(A2=Sheet2!A$1,B2=Sheet2!B$1,C2=Sheet2!C$1),MAX(E$1:E1)+1,0))) シート2のA2セルには厚み、B2セルには幅、C2セルには長さとそれぞれ文字列を入力し、 シート2のA3セルには次の式を入力してC3セルまでオートフィルドラッグしたのちに下方にもオートフィルドラッグします。 =IF(ROW(A1)>MAX(Sheet1!$E:$E),"",INDEX(Sheet1!$A:$C,MATCH(ROW(A1),Sheet1!$E:$E,0),COLUMN(A1)))
その他の回答 (4)
- imogasi
- ベストアンサー率27% (4737/17069)
2,3問前の質問にも書いたが、エクセルの関数でとなると、式が複雑になる。1条件でも十分複雑。 また列的(項目別に)に2条件・3条件の抜き出しになると、関数では難しい。3列の値を結合したセルを作業列として作る手もあるが、数の場合は一工夫がいる。単純に結合してはならない。 もっと経験・試行を積めば、エクセルの関数では難しいことがわかる。経験や勉強をしてないからこんな質問になる。 ーー 操作でフィルタオプションの設定が適当だろう。 ーー 他では フィルタオプションの設定の操作をして、マクロの記録を取ってVBAを修正し、実行することも出来ると思う。 ーー アクセスのSQLなど以外では、3条件・2条件該当分を探すのは、プログラム記述としても簡単ではない。(全行について3列のデータを1つづつ繰返して聞いたりする方法(稚拙)をしないならば。) もともとエクセルの仕組みとして、関数でそんなことが出来るようには、1つの関数を作ってないのだと思う。 データベース的なことになる。 ーー この3条件の該当件数を出すのは、まだやさしい。ここにエクセル関数の領分が伺える。
- 某HN クロメート(Chromate)(@CoalTar)
- ベストアンサー率40% (705/1742)
オートフィルタ推奨 数式で遊んでみた A5セルに =IF(AND(COUNT($A$2:$C$2)<>0,ROW(A1)>SUM(IF($A$2="",1,Sheet1!$A$2:$A$8=$A$2)*IF($B$2="",1,Sheet1!$B$2:$B$8=$B$2)*IF($C$2="",1,Sheet1!$C$2:$C$8=$C$2))),"", IF(A$2<>"",A$2, INDEX(Sheet1!A:A,SMALL(IF(IF($A$2="",1,Sheet1!$A$2:$A$8=$A$2)*IF($B$2="",1,Sheet1!$B$2:$B$8=$B$2)*IF($C$2="",1,Sheet1!$C$2:$C$8=$C$2),ROW(Sheet1!$A$2:$A$8)),ROW(A1))))) [Ctrl]+[Shft] +[Enter] で確定、配列数式。{ }で挟まれる 右へ下へオートフィル
- mu2011
- ベストアンサー率38% (1910/4994)
簡単な操作としては、オートフィルタやフィルタオプションの設定があるが如何でしょうか。 操作例は、添付URLを参照して下さい。
- ・真 綾・(@Ma-yan_bh1011)
- ベストアンサー率30% (79/257)
複数の行に同じ値があるのでいろいろ難しいのですが、その前に、逆にひとつ質問です。 フィルタではいけない理由は何でしょうか?
お礼
パソコンを使ったことのない60歳の方でも使えるものを、と考えていたので。
お礼
回答ありがとうございます。 60歳でパソコンを使ったことのない方でも使えるものを、と思ってました。