• ベストアンサー

エクセルで表の一部を抽出

 こんにちは。教えて下さい。  エクセルで以下のような表があったとします。 メーカー   品番    単価 ソニー    ABCD  5000 東芝     EFGH  7000 ビクター   JKLM  2000 東芝     PRQS  4000 ビクター   TUVW  5000 東芝     XYZ&  2000  この表の中から、特定のメーカーのみを抽出するような方法はあるでしょうか。つまり、元表をどんどん入力していったときに、自動的に別の場所に、 東芝     EFGH  7000 東芝     PRQS  4000 東芝     XYZ&  2000  というような表が作成されていく、というような関数はあるでしょうか? VLOOKUPあたりを使ってみるのですがうまくいきません。  もちろん(笑)マクロなどを使わずにやりたいのですが、うまい方法があるでしょうか?

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

  • ベストアンサー
  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.3

こんにちは。maruru01です。 マクロを使わずに関数でやるとなると、結構複雑になります。 まず、元の表がSheet1のA~C列にあるとします。 そして、「東芝」のデータのみをSheet2のA~C列に表示します。 なお、Sheet2も1行目は項目名とします。 Sheet2のA2に、 =IF(COUNTIF(Sheet1!$A:$A,"東芝")>=ROW(1:1),INDEX(Sheet1!A:A,SMALL(IF(Sheet1!$A$2:$A$10="東芝",ROW(Sheet1!$A$2:$A$10)),ROW(1:1))),"") と入力して、[Ctrl]と[Shift]を押しながら[Enter]を押して決定します。 (数式の両端に「{}」が付いて、配列数式になります。) そうしたら、これをB2、C2へコピーします。 さらに、下の行へ必要なだけコピーします。 (元のデータ数分コピーすれば十分です。) なお、元の表のデータ範囲は適宜変更して下さい。 (元の表で入力する可能性のある最大範囲をあらかじめ指定しておきましょう。) また、配列を使用しているため、この最大範囲が大き過ぎると非常に重くなりますので注意して下さい。 データ量が多いなら、オートフィルタやフィルタオプション(さらにそれをVBAで)でやった方がいいと思います。

kobarn
質問者

お礼

 こんにちは。回答ありがとうございます。  しかし、この短時間で良くあれだけの複雑な式ができますねえ。尊敬しちゃうなあ。  やってみましょう。しかし、元表が相当大きいのでだめかも。

その他の回答 (4)

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

関数はデータ抜き出しは不得手です。しかしやるならつきあいます。あまり方法はなく、この系統の解き方はそのうちの1つでしょう。 本邦初公開(ちょっと大げさかな?)の解法。 「東芝」の現われるのはその列で何番目かと言う上行からの番数を出し、それを頼りに抜き出すというロジックでやります。 (データ) 簡単のためA1:B11の2列の例にします。 東芝 a 松下 b 東芝 c シャープ d 東芝 e 三洋 f 東芝 g サムスン h タイガー i TOTO j 東芝 k (関数式) 余分な列を1列使います。E列とします。 E1に=COUNTIF($A$1:A1,"東芝") といれ、E2以下に複写します。$の入れる場所がミソです。 値は 1 1 2 2 3 3 4 4 4 4 5 5 となります。 (関数式) G列に東芝だけ持ってくるとして、 G1に=OFFSET($A$1,MATCH(ROW(),$E$1:$E$15,0)-1,0) と入れ、G2以下最少でも、G5(5個あるから)まで複写してください。東芝が並びます。 H1に=OFFSET($A$1,MATCH(ROW(),$E$1:$E$15,0)-1,1) といれ、H5まで複写します。 a c e g k となります。 G6以下に複写すると、#N/Aが出ますが、これの消し方はご存知だとして略します。 $E$1:$E$15など15と言う数字が出ますが、入力予定最下行数で置換えて下さい。 C、D列に情報(データ)があるとき、I,J列に持ってくる式の変更箇所は判りますね。

  • free-goo
  • ベストアンサー率18% (28/155)
回答No.4

私も マクロやVBAは詳しくなく 素人感覚でエクセルをしているものです よく似た事をしたことがありますので 暇つぶしにでも見て下さい。 元表をsheet1 抽出後をsheet2に・・・ 元表のA列に数式をいれます。 1行目は 数字の「0」ゼロです 2行目に計算式 if(B2=sheet2!$A$1,A1+1,A1) 3行目以降は 2行目の数式をコピーします。 元表は 計算式・メーカー・品番・単価になります。 抽出後のsheet2のA1の部分に 抽出したい メーカー名を入れます。例でいくと「東芝」 そうすると元表は 0  メーカー   品番    単価 0  ソニー    ABCD  5000 1  東芝     EFGH  7000 1  ビクター   JKLM  2000 2  東芝     PRQS  4000 2  ビクター   TUVW  5000 3  東芝     XYZ&  2000 となっているはずです。 抽出後ほうで VLOOKUP関数を使用れば 出来ると思いますが・・・・

noname#5584
noname#5584
回答No.2

フィルタを掛けて、指定条件のデータのみ表示した後、表示行/列のみをコピーし、別のシートに貼り付ければOKです。 一例ですが、Sheet1の表示行/列をSheet2に貼り付ける場合、下記の要領です。 Sub Test() With Application .Worksheets(1).UsedRange.SpecialCells(xlCellTypeVisible).Copy .Worksheets(2).Paste End With End Sub ・・・ですが、 > マクロなどを使わずにやりたい というご希望ですので、残念ながら無理です。

kobarn
質問者

お礼

 こんにちは。素早い回答ありがとうございます。  やっぱりマクロを勉強しなきゃなあ。

  • kumi-n
  • ベストアンサー率52% (97/185)
回答No.1

メーカー 品番 単価 の行を1行選択。 データ → フィルタ → オートフィルタ を設定する。 メーカー▼ 品番▼ 単価▼ と表示されます。 あとは▼の所をクリックし東芝を選択すれば東芝だけが抽出されます。 これではだめですか?

kobarn
質問者

お礼

 こんにちは。さっそく回答ありがとうございます。  なるほど・・・できますね。しかしこれだと、元表を打ち終わったあとにやらなくてはなりませんね。うーん、でもいいかなあ・・・。

関連するQ&A