- ベストアンサー
エクセルデータの抽出について
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
その他の回答 (3)
- hallo-2007
- ベストアンサー率41% (888/2115)
回答しようよしたら、どんどん回答が付いてしまいました。 関数案で D1セルに =INDEX(B:B,SMALL(INDEX((A$1:A$100="○")*100+ROW(A$1:A$100),),ROW()))&"" と入れて下までコピー この手の関数の説明は難しいのですが INDEX((A$1:A$100="○")*100+ROW(A$1:A$100),) は、A列が〇なら、その行番号に100を加算された数値、それ以外は その行番号 が入った 架空の範囲を作成しているところにが味噌です。 既に回答にありますように Vlookup関数では、条件にあった最初の行しか検索できないので、複数のデータ抽出はできません。 作業列を利用するか、配列関数を使うことになります。 エクセルには、データ抽出の機能がありますので フィルターオプション(エクセル2007以上では、フィルターの詳細設定)で抽出すると自由度が広がります。
お礼
ご回答ありがとうございます。 解説もとても参考になりました。 配列関数について少し勉強してみようと思います。
- kagakusuki
- ベストアンサー率51% (2610/5101)
【方法その1】作業列を使用する方法 今仮に、F列を作業列として使用するものとします。 まず、F1セルに次の数式を入力して下さい。 =IF(INDEX($A:$A,ROW())="×",ROW(),"") 次に、F1セルをコピーして、F2以下に貼り付けて下さい。 次に、D1セルに次の数式を入力して下さい。 =IF(ROWS($1:1)>COUNT($F:$F),"",INDEX($B:$B,SMALL($F:$F,ROWS($1:1)))) 次に、D1セルをコピーして、D2以下に貼り付けて下さい。 【方法その2】関数のみで行う方法 まず、D1セルに次の数式を入力して下さい。 =IF(ROWS($1:1)>COUNTIF($A:$A,"×"),"",INDEX($B:$B,SUMPRODUCT(ROW(INDEX($A:$A,1):INDEX($A:$A,MATCH("゛",$A:$A,-1)))*(INDEX($A:$A,1):INDEX($A:$A,MATCH("゛",$A:$A,-1))="×")*(COUNTIF(OFFSET(INDEX($A:$A,1),,,ROW(INDEX($A:$A,1):INDEX($A:$A,MATCH("゛",$A:$A,-1)))),"×")=ROWS($1:1))))) 次に、D1セルをコピーして、D2以下に貼り付けて下さい。
お礼
ご回答ありがとうございます。 初心者の私には作業列を使うほうがよさそうです。。。
D1: {=IF(ISERROR(SMALL(IF(A$1:A$100="×",ROW(A$1:A$100),""),ROW(A1))),"",INDEX(B$1:B$100,SMALL(IF(A$1:A$100="×",ROW(A$1:A$100),""),ROW())))} (配列数式)
お礼
ご回答ありがとうございました。 計算式の意味があまり理解できていませんがひとまず試してみます。
お礼
ご回答ありがとうございます。 何とか計算式も理解できました。