• ベストアンサー

エクセルでフィルターで抽出した値を列ごと別シートにコピーするには

こんばんわ。 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です。 よろしくお願いいたします。

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

  • ベストアンサー
  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.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セルにシート名を入力することでもよいでしょう。

top12345
質問者

お礼

帰り際に少し時間が空いたので試してみたら出来ました! もっと会社でじっくりやりたいのですが、会社のルール上、定時以降無制限にオフィスにいることはできないので、確認がどうしても遅くなってしまいます。 でも今より大分作業が楽になる見通しが出来たのでほっとしています。 本当にありがとうございました。

その他の回答 (2)

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

こんばんは! 参考になるかどうか判りませんが・・・ ↓の画像のように表を作ってみました。 元データが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

top12345
質問者

お礼

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

  • ka_na_de
  • ベストアンサー率56% (162/286)
回答No.1

こんばんは。 参考になりそうなページを紹介します。 がんばって応用してください。 http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_furiwake.html

参考URL:
http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_furiwake.html

関連するQ&A

  • Excel VBA - 列をシート別に分ける

    Excelブックにsheet1のみあり、A~BIを使った表があります。 G列が社名で、20社(A社、B社、C社・・・)くらいが出てきます。 このうち、特定の4社(B社, D社, G社, I社)のみのデータを、その社名をシート名にして書き出したいと思っています。 つまり、以下を4社分やるということです。 1. G列を"B社"でオートフィルタをかけて、フィルタ結果をコピーする。 2. 新規シートを挿入して、シート名を"B社"にして、フィルタ結果を貼り付ける。 お願いします。

  • エクセルで一覧から値を検索して抽出

    エクセルで一覧から値を検索して抽出 エクセル初心者です まる一日がんばりましたがギブアップです。 (今日の成果ゼロで上司の目が痛いです。。) 下のようなシートが2つあり、 シート2[A2からA51]の売上ランキングから シート1[B2からCX9000]を検索して →商品名をシート2のB2からB51に表示させたいと思っています ※本来ならばVBAですべき計算かもしれませんが関数で教えていただけるとうれしいです 何卒よろしくお願いいたします (シート1) A列 B列   C列   D列 時間 商品あ 商品い 商品う・・ 0時 1098 7232 1211 1時 3460 5656 4342 2時 9843 9843 9322 3時 9843 9977 2323 4時 1111 3232 2323 5時 4783 8045 3874 ・・ ※商品名は約1,000個 ※時間は日付含め約8,000行 (シート2) A列     B列 ランキング  商品名 9977  (  ) 9843  (  ) 9322  (  ) 8425  (  ) 8045  (  ) ・・ ※ランキングは50位まで

  • EXCEL 2枚のシートの比較・抽出(別パターン)

    iwao32と申します。 EXCELについてお教え下さい。ど素人なので、なるべく詳しくお教えいただけると幸いです。 先日同じような質問をさせていただいたのですが、別パターンの質問です。 以下の例で示します。 Sheet1                        Sheet2 A列    B列    C列              A列 3      30     c               2 5      50     e               4 1      10     a               5 4      40     d  2      20     b という2枚のSheetがあるとき、Sheet1のA列とSheet2のA列を比較して、Sheet1の中で、Sheet2のA列にあるものだけ、Sheet3に、 Sheet3 A列    B列     C列 2      20      b 4      40      d 5      50      e というものを作りたいのですが、やり方をお教え下さい。 よろしくお願いいたします。

  • エクセルの順位抽出について

    Sheet1のA列にコード、B列に商品名、C列に分類 D列に売上数、 E列に売上金額を入力した一覧表があります。 A_1:1000 B_1:牛肉 C_1:食品 D_1:20 E_1:3000 A_2:1050 B_2:お茶 C_2:飲料 D_2:18 E_2:3010 A_3:2000 B_3:鉛筆 C_3:文具 D_3:12 E_3: 900 A_4:2050 B_4:お米 C_4:食品 D_4:12 E_4:9010 A_5:3000 B_5:牛乳 C_5:飲料 D_5:25 E_5:2000 A_6:3050 B_6:定規 C_6:文具 D_6:28 E_6: 700 中略 A_300:10000 B_300:肉まん C_300:食品 D_300:38 E_300:9000 1.食品対象で売上金額の上位20のコードをSheet2のA列に表示 2.全商品対象で売上金額の上位20のコードをSheet3のA列に表示 上記の様な抽出をしたいのですがどの様な関数を使用すれば良いでしょうか? (オートフィルタを使用してのコピペという手作業をなくすためにSheet1の内容が更新されれば自動でSheet2,3の内容も更新されている のが希望です) よろしくお願いします。

  • EXCEL データベースより別シートに抽出

    Sheet1に商品の受注状況をリストにしています。 A列-オーダーNo、B列-顧客No、C列-顧客名、G列-商品Aの注文数、H列-商品Bの注文数、、、、J列-商品Dの注文数、というように。これをデータベースとして、次のような事をするにはどのようにすればよいでしょうか? 商品の入荷はバラバラです。入荷した時点で、その商品の出荷指示書を顧客毎に作り倉庫に渡します。 そこで、、、 Sheet2に出荷指示書を作ります。 A1にオーダーNoを入力するとB1に顧客名が表示されます(これは出来ます)。 たとえば今回は商品Bが入荷したとして、A7に商品Aのコードを入れると、この顧客の商品Aに対する注文数がB8に表示されるようにしたいのですが、それが出来ません。。欲を言えば、もしその顧客が商品Aを注文していなければ、B8に「0」または「×」が表示されると尚良いのですが。 よろしくお願い致します。

  • EXCELで一致する文字列を抽出する方法

    EXCELに関する質問です。 ファイル1に売上デ-タがあります。    A    B   C   D 1 商品名 品番 単価 個数 2  あ    A1  100   3 3  い    A2  110   10 4  う    A3   120   5 5  は    A4  130   3 6  ひ    A5  140   7 7  ふ    A6  150   11 8  へ    A7  160   6 9  ほ    A8  170   3 ファイル2に特定の商品名のリストがあります。   A    B   C 1 商品名 2  い 3  ろ 4  は 5  に 6  ほ 7  へ 8  と 9  ち 10  り 11  ぬ ファイル1のSHEET2に    A    B  C  D 1 商品名 品番 単価 個数 2  い    A2  110  10 3  は    A4  130   3 4  へ    A7  160   6 5  ほ    A8  170   3 の様に抽出する方法ですが、商品名が単純な文字列のときは フィルタ-の詳細設定で出来ますが、 商品名が  [8/1発売] 20%OFF  い A2 の様なキャッチコピ-付の文字列の場合、抽出することが出来ません。 (ファイル1・2共にキャッチコピ-付の商品名です。) この場合でも抽出できる方法をご教授いただけないでしょうか? 宜しくお願い致します。

  • エクセルで別シートの値を取得したいです。

    エクセルで質問があります。 別シートからセル値を取得したいです。 ただ、セル番地は行番号、列番号で指定し、 行、列番号はセルに入力してある値を使いたいです。 例 Aシート(値格納シート) B1セル値=1000 -------------- Bシート(値取得シート) A列=行番号入力 B列=列番号入力 C列=Aシートの取得関数 A2セル値=1 B2セル値=2 C2セル=1000(取得値) C2セルの関数に、A2とB2の値を使って Aシートのセル値を取得したいです。 よろしくお願いします。

  • EXCEL(2枚のSheetの比較・抽出)

    iwao32と申します。 EXCELについてまた教えてください。(まだまだど素人で、基本的な質問で申し訳ありません。) 以下の例で示します。 Sheet1                        Sheet2 A列     B列     C列           A列 1       10      a            2 2       20      b            4 3       30      c            5 4       40      d 5       50      e という2枚のSheetがあるとき、Sheet1のA列とSheet2のA列を比較して、Sheet1の中で、Sheet2のA列にあるものだけ、Sheet3に、 Sheet3 A列     B列     C列 2       20      b 4       40      d 5       50      e というものを作りたいのですが、やり方をお教えください。 よろしくお願いいたします。

  • 《エクセル》リストから同じ分類のデータのみコピーする

    いつもお世話になります。 別のシートに、下記の形のリストがあります。  列A   列B   列C   列D (商品名)(大分類)(中分類)(売上金額)  商品A   あ    A    1000  商品B   あ    B    900  商品C   い    A    800  商品D   あ    A    700  商品E   あ    C    600  商品F   あ    F    500 マクロを組んで、このリストの大分類が"あ"、中分類が"A"に該当する商品名と売上金額のみをコピーして、今開いているシートの列A・列Bに連続したデータとして貼り付けたいのですが、うまくいきません。 ご教授宜しくお願い致します。

  • 3つのシートから適合する項目を抽出したい

    エクセル関数にて何かいい方法があればお教えください。 シート名"商品名A"、シート名"商品名B"シート名"商品名C"と3つのシートがあります。 それぞれのシートにはA列からW列まで統一した項目が入っているのですが、 商品Aを購入した顧客が商品Bや商品Cを購入した場合で、今まではそれぞれの商品の顧客番号を基準にVlookupでAとBとCを照らし合わせ、 A/B/C、A/B、A/C、B/C、Aのみ、Bのみ、Cのみの購入と分けて更に、担当IDをCOUNTIFを使って集計していました。 現状だと何回も同じ作業を繰り返していてとても面倒なんです。 もっと効率の良い関数式はありますでしょうか? 最終的には別のシートの列にそれぞれの商品購入項目(A/B/C、A/B・・・)を、行に営業IDを入れて集計をしたいと思っております。 またはマクロを組んだ方が良いのでしょうか?マクロはまだ初心者で余り自信が無いのですが。。。 どなたかお知恵を拝借頂けないでしょうか。よろしくお願いいたします。

専門家に質問してみよう