プロが教えるわが家の防犯対策術!

VBA初心者です。
入門書などで勉強中ですが、手に負えません。
助けてください。


  A     B   C 
 名前   体重 分類
1ニワトリ  ○  鳥
2ヒラメ   ■  魚
3スズメ   △  鳥
4インコ   ▼  鳥
5タイ    ◇  魚
6イワシ   ◆  魚

というような入力シートの表があります。(下にたくさん続きます)

このデータを分類別にしてワークシートを作成しています。

そこで、次のようなVBAを書きたいのです。
VBAを実行すると、

別シートに分類別に入力表のデータが振り分けられて、
魚がA,B列
  A     B
 名前   体重
1ヒラメ   ■
2タイ    ◇
3イワシ   ◆

鳥がD,E列
  D     E
 名前   体重
1ニワトリ  ○
2スズメ   △
3インコ   ▼


と入力シートに入力されたデータが振り分けられるものです。
どうか、よろしくご指導お願いいたします。

A 回答 (5件)

1、2次元配列、分類(x)、名前(x、y)、体重(x、y)等としてデーターを入力すれば、処理できると思います。

xは分類の数、yは名前の数。

入力シートのデーター1行読み込み

分類が、同じ
  名前が違う
    データー代入
  名前が同じ
    何もしない 
分類が、違う
  分類、名前、体重データー代入

入力データー読み込みに戻る  (繰り返し) 
全データー 読み込んだら終わり

データーを、シートに表示

面倒ですが、こんな流れではどうでしょう?
    • good
    • 0

こんばんは!


VBAでないので参考にならなかったら読み流してください。

色々方法はあるかと思いますが、
↓の画像のような感じでやってみました。
左側が元データのSheet1で、それを右側のSheet2に振り分けるようにしています。

作業用の列を使っていないので配列数式になってしまいます。
とりあえず元データが1000行まで対応できる数式にしていますが、
範囲指定等はデータ量によってアレンジしてみてください。

Sheet2のA3セルに
=IF(COUNTIF(Sheet1!$C$2:$C$1000,$A$1)<ROW(A1),"",INDEX(Sheet1!$A$2:$A$1000,SMALL(IF(Sheet1!$C$2:$C$1000=A$1,ROW($A$1:$A$999)),ROW(A1))))
この画面からそのままコピー&ペーストしてしまうとエラーになると思いますので
A3セルに貼り付け後、F2キーを押すか、数式バー内で一度クリックします。
編集可能になりますので、
Shift+Ctrl+Enterキーで確定します。
そうすると数式の前後に{ }マークが入り配列数式になります。

そして、B3セルに
=IF(A3="","",VLOOKUP(A3,Sheet1!$A$2:$B$1000,2,0))
(これは配列数式ではありません。)

A3・B3セルを範囲指定し、B3セルのフィルハンドルでD3セルまでオートフィルでコピーします。

最後にそのD3セルのフィルハンドルで下へコピーすると
画像のような感じになります。

以上、長々と書きましたが
参考になれば幸いです。
他に良い方法があれば読み流してくださいね。m(__)m
「エクセルVBA:表の内容を分類別に振り分」の回答画像4
    • good
    • 1

参考になりそうなページを紹介します。



がんばって応用してみてください。

たくさんのヒントが得られると思いますよ。

http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/v …

参考URL:http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/v …
    • good
    • 0
この回答へのお礼

何とかなりました!
ありがとうございます。

お礼日時:2009/11/17 17:39

勉強法のアドバイス。



とりあえず手でそのマクロを記録してソースをみる。

わからないとこがあったらヘルプのMEVBリファレンスを見て調べる。

これを繰り返せばいつかできる。

ぱっと見た感じ思いつくのは 値の入ったセル範囲をセレクト→魚でオートフィルタ→コピー → 貼り付け先に貼り付け → 鳥も同様に。

あるいは、分類の列をdo until ""(空白セル) で一セルごと下へループ。もしアクティブセルが魚だったら貼り付け先へ貼り付けて一つ下のセルをアクティブにして元のシート戻る 魚終わったら鳥へっていう地道なやつでもいいし。
    • good
    • 1

文章だけでは条件が不十分です。


魚、鳥、獣、爬虫類の5分類しかないと決まっていて順番もこの通りにします。
という場合と
データを読みながら新しい分類が出たら新しい列を用意する場合(この場合順番は出現順になる)。
で処理がかなり異なります。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!