
VBA・オートフィルタで抽出をFor~Nextで実現するには?
お忙しいところお世話になります。
表題のとおり、VBAを使い、オートフィルタで抽出→貼り付け処理→移動を行いたく構文を考えています。
が、、どうもうまくできず、困っています。
自分で現状考えたコードは以下のとおりです。
--------------------------------------------------------------
Sub 貼り付ける()
For i = 1 To 3
Worksheets("集計表").Cells(2.1).AutoFilter Field:=1, Criteria1:=i
Range("A1").CurrentRegion.Copy Destination:=Worksheets(i).Range("A1")
Worksheets(i).Move
Next
End Sub
--------------------------------------------------------------
オートフィルタで選択する箇所は、管理番号というものがふられており、それが処理回数と一致しています。なのでオートフィルの部分を
Criterial=iとしてみたのですが、ここが違うのでしょうか・・・。
管理番号数=処理数なので、1→2→3と順に処理をさせていきたいのです。
オートフィルタ後のの貼り付け処理は、とりあえず上記処理を行う前に貼り付けようの空シートが出来ているのでWorksheets(i)としてみましたが考えはあっているでしょうか。
(シート名=管理番号で、新シートを作成する部分までは、以前作成したので出来ています)
類似の質問も見受けられますが、そこから自分のものを手直しするまで噛み砕く能力が低く、後学のためにも自分で考えたものにアドバイスいただけたらと思いこちらで質問させていただきます。
ご迷惑かけますがアドバイス頂けますと幸いです。
何卒宜しくお願い致します。
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
質問の意味を捉えてないかも知れない。
下記を実行してみて
Sheet2に
管理番号内容
1a
3b
2c
4d
3e
1f
2g
2h
3i
1j
5k
とテストデータを作った。
Sheet3・・Sheet7の繰り返し回数の5シートを用意した。
ーー
コード
Sub test01()
For i = 1 To 5
Worksheets("Sheet2").Activate
ActiveSheet.Range("A1:B1").Select
Selection.AutoFilter
Selection.AutoFilter Field:=1, Criteria1:=Str(i)
d = Worksheets("Sheet" & i + 2).Range("A65536").End(xlUp).Row
Worksheets("Sheet2").Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible).Select
Selection.Copy _
Worksheets("Sheet" & i + 2).Range("A" & d + 1)
Selection.AutoFilter
Next i
End Sub
ーーー
結果
Sheet3、Sheet4,・・Sheet7の5シートに
Sheet3
管理番号内容
1a
1f
1j
Sheet4
管理番号内容
2c
2g
2h
・・・
と分散した。
こういうものが希望かな。
この回答への補足
imogasi様
おはようございます。昨日はご回答どうもありがとうございました。
説明が足らず色々と推測頂いてしまいお手数かけました・・・。
おっしゃるとおりの結果がイメージしているものです。
手元のテストデータ上、おかげさまでうまくいきました。
ありがとうございます・・・!
今日会社でも同様の趣旨でためしてみようと思っています。
(回答はその後締め切ります)
うまくいきそうな予感がします。
随分日があいてしまいましたが、上記回答どうもありがとうございました。また遅くなり大変大変失礼致しました。おかげさまでフィルタごとで抽出の部分はうまく動くことが出来ました。
一応後学のために教えていただけると幸いなのですが、
下記の理解は正しいでしょうか?
・VBAのオートフィルタはA1にあることが前提で、そうでない場合は
コードを書き換えてもうまくいかない
(会社での表はA7からAL7まででフィルタがかけてあるのですが、
ActiveSheet.Range("A1:B1").Selectのところを、A7:AL7にしても
うまくかからず、もしかして、そういうものなのかなと思いました。
色々調べたのですが明確な回答が見つからず、ご存知だったら教えていただけないでしょうか。)
・(本質問の場合)フィルタをかけた部分のコピーは可視セルだけ値を貼り付けで行っている。このような場合、抽出対象となった表以外のセルはコピーできない
(実は、実際は使っている表の下に表とは別で
各種データや数式が入っているところがあり、関数のSUBTOTALでフィルタに応じた値を出し、その値をそのまま値貼り付けも出きればと思っていたのですが、どうもそのSUBTOTALの別表はコピー時に認識されず、貼り付けが出来きませんでした。)
お礼欄としてはふさわしくなく、かつ大変失礼なお願いなのですが
ご存知でしたら教えて頂けると幸いです。
No.2
- 回答日時:
コピー元シートが左から3番目以内に存在していて、自分自身を処理しようとしていませんか?
(集計表シートがシート左下のシートタブの左3つ以内に存在すると処理対象を自分自身を含めてしまいます。)
またコピー元シートを誤って修正しないようにシート保護をかけていませんか?
おそらく上記2点が原因の複合的エラーだと思います。
For i = 1 to 3
の下で
If Sheets(i).Name = "集計表" Then
などで自分自身を処理対象から外すロジックを追加したほうがよいでしょう。
No.1
- 回答日時:
Sub 貼り付ける()
For i = 1 To 3
'複数のブック、シートを扱う際は必ずオブジェクトを指定するようにします
ThisWorkbook.Worksheets("集計表").Cells(2.1).AutoFilter Field:=1, Criteria1:=i
'MOVEを行うとシートが減るためインデックス番号が変わります
'コピー先シートのインデックス番号は常に1です。
ThisWorkbook.Worksheets("集計表").Range("A1").CurrentRegion.Copy Destination:=Worksheets(1).Range("A1")
'ここも上同様、シートインデックス番号は常に1になります。
Worksheets(i).Move
Next
End Sub
この回答への補足
早速のご回答ありがとうございます。
先ほどに引き続き、何度もアドバイス頂きお手数かけてしまい恐縮です。
なぜか、
ThisWorkbook.Worksheets("集計表").Range("A1").CurrentRegion.Copy Destination:=Worksheets(1).Range("A1")
のところでエラーが出てしまいます。実行エラー1004とのこと・・・
何か注意すべきことはありますでしょうか・・
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセルのマクロで対象ごとにシート分けしてその内容をセルに書き込みたい 9 2022/08/24 13:23
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) 前回ご教授いただいたコードに覚えたてのループ処理で品名りんごAから順に20回for nextでループ 7 2023/01/13 22:01
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Visual Basic(VBA) 他のシートからコピーする下記マクロで貼付け位置をWorksheets(1).Range("A3")の 8 2023/01/30 18:48
- Visual Basic(VBA) 複数シート一括作成後に、特定範囲の数式は値で貼り付けしたい 3 2022/10/07 11:18
- Visual Basic(VBA) VBAで最新のデータを別シートに転記する方法をお教えください。 3 2022/04/07 19:20
- Visual Basic(VBA) エクセルVBAコピー 2 2022/06/08 21:45
- Visual Basic(VBA) コード名シートA列と集計シートA列のコードが一致したら、コード名シートA5からk12の範囲をコピーし 1 2022/08/29 23:46
- Visual Basic(VBA) 複数シートの複数列に入力されているデータを重複なしで抽出するVBAを作りたいです。 9 2022/06/17 10:33
このQ&Aを見た人はこんなQ&Aも見ています
-
VBA オートフィルター繰り返し
Visual Basic(VBA)
-
VBA オートフィルタで抽出したものを連続貼り付け
その他(Microsoft Office)
-
Excelオートフィルタで複数のセルの値を参照して抽出したい
Excel(エクセル)
-
-
4
VBAのオートフィルターで該当行がない場合に処理を止めたい
Excel(エクセル)
-
5
マクロ オートフィルタの検索値を所定のセルから参照
Excel(エクセル)
-
6
VBA(エクセル)で自動的にボタンをクリックさせるには
その他(プログラミング・Web制作)
-
7
数式による空白を無視して最終行を取得するマクロ
Excel(エクセル)
-
8
オートフィルタで抽出したデータを別シートの最終行に追加させたい。
Excel(エクセル)
-
9
Excel VBAでオートフィルタで抽出した列データを別シートの最終行にコピーするには
Visual Basic(VBA)
-
10
VBA 変数名に変数を使用したい。
Visual Basic(VBA)
-
11
複数指定セルの可視セルのみを別シートに転記するVBAについて
Visual Basic(VBA)
-
12
バックグラウンドのプロセスのエクセルを閉じる方法
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excel、同じフォルダ内のExcel...
-
エクセルの複数シートの保護を...
-
前の(左隣の)シートを連続参...
-
別シート参照のセルをシート毎...
-
エクセルでファイルを開いたと...
-
エクセル 計算式も入っていない...
-
VBAでシートコピー後、シート名...
-
エクセルVBAでパスの¥マークに...
-
エクセルで前シートを参照して...
-
Accessのスプレッドシートエク...
-
Excelで同じシートのコピーを一...
-
エクセルで毎回1枚目のシートを...
-
特定のシートの削除を禁止した...
-
Excelで金銭出納帳。繰越残高を...
-
Excelのシートを、まとめて表示...
-
複数のピボットを同じフィルタ...
-
エクセルで複数シートを別のシ...
-
エクセルでファイル保存時に複...
-
別シートの最終行に貼り付けす...
-
特定のセルだけ結果がおかしい...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
特定のセルだけ結果がおかしい...
-
エクセルの複数シートの保護を...
-
前の(左隣の)シートを連続参...
-
別シート参照のセルをシート毎...
-
エクセルで前シートを参照して...
-
Excel、同じフォルダ内のExcel...
-
特定のシートの削除を禁止した...
-
EXCEL:同じセルへどんどん足し...
-
エクセル 計算式も入っていない...
-
Excelで金銭出納帳。繰越残高を...
-
複数シートの特定の位置に連番...
-
エクセルでファイルを開いたと...
-
シートの保護のあとセルの列、...
-
Accessのスプレッドシートエク...
-
VBAで条件によりフォントサイズ...
-
VBAでシートコピー後、シート名...
-
エクセルで前のシートを連続参...
-
エクセルVBAでパスの¥マークに...
-
EXCELで同一フォーマットのシー...
-
Excelで同じシートのコピーを一...
おすすめ情報