• ベストアンサー

エクセルの表から関数を使って種類別に別シートに抽出

すいません、よく似た質問が何度も出ているのはわかっているのですが、うまくできません。 エクセル2007で図のような表を作成しています。 A欄の「件名」のあ、い、う、は決まっていて、B欄の「数値」に当てはまる数字を入力すると、 C欄の「種類」に1~10はA、11~20はB、21以上はCという関数を入れます。 そこまではできたのですが、 別シートにAのみ、次のシートにBのみとシート毎に種類別のシートを作りたいのです。 オートフィルタだと数がたくさんあるので、関数で抜き出したいです。 お得意な方どうか、教えてください。よろしくお願いします。

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

  • ベストアンサー
  • bunjii
  • ベストアンサー率43% (3589/8249)
回答No.4

Sheet1に元データがあるとします。 種類Aのシート名はSheetA、種類BはSheetBのように定義したとして説明します。 SheetAのC1セルに種類の文字"A"を入力します。 SheetAのA2セルに次の数式を入力します。 =IFERROR(INDEX(Sheet1!$A$1:$B$6,SUMPRODUCT(LARGE((Sheet1!$C$1:$C$6=$C$1)*ROW(A$1:A$6),COUNTIF(Sheet1!$C$1:$C$6,$C$1)-ROW(A1)+1)),COLUMN()),"") A2セルをB2へコピーし、A2とB2を選択して下へ必要数コピーします。 SheetAの必要範囲(全範囲でも良い)を選択し、コピー&ペーストでSheetBへコピーします。 SheetBのC1セルの文字を"B"に変更します。 SheetCはSheetBに準じてコピー&ペーストで作成してください。 提示されたデータの範囲で数式を組み立てていますので実際のデータに合わせて行番号を変更してください。

kumakumalo
質問者

お礼

ありがとうございました!できました。うれしいです!! 後もしできたら 別のシートに、AとBの両方が混じったデータを抽出したシートも作りたいのですが、それもできますでしょうか?

その他の回答 (3)

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

No.2です。 前回は大きな勘違いをしていました。 無視してください。m(_ _)m

kumakumalo
質問者

お礼

いえ、でも考えていただきありがとうござました。また教えてください。

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

こんばんは! 今回の場合は種類が少ないので、IF関数のネストで対応できますが、 今後のために・・・ 種類がいくつでも対応できる方法です。 ↓のような対応表を作成しておきます。 そして、C2セルに =IF(B2="","",VLOOKUP(B2,E:G,3,1)) という数式を入れフィルハンドルで下へコピー! これで画像のような感じになります。 ※ 表を作成せずにやる方法としてはC3セルに =IF(B2="","",INDEX({"A","B","C"},MATCH(B2,{0,11,21},1))) という数式を入れ下へコピー! これでも同様の結果になると思います。m(_ _)m

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

ご質問の画像はご相談で書かれてるエクセル2007じゃありませんが、実際どっちを使ってるのでしょう。 ご利用のソフトのバージョンによって、簡単な関数で出来たり、結構メンドクサイ事をしなきゃならなかったりします。 ここでは画像のエクセル2003を含めて全部のバージョンで使える代わりに、数式自体はメンドクサイやり方でお話しすることにします。 【あなたにも必ずできる簡単な方法】 Sheet1に元データ  件名をB列  数値をC列  種類をD列 にそれぞれ配置する A1には「検索キー」と記入 A2には =IF(D2="","",D2&COUNTIF($D$2:D2,D2)) と記入、以下コピーしておく 「A」のシートの A1には件名、B1に数値と記入 A2には =IF(ROW(A1)>COUNTIF(Sheet1!D:D,"A"),"",VLOOKUP("A"&ROW(A1),Sheet1!A:D,2,FALSE)) B2には =IF(A2="","",VLOOKUP("A"&ROW(A1),Sheet1!A:D,3,FALSE)) と記入、以下コピーしておく 【数式はめんどくさいけどコピーだけするのは簡単な方法】 (もっとも似たようなご相談と回答は必ず毎日こちらのような相談室に寄せられるので、それらを見て出来なかったのなら改めていま教わってもやっぱり出来ないかもしれません) Sheet1に元データ  件名をA列  数値をB列  種類をC列 にそれぞれ配置する 「A」のシートの A1には件名、B1に数値と記入 A2には =IF(ROW(A1)>COUNTIF(Sheet1!C:C,"A"),"",INDEX(Sheet1!A:A,SMALL(IF(Sheet1!$C$1:$C$1000="A",ROW($C$1:$C$1000),9999),ROW(A1)))&"") と記入、必ずコントロールキーとシフトキーを押しながらEnterで入力、以下コピーする B2(簡易版)には =IF(A2="","",VLOOKUP(A2,Sheet1!A:B,2,FALSE)) と記入、以下コピーする

kumakumalo
質問者

お礼

すみません、エクセルは家のが2003だったので、その画面が出てしまいました。今会社のを確認したらさらに、2010でした。 そしてなんかうまくいきませんでした。。。 せっかく考えてくださったのに、ごめんなさい。 またよい方法がありましたら教えてください。ありがとうございました。

関連するQ&A