• 締切済み

VBAでオートフィルター コピー、ペースト

VBA初心者です。 膨大なデータの計算に悩んでおります。 ご教授ください。 工場の各商品に使われている材料の使用量を各商品と個数を一括で入力し、計算させるエクセルシートを作成したいのですが、 1商品に使用されている材料は5~10種と不特定です。 シート1のA行に品番コード、B行に個数が入っており。(200列程度) シート2に各商品に使用されている材料のマスターがあります。 A行品番コード、B行材料名、C~Fが材料のサイズ指示。 シート1のA5(商品リストの先頭)をセレクトし商品コードをコピー→シート2の材料マスターに移りオートフィルターで商品に使われている材料を選択→該当した材料、サイズ(行A~H)をコピー※列数は商品によって異なるので該当した全てをコピー→シート1の空白(仮にE5とする)にペースト→シート1のA6をセレクトしそれをA行が空白になるまで繰り返す。 という感じで出来るのかと思うのですが、いかがでしょうか。何しろデータが膨大で計算させるにも時間がかかってしまいそうですが・・・ また別な方法で同様な処理ができれば、それも合わせてお願いします。 不備ご不明な点あれば教えてください。

みんなの回答

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

質問説明が良くわからない。読解に苦労する。 イメージがつながらない。 シート、列、行を特定した模擬実例を書いて質問できないですか。 多列、多行有る場合は5-6列、10行ぐらいの例を作ること。 >計算に悩んでおります 計算ではなく、処理というようなものでは? 何か掛け算・足し算でもするのですか?個数の掛け算? >膨大なデータ 商品数x材料はいくらぐらい? 10x200?そんなに膨大とは見えないが。 >品番コード、B行に個数が入っており。(200列程度) なぜ200列?200行ではない? 普通エクセルはデータを上から下へ展開するもの。 ーー 実例でも挙げられないですか。 シート関係は3つ? シート1ー商品リスト(品番コードー個数)   品番コードは商品に対するもの?材料に関するもの?   商品らしいね> シート2ーマスタ 品番コード(商品に対応?)ー材料名ーサイズ シート3ー完成品(目指すシート)質問には名も出ない。 ーー 商品ーー>材料ーー>個数のブレークダウンの方法は? 商品(=商品コード)からそれを作る複数の材料をシート2のマスターから取ってくる。 サイズ別もとってくる? ==== (1)VBAで手作業でやるようなことを繰り返す方法はある。 (2)しかし商品ー>材料を検索する方法もあると思う。 (3)シート1を(マスタのキー順の)品番コードでソートし、 シート1とシート2をマッチングすればよい。 (4)大量なら、材料分のレコードを分離して作製し、ソートし、マスタとマッチングして、さらにソートして元に戻す手もあり、処理が早いかも知れない。 2以下はロジックになれて居ないとなかなかコードが作れない。 ーーーーー しかし全面的にVBAコードを回答者に書いてもらわないと、ヒントぐらいでは、プログラム作成がおっつかないのではと予想する。(#1のご回答への反応などから) 質問者には現状無理な課題では。 予想模擬実例 シート1 商品コード 個数 1122   34 1134   23 ・・・ シート2 商品コード    材料  型1 型2 ・・・ 1122     ネジ  42 16 1122     板   12  8 1122     モータ  1  2 1122     計器   3  1 1133     マイコン 1 ・・・ ーー シート3   商品コード 個数 1122  34 ネジ  42 16 ・・・ 1122     板   12  8 1122     モータ  1  2 1122     計器   3  1 ==== フィルタの操作の「マクロの記録」を取りどう繰り返しに持ち込むか どうフィルタ結果をコピー貼り付けするか 毎回変わる部分が有るので(例えば貼り付け先)それをどうするか 考えるほか無いでしょう。 ========= Googleで「オートフィルタ VBA コピー」で照会すれば http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_autofilter.html など 沢山、すぐ見つかる。こんな段階までもすぐ行き着かないようでは本件は難しいと思うが。

全文を見る
すると、全ての回答が全文表示されます。
  • FEX2053
  • ベストアンサー率37% (7987/21355)
回答No.1

EXCEL-VBAの基本が分かってるとして、ですね。 http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_autofilter.html http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_advancedfilter.html Range("xx").(Advanced/Auto)Filter でフィルタを掛け、 Range("xx").CurrentRegion.SpecialCells(xlCellTypeVisible).Copy でコピーする というのが基本的な考え方です。 なお、関連してこちらのサイトもチェックされると色々と有意義かもです。 http://www.moug.net/tech/exvba/

UOHIDE
質問者

補足

ありがとうございます。 参考にさせていただきます。 VBA初心者なのでサイト確認させていただきましたが、いまいちどれを使えばよいか解決までは時間を要しそうです。 ^^;がんばります。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • VBA のオートフィルタについて

    ExcelVBA初心者でございます。 2点質問がございます。 (1)エクセルVBAのオートフィルタの機能を使い、"マスタ0701"シートの13行目が”ABC”の行を、"検索結果"というシートにコピーしたいです。 以下のマクロを実行しますと、まず"マスタ0701"のB1のセル(13行目はブランク)がコピーされ、その下に13行目が”ABC”に該当する行がコピーされます。 なぜ、B1セルまでコピーされるのかご教示頂けますと幸いです。 (2)また検索結果だけでなく、オートフィルタのタイトル行もコピーするようにするにはどうしたら良いでしょうか? よろしくお願いいたします。 Sub 絞り込み() With Worksheets("マスタ0701").Range("A1") .AutoFilter Field:=13, Criteria1:="ABC" .CurrentRegion.SpecialCells(xlVisible).Copy Worksheets("検索結果").Range("A1") .AutoFilter End With End Sub

  • 初心者です!Excelのオートフィルタでコピーペースト

    ようやくエクセルを覚えてきたのに、色々な処理をまかされてもう混乱しています。 過去の質問を見ても、なかなかできません。。。 エクセルのSheet1とSheet2に同じ表があるのですが、 データが入力されている場所が違います。 たとえば、sheet1は   名前  情報1  情報2 1  a     100        500 2  c 3  a    200        600 4  c 5  a     500        500   sheet2は   名前  情報1  情報2 1  a 2  c    200       600 3  a 4  c    700       800 5  a sheet1のaのデータを、sheet2のcのデータを消さずに aのところに貼り付けたいのですが、うまくいきません。 500行近く、sheet1と2にはお互いのデータがあるので、 1行ずつのコピー&ペーストは膨大な時間がかかってしまいます。 どうか助けてください!

  • オートフィルター VBAでの設定について

    オートフィルターで0以外のものに絞って、 コピーしたいのですが、 値が0しかない場合にすべてのものをコピーするように なってしまうので、 コピーすることがないようにさせたいです。 例) Sub test() Sheets("Sheet1").Select Selection.AutoFilter ActiveSheet.Range("$A$2:$A$10").AutoFilter Field:=1, Criteria1:="<>0" Range("A2:A10").Select Range(Selection, Selection.End(xldown)).Select Selection.Copy End Sub このようなコードの場合にA2:A10の値が0しかなかった場合に コピーしている状態をなくしたいのですが、 どこのコードを変えたらいいでしょうか。 回答よろしくお願いいたします。

  • オートフィルターで抽出してコピー&印刷するマクロ

    いつもお世話になります。 エクセル2002です。 (1)オートフィルターでデータを抽出(部署ごと)する。(インプットボックスで) (2)抽出された行を1行ずつコピーし、【編集シート】のA1セルに貼り付け (3)【印刷シート】の印刷 (データが3行あれば3枚の印刷がしたいのです) 《データ》   A列  B列 1 (部署)(商品名) 2  01   商品1 3  01   商品2 4  02   商品1  5  02   商品3 ・・・・・・・・・・ ---------------- Sub Macro1() Dim 部署 部署 = InputBox("部署コードを入れてください") Selection.AutoFilter Field:=1, Criteria1:=部署 Range("A1").Select End Sub ------------------ ↑のマクロにどう追加すればよいのかわからないので、教えてください。 よろしくお願いします。

  • エクセルVBAのオートフィルタについて

    オートフィルタ後の範囲選択で教えてください。 1行目にタイトルがある表で Range("a1").AutoFilter Field:=2, Criteria1:="PC" Range("A1").CurrentRegion.Select と実行すると1行目のタイトル行を含めて商品がPCの行が セレクトされます。 オートフィルタを何度も実行した結果を別シートにまとめる為 2回目以降はタイトル行を含めずにセレクトしたいのですが やり方がわかりません。お知恵をお貸しください。

  • 文字列を検索しその列をコピーする(VBA)

    よろしくお願いします。 OS:WINDOWS 2000 PRO 環境:OFFICE 2003 エクセルのVBAについての質問です。 A列には数値コードが入っています。 そのコードは"1"と"2"に分類されてます。 マスターはSHEET1で、このマスターから コード1はSHEET2に、 コード2はSHEET3に 振り分けたいのですが、どうもうまくいきません・・・ A列にはコード"1" "2"以外に空白セルが存在します。 空白セルは無視したい。。。 それとこのデータはDBから抽出するのですが、 抽出したデータは規則性はありません。 抽出するごとに"1"と"2"と"空白"はランダムなので、 LOOP等のマクロを調べてやってみたのですが、出来なくて週末になってしまいました。 A列からコード1とコード2を検索して、 ヒットしたコードの行ごと各SHEETにコピーして、 なおかつ各シートA列の入力されていない一番下の セルにコピーしたいのですが、検索でヒットした 上から順番に。。。 これをLOOPと組合わせれば、各シートにコピーするのは 問題ないような気がします。。。 Sub AAA_BBB() .Copy Worksheets("Sheet2").Range("A65536").End(xlUp).Offset(1, 0) End With End Sub LOOP等で上記の条件を満たせる方法はないでしょうか。 ご教示を、よろしくお願いします。

  • VBAのオートフィルタのタイトル行

    3行目をタイトル行として、3行目以降(で13列にABCという文字列が入っている行)をセレクトすることは可能でしょうか? 以下のようなコードを書くと、1行目にオートフィルタがかかり、1行目もセレクトされてしまいます(13列にABCという文字列が入っている行は正しく選択されています)。 なお、A列はブランク、B1、B2には検索とは無関係の文字列が入っております。 どうぞ宜しくお願いいたします。 Sub 絞り込み() With Worksheets("マスタ0701").Range("B3") .AutoFilter Field:=13, Criteria1:="ABC" .CurrentRegion.Select '.AutoFilter End With End Sub

  • オートフィルタで出てきたものを他シートへコピー

    オートフィルタを使って出てきた内容を、他のシートにコピーさせたいのです。内容は、 でてきたシート1のC列の内容をコピーしたいです。       ↓ 2行目のC列の内容のみシート2のA1へコピー (1行目はタイトルがはいっているので・・)       ↓ 3列目以降のC列の内容をシート3のA1、A2、A3・・・ という風にコピーさせたいのです。 でてくる内容は1行かもしれませんし、2行だけかもしれません。 なんとかこれをどういうプログラムで組めばいいのかわからないので教えてくださいm(_ _)m 本当に困っています。 実際作ってみたのですが、1行目はタイトルが入っているので ただ単に2行目のC列をシート2へコピー、3行目のC列をシート3へ コピーというのはできるのですが、やはりシート3には順々に行を足してコピーしなくてはいけないので、そこら辺がどうしてよいかまったくわからずです・・・;; どなたかこの内容のプログラムを教えていただけないでしょうか・・助けてくださいm(_ _)m

  • EXCEL VBA オートフィルタの値コピー

    ほぼ初心者ですのでよろしくお願いします。 Sheet2にデータがありそのデータをオートフィルタで日付から抽出してSheet3にコピーして、その後Sheet1の表に該当項目をコピーする際についてですが、オートフィルタ後、1日当たり行は10~15行あります、そのうちG列にはデータが通常2つのセルに値があるだけでほかの行は空欄です。(日によってどの行になるかはわかりません)この2つのセルの値をそれぞれSheet1のM10とM11コピーしたいのです、 ちなみにセル番地は下記の方法で取得できましたが、値の取得ができません。 Range("D1").Value = Worksheets("sheet1").Range("A1").End(xlDown).Row Range("D2").Value = Worksheets("sheet1").Range("A65536").End(xlUp).Row Sub データコピー() Range("AB17") = Format(Sheet3.Range("A3").Value, "yy") Range("AE17") = Format(Sheet3.Range("A3").Value, "mm") Range("AH17") = Format(Sheet3.Range("A3").Value, "dd") Range("AK17") = Format(Sheet3.Range("A3").Value, "aaa") Range("D22") = Sheet4.Range("D3").Value Range("D25") = Sheet4.Range("E3").Value Range("H22") = Sheet4.Range("F3").Value Range("D22") = Sheet4.Range("G3").Value Range("L22") = Sheet4.Range("K3").Value Range("Q22") = Sheet4.Range("L3").Value Range("U22") = Sheet4.Range("M3").Value .   .   . End Sub

  • エクセルVBAですが教えてください。オートシェイプがコピーされません。

    またまたお世話になります。「入力」シートから「コピー先」シート にコピーして貼付したいのですが、コードで記述してうまくいき ません。すごく簡単なことかと思いますが、まったく解決できず にいます。何か足りないのでしょうか?よろしくご指導ください。 Sheets("入力").Select Range("A1:V20").Copy Sheets("コピー先").Range("A22").PasteSpecial Paste:=xlAll Application.CutCopyMode = False