• ベストアンサー

エクセルのデータ抽出です

データの抽出ですが,オートフィルタでは上手くいきません。 データが以下のように配列してあります(ア~は人名が入ります)     A  B  C ア  1  2  3 イ  2 ウ  3 エ  2  3 このような状況からたとえば,3のデータを有するア・ウ・エ(の3名)を一度に抽出することは出来ますでしょうか。

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

  • ベストアンサー
  • yui56544
  • ベストアンサー率69% (85/123)
回答No.2

#1、訂正です A列を人名 B~D列を数値とした場合はこうですね E2セルに =IF(COUNTIF(B2:D2,3)>=1,"○","×") これを下にオートフィルで伸ばして、E列をオートフィルタ ちなみに検索する値が毎回違うなら、例えばF1セルに「検索する数値」を入力し、 E2セルを =IF(COUNTIF(B2:D2,$F$1)>=1,"○","×") とすれば、F1セルに検索したいデータを入力するだけで毎回数式を書き換えずに済みます。

bon1234
質問者

お礼

大変遅くなりました。この方法で上手くいきました。検索する数値を変更できましたので大変助かりました。

bon1234
質問者

補足

早速有難うございました。私の知識ではこのレベルで手一杯です。これなら3以外の数値も入力するだけで○が表示されるので簡単です。  ○がついたものをオートフィルタで抽出すればいいのでしょうが,そこを手間をかけずに別のシートに検索結果を表示する方法をご教示いただけないものでしょうか?  お手数をおかけしますがよろしくお願いします。

その他の回答 (7)

  • maron--5
  • ベストアンサー率36% (321/877)
回答No.8

◆こんな方法はいかがでしょう F1=IF(ROW(A1)>COUNTIF($B$1:$D$4,3),"",INDEX($A$1:$A$4,SMALL(MMULT(($B$1:$D$4=3)*1,{1;1;1})*{1;2;3;4},4-COUNTIF($B$1:$D$4,3)+ROW(A1)))) ★下にコピー

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

 今仮に、御質問文の例で「ア」と入力されているのがSheet1のA2セルであり(1行目には項目の名称等が入力れている)、Sheet2のA2以下に抽出結果を表示させるものとします。  又、同一行の中に3が複数回現れる事はないという条件が成り立っているものとします。  作業列を使用した方が楽なのですが、「一度に抽出する」という条件でしたら、Sheet2のA2セルに次の関数を入力してから、Sheet2のA2セルをコピーして、Sheet2のA3以下に貼り付けると、全自動で抽出結果が表示されます。(元の表の行数が数千行以上にもなる場合には、処理に要する負荷が大きくなるため、結果が表示されるまでに時間が係るかも知れませんが、2千行程度までなら許容範囲だと思います) =IF(ROWS($2:2)>COUNTIF(OFFSET(Sheet48!$1:$1,1,,MATCH("゛",Sheet48!$A:$A,-1)-ROW(Sheet48!$A$1)),3),"",INDEX(Sheet48!$A:$A,SUMPRODUCT(ROW(INDEX(Sheet48!$A:$A,ROW(Sheet48!$A$1)+1):INDEX(Sheet48!$A:$A,MATCH("゛",Sheet48!$A:$A,-1)))*(COUNTIF(OFFSET(Sheet48!$1:$1,ROW(INDEX(Sheet48!$A:$A,ROW(Sheet48!$A$1)+1):INDEX(Sheet48!$A:$A,MATCH("゛",Sheet48!$A:$A,-1)))-ROW(Sheet48!$A$1),),3)>0)*(COUNTIF(OFFSET(Sheet48!$1:$1,1,,ROW(INDEX(Sheet48!$A:$A,ROW(Sheet48!$A$1)+1):INDEX(Sheet48!$A:$A,MATCH("゛",Sheet48!$A:$A,-1)))-ROW(Sheet48!$A$1)),3)=ROWS($2:2)))))  それから、念のために作業列を使用する方法も併記させて頂きます。  まず、Sheet3のA2セルに次の関数を入力して下さい。 =IF(COUNTIF(Sheet1!2:2,3),ROW(),"")  次に、Sheet3のA2セルをコピーして、Sheet3のA3以下に貼り付けて下さい。  次に、Sheet2のA2セル次の関数を入力して下さい。 =IF(ROWS($A$2:$A2)>COUNT(Sheet3!$A:$A),"",INDEX(Sheet1!$A:$A,SMALL(Sheet3!$A:$A,ROWS($A$2:$A2))))  次に、Sheet2のA2セルをコピーして、Sheet2のA3以下に貼り付けて下さい。

noname#204879
noname#204879
回答No.6

添付図参照

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.5

例データ Sheet1 A1:F5 ー A B C 作業列  <--見出し行 ア 1 2 3 1 イ 2 ウ 3 2 エ 2 3 3 F2に =IF(COUNTIF(B2:D2,3)>0,MAX($F$1:F1)+1,"")と入れて下方向に式を 複写する。 結果 上記F列 3のある行に、上から連番を振った。 ーー Sheet2でA2に =INDEX(Sheet1!$A$1:$D$100,MATCH(ROW()-1,Sheet1!$F$1:$F$100,0),COLUMN()) D列まで横方向に式を複写。 A2:D2を下方向に式を複写 結果 ア 1 2 3 ウ 3 0 0 エ 2 3 0 あと多少改良が必要だが。 式を消すために自分のセルに形式を選択して複写ー値で複写。 0を空白に置換するとか。 式の複写で#N/Aを見えなくするとか。 上記は「imogasi方式」と自称。作業列を使う方法。 Googleで「imogasi方式」で照会すれば、抜き出しの質問例と 回答例が沢山出る。関数では抽出は式が難しい。 難しい関数式を使う方法の回答が出るが、別の方法。 VBAでやればまた別の方法でできる。

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

お薦めの方法: 添付図のG1:I4のように「検索条件範囲」を準備して,データメニューのフィルタの「フィルタオプションの設定」を使う(Excel2007ではデータタブの詳細設定)と,3を含んだ行を絞り込んだり,添付図のように抽出して書き出させたりできます。 別の方法: 添付図のE列のように =CONTIF(B2:D2,3) といった具合の式を並べておいて,3が1以上あった行をオートフィルタで絞ってもできます ダメな方法: K2セルに =INDEX(A:A,SMALL(IF($B$2:$D$6=3,ROW($A$2:$A$6),999),ROW(A1)))&"" と記入してコントロールキーとシフトキーを押しながらEnterで入力し,下向けにコピーしていれておきます。

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.3

こんばんは! 一例です。 数値はB~D列に入るものとし、1行に検索データは複数入らない!という前提です。 とりあえず100行目まで対応できる数式にしてみました。 仮にE1セル以降に表示させるとします。 E1セルに =IF(COUNTIF(B:D,3)<ROW(A1),"",INDEX($A$1:$A$100,SMALL(IF($B$1:$D$100=3,ROW($A$1:$A$100)),ROW(A1)))) ※ 配列数式になってしまいますので、この画面からE1セルにコピー&ペーストする場合は E1セルに貼り付け後、数式バー内で一度クリック! 編集可能になりますので、Shift+Ctrlキーを押しながらEnterキーで確定! 数式の前後に{ }マークが入り配列数式になります。 これをオートフィルで下へずぃ~~~!っとコピーすると、 希望に近い形にならないでしょうか?m(_ _)m

  • yui56544
  • ベストアンサー率69% (85/123)
回答No.1

こんな方法ではダメですか? D2セルに =IF(COUNTIF(A2:C2,3)>=1,"○","×") これを下にオートフィルで伸ばす これで同じ行のA~Cに「3」が一つ以上含まれればD列に○が表示されます あとはD列をオートフィルタすれば抽出可能です

関連するQ&A