- ベストアンサー
マクロ ループ印刷(?)について
- VBA初心者です。データシート、プリントアウト用シート、担当IDシートがあります。マクロでループを入れ、担当ごとにデータを抽出し、プリントアウトします。
- 担当IDシートから担当IDをプリントアウト用シートに代入し、データシートから担当ごとのデータを抽出します。抽出したデータがゼロでない場合は印刷し、ゼロの場合は次の担当IDに移ります。
- 上記の処理を繰り返し、全ての担当IDのデータをプリントアウトします。コードと考え方を教えていただけると助かります。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
結局、担当IDシートとデータシートのIDを照合するより、 データシートにあるだけのIDを個々に抽出して印刷すれば、 いいのかなと思いました。 プリントアウト用シートは印刷範囲が指定されているとし、 個々のシート名は変更して下さい。 Sub test() Dim Dic As Object Dim ws1 As Worksheet, ws2 As Worksheet Dim r As Range, rr As Range Dim r2 As Range Dim key Dim i As Long Set Dic = CreateObject("Scripting.Dictionary") Set ws1 = Worksheets("Sheet1") 'データシート Set ws2 = Worksheets("Sheet2") 'プリントアウト用シート Set r2 = ws2.Range("A4") With ws1 For i = 2 To .Range("A" & Rows.Count).End(xlUp).Row If Not Dic.exists(.Range("A" & i).Text) Then Dic(.Range("A" & i).Text) = Empty End If Next Set r = .Range("A1", .Cells(Rows.Count, "I").End(xlUp)) For Each key In Dic.keys r.AutoFilter r.AutoFilter 1, key Set rr = .Range("A2", .Cells(Rows.Count, "I").End(xlUp)).SpecialCells(xlCellTypeVisible) ws2.Range("A4:I28").ClearContents rr.Copy r2.PasteSpecial xlPasteValues ws2.PrintOut Preview:=True 'プレビューがいらなければ、Preview:=True 削除 r.AutoFilter If MsgBox("続けますか", vbOKCancel) = vbCancel Then Exit Sub '不要であれば削除願います Next End With End Sub ご参考まで。
その他の回答 (2)
- n-jun
- ベストアンサー率33% (959/2873)
>是非、その方法でお願いします。 各シートのレイアウトの提示がないと、無理ですよ。
補足
大変失礼しました。 DatasheetにはA列~I列でA列に担当コードが入っています。 Printsheetには1~3行目までタイトルや項目名があり抽出データはA4:I28までの表となっております。 担当IDsheetはA1:A82まで今のところあります。 こんな感じで良いでしょうか? お忙しいところ恐縮です。宜しくお願いします。
- n-jun
- ベストアンサー率33% (959/2873)
・担当IDシートからIDを取得。 ・データシートにそのIDに該当するデータ(0でない)があれば、プリントアウト用シートに転記し印刷する。 ・そのIDのデータが0であるか、印刷を行なったら、次のIDを取得する。 ・全てのIDを取得したら完了。 と言う事ではどうでしょう?
補足
早速のご返答有難うございます。 そうですね。その方が一般的すよね。 方法を模索しているうちに脱線してしまいました。 是非、その方法でお願いします。
お礼
有難うございました。 イメージ通りのものが出来ました。 あとは微調整をして運用させたいと思います。 コードの内容を確認して勉強させていただきます。 ホントに有難うございました。