- ベストアンサー
オートフィルタの代わりの関数による表計算
"VLOOKUP"とか"HLOOKUP"とかの(表計算用)関数では、単一の検索値だけによって絞り込みが為されていくのだろう、 と私は勝手に認識して参りましたので、伺います。 『複数の条件で各データを絞り込みまして其の同一行に並んだデータを取り出す』という設定の為には、どういう関数の利用が必要なのでしょうか? たとえVBEによる記述が必要になっていましても、 構いませんから、御教授を宜しく御願い申し上げます。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
基本的には次のような例題を理解することで関数による対応が可能でしょう。 シート1には例えばA1セルに氏名、B1セルに性別、C1セルに年齢、D1セルに県名などの項目名が有り、その下方に各データが入力されているとします。 そこでオートフィルタとなる検索の条件を入力する表をG1セルからJ2セルに作るとします。 G1セルには性別、H1セルには年齢(以上)、I1セルには年齢(以下)、J1セルには県名の文字をそれぞれ入力します。 そこでそれぞれの項目の2行目には検索したいデータを入力します。年齢の場合に30代の年齢を検索したい場合にはH2セルに30、I2セルに39と入力します。勿論検索に含めない場合には空白のセルとします。 そこでこれらのフィルタの条件を考慮した行をシート2に作成するとしてそのための作業列をシート1のE列に作成することにします。E2セルには次の式を入力して下方にドラッグコピーします。 =IF(IF(G$2="",0,IF(B2=G$2,1,0))+IF(H$2="",0,IF(AND(C2>=H$2,C2<=I$2),1,0))+IF(J$2="",0,IF(D2=J$2,1,0))=COUNTA(G$2)+COUNT(H$2)+COUNTA(J$2),MAX(E$1:E1)+1,"") シート2では結果を表示するための表でA1セルには次の式を入力してD1セルまでドラッグコピーしたのちに下方にもドラッグコピーします。 =IF(ROW(A1)>MAX(Sheet1!$E:$E)+1,"",IF(INDEX(Sheet1!$A:$D,IF(ROW(A1)=1,1,MATCH(ROW(A1)-1,Sheet1!$E:$E,0)),COLUMN(A1))="","",INDEX(Sheet1!$A:$D,IF(ROW(A1)=1,1,MATCH(ROW(A1)-1,Sheet1!$E:$E,0)),COLUMN(A1)))) これで年齢などの幅を設けた条件の設定の仕方などを参考にすることですべてのケースについて対応ができるものと考えます。
その他の回答 (2)
- hallo-2007
- ベストアンサー率41% (888/2115)
フィルターオプションという機能があります。 http://www.eurus.dti.ne.jp/yoneyama/Excel/filter3.htm 下の方にはVBEのコードもあります。
補足
有り難う御座います。 "DGET関数"でもエラーが出たものですから、 教えて頂きたくて此の質問を試みました。
- keithin
- ベストアンサー率66% (5278/7941)
たとえば http://www.eurus.dti.ne.jp/yoneyama/Excel/waza/fukusu_data.html のような方法を使います。 作業列を使い簡単な関数だけでさくっと答えを出すヤリカタから、無理に配列数式で詰め込んで計算するやり方まで、方法は様々あります。
補足
有り難う御座います。 "ROW関数"の価値もが分かりまして、 非常に助かりました。
補足
有り難う御座います。 IF条件の判定結果に応じて"1"とか"0"とかの『戻り値』が返されている、という設定が御座いますが、 それ等の値は何を意味しているのでしょうか?