• ベストアンサー

エクセルデータの抽出について

A列とB列にデータが入っています。 A列が×になっている行のB列を抽出し、D列に表示するにはどんな計算式を使えばよいでしょうか。 VLOOKUPではうまくいかず、過去の質問等調べましたが適切な回答が見つかりませんでした。。。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.2

添付図: ほんのちょっとした工夫で,普段使いの関数だけで十分出来ます。 A1: =IF(B1="×",COUNTIF($B$1:B1,B1),"") 以下コピー E1: =IF(ROW(E1)>MAX(A:A),"",VLOOKUP(ROW(E1),A:C,3)) 以下多めにコピー

slowstep4035
質問者

お礼

ご回答ありがとうございます。 何とか計算式も理解できました。

その他の回答 (3)

  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.4

回答しようよしたら、どんどん回答が付いてしまいました。 関数案で 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以上では、フィルターの詳細設定)で抽出すると自由度が広がります。

slowstep4035
質問者

お礼

ご回答ありがとうございます。 解説もとても参考になりました。 配列関数について少し勉強してみようと思います。

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.3

【方法その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以下に貼り付けて下さい。

slowstep4035
質問者

お礼

ご回答ありがとうございます。 初心者の私には作業列を使うほうがよさそうです。。。

noname#204879
noname#204879
回答No.1

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())))} (配列数式)

slowstep4035
質問者

お礼

ご回答ありがとうございました。 計算式の意味があまり理解できていませんがひとまず試してみます。

関連するQ&A