- ベストアンサー
範囲が変化する可視セルをコピーするマクロ
エクセル2013で注文品の表を作成しています A~Pまで列があり列は固定、行数はデータ量に応じて毎回変化します そこで質問なのですが 1.Aの得意先No.をフィルターにかけて特定の得意先のデータのみ 抽出して別シートにコピーするというマクロを作りたいのですが、 行数が変化する可視セルをコピーするにはどのようにすればいいでしょうか? 2.1で作成した表はメールで客先に送る為、コピー元のデータがあるシートは 削除したいのですが問題ないでしょうか? VBA初心者なので分かりやすく教えていただけると助かります。 よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
データ例 http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/prog/prog04.html のデータを使わしてもらう。 「はじめに」のデータです。 Sheet1、Sheet2のシートを問題にする。 標準モジュールに フィルタ実行 ーー Fieldには列番号、 Criteria1:=の次に、抜き出す文字列、数字条件 を書き込む。 Sub test01() Worksheets("Sheet1").Range("A1").AutoFilter Field:=2, Criteria1:="りんご" End Sub ーー Sheet1のフィルタの結果をSheet2にコピー貼り付け。 Sub test02() Worksheets("Sheet1").Range("a1").CurrentRegion.Copy Worksheets("Sheet2").Range("A1") End Sub ーー フィルタを解除(参考。手作業でもよいと思う) Sub test03() Worksheets("Sheet1").Select Range("A1").Select Selection.AutoFilter End Sub ーー 結果 Sheet2に下記となる。 日付 商品名 単価 数量 金額 2010/4/1 りんご 150 15 2,250 2010/4/2 りんご 150 10 1,500 2010/5/1 りんご 150 30 4,500 2010/5/2 りんご 145 35 5,075 Sheet2へコピーができた段階で Sheet1との連動性はなくなる。Sheet1を削除しても、Sheet2は影響を受けない。
その他の回答 (1)
- keithin
- ベストアンサー率66% (5278/7941)
元のデータのシート名は「元データ」だとして A:P列にデータがあるとして 1行目はタイトル行で2行目からデータが記入してあるとして 仮にaというデータを抽出するとして sub macro1() dim s as string ’抽出したいデータの指定 s = "a" ’別途質問して適宜作成する事 ’抽出 worksheets("元データ").select ’適切に修正する事 activesheet.autofiltermode = false range("A:P").autofilter field:=1, criteria1:=s activesheet.autofilter.range.copy ’転記 worksheets.add after:=worksheets(worksheets.count) on error resume next activesheet.name = s activesheet.paste ’後片付け application.displayalerts = false worksheets("元データ").delete application.displayalerts = true end sub
お礼
ありがとうございます。 教えていただいた内容で試してみてます。
お礼
ありがとうございます。 リンク先のページの内容は分かりやすいですね。 参考にしながら試してみます。