プロが教える店舗&オフィスのセキュリティ対策術

こんばんわ。

http://oshiete1.goo.ne.jp/qa5402281.html
↑で質問させていただいた続きです。

A列に商品番号
B列に商品名
C列に分類名

このようなエクセルでC列にはPCやTVといった分類名があり、分類名ごとにフィルターをかけて別シートにA列、B列、C列を列ごとコピペしたいです。

例えば、C列のPCという値はシート名がPCというシートにA,B,C列をコピペ、TVならシート名がTVというシートにコピペするという具合です。

分類毎のシートは既に作成してあるので、フィルターをかけてコピペする部分を自動化できないかと思ってます。

似たような質問を検索しましたが、どうもわかりやすいのが見つからなかったもので・・・

お知恵を貸してください。

ちなみにエクセルのバージョンは2003です。

よろしくお願いいたします。

A 回答 (3件)

シート1にすべての分類のデータがあって、それをPCやTVといった分類名の付いたそれぞれのシートに整理する方法ですが次のようにすればよいでしょう。


シート1では1行目に項目名があり、2行目からデータがあるとしてD2セルには次の式を入力して下方にオートフィルドラッグします。

=IF(C2="","",C2&COUNTIF(C$2:C2,C2))

これで将来データが追加されてもD列には分類ごとに番号が追加されますね。
そこで、すでに他のシートにはPCやTVといった分類の名前のシートがあり、それらのシートを含むブックが、一旦、保存され、それを再立ち上げした状態のブックで作業をしているものとします。
その上でPCのシートを選択し、その後にCtrlキーを押しながらシート見出しのところでTVなど他のシートをクリックします。これでそれらのシートは一つの作業グループとなります。
その状態でPCシートのA1セルには次の式を入力します。

=TRIM(MID(CELL("filename",A1),FIND("]",CELL("filename",A1))+1,10))

これで作業グループ内のシートのA1セルには自動的にシート名が表示されます。
PCシートの2行目には項目名を入力するとして、A3セルには次の式を入力して右横方向にオートフィルドラッグしたのちに下方向にもオートフィルドラッグします。

=IF(OR(COUNTIF(Sheet1!$D:$D,$A$1&ROW(A1))=0,COLUMN(A1)>3),"",INDEX(Sheet1!$A:$C,MATCH($A$1&ROW(A1),Sheet1!$D:$D,0),COLUMN(A1)))

この操作によって作業グループにあるすべてのシートに分類別のシートにデータが表示されます。最後にシート1を選択することで作業グループが解除されます。
シート1に新たなデータが入力されればそれにしたがって分類ごとにシートにも新たなデータが自動的に追加されます。
ところで分類ごとのシートでA1セルにシート名を自動で表示させる操作ですが、うまくいかないのでしたら各シートのA1セルにシート名を入力することでもよいでしょう。
    • good
    • 0
この回答へのお礼

帰り際に少し時間が空いたので試してみたら出来ました!

もっと会社でじっくりやりたいのですが、会社のルール上、定時以降無制限にオフィスにいることはできないので、確認がどうしても遅くなってしまいます。

でも今より大分作業が楽になる見通しが出来たのでほっとしています。

本当にありがとうございました。

お礼日時:2009/10/29 21:44

こんばんは!


参考になるかどうか判りませんが・・・

↓の画像のように表を作ってみました。

元データがSheet1で分類毎にSheet別に反映されるようにしています。

元データに1列作業用の列を使わせてもらっています。
それと分類別に数字を表示させるために、別にF・G列のような感じで
表を作成しておきます。

Sheet1の作業列D2セルに
=IF(C2="","",VLOOKUP(C2,$F$1:$G$3,2,0))
という数式を入れ、オートフィルで下へコピーします
一応1000行まで対応できる数式にしていますので
1000行目くらいまでコピーしておいても構いません。

全ての分類に関して同様の操作ですので
とりあえずTV(Sheet2)の分類だけの操作方法を書いておきます。
Sheet2のA3セルに
=IF(COUNTIF(Sheet1!$D$2:$D$1000,$B$1)<ROW(A1),"",INDEX(Sheet1!$A$2:$A$1000,SMALL(IF(Sheet1!$D$2:$D$1000=Sheet2!$B$1,ROW($A$1:$A$999)),ROW(A1))))

これは配列数式になってしまいますので、
この画面からコピー&ペーストしただけではエラーになると思います。
セル内に貼り付け後、F2キーを押すか、数式バー内で一度クリックします。
編集可能になりますので、
Shift+Ctrl+Enterキーで確定します。
数式の前後に{ }マークが入り配列数式になります。

そして、B3セルに
=IF($A3="","",VLOOKUP($A3,Sheet1!$A$2:$C$1000,COLUMN(B1),0))
(配列数式ではありません)
とし、B3セルのフィルハンドルでC3セルまでコピーします。

最後にA3~C3セルを範囲指定し、C3セルのフィルハンドルで下へコピーすると
画像のような感じになります。

このようなSheetを全ての分類別に作っておきます。

今後、Sheet1にデータが増えても一致するSheetに反映されるはずです。

尚、分類数が多い場合はSheet2以降のSheetをCtrlキーを押しながら、シート見出しをクリックしていきます。
(Shiftキーを押しながら最初と最後のSheetの選択でもOKです)
これでSheetのグループ化ができましたので
Sheet2の操作が全てのSheetに反映されます。
そして、各SheetのB1セルの数字部分と数式を少し変更するだけで
ちゃんと分類毎に反映されると思います。

以上、長々と書きましたが、
参考になれば幸いです。
的外れなら読み流してくださいね。m(__)m
「エクセルでフィルターで抽出した値を列ごと」の回答画像2
    • good
    • 0
この回答へのお礼

こちらはまだ試していませんが、画像付きでありがとうございます。

お礼日時:2009/10/29 21:46

こんばんは。



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

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

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

参考URL:http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/v …
    • good
    • 0

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