- ベストアンサー
エクセルマクロで改ページプレビュー
お世話になります。 Sub 行挿入() For r = 3 To 50 If Len(Cells(r, 2)) = 13 Then Sheets("sheet2").Select Rows("1:55").Select Selection.Copy Rows("56:56").Select Selection.Insert Sheets("sheet1").Select End If Next End Sub というコードを書いたのですが、「End If」の前に(r-1)ページ目として印刷範囲を55行追加する、というコードを考えたのですがうまくいきません。教えていただけないでしょうか。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 ご質問のタイトルと内容が微妙に違うようですが? ご提示のコードを見る限り、 Sheets("sheet1")のB3:B50をLoopして、文字列の長さが13だったら Sheets("sheet2")の1行目から55行目までを56行目の前に挿入コピーする。という解釈で良いですか? その場合、先のLoopでコピー回数を調べて、まとめて追加する...感じに変えて Sub test() Dim rng As Range Dim i As Long For Each rng In Sheets("sheet1").Range("B3:B50") If Len(rng.Value) = 13 Then i = i + 1 Next rng If i > 0 Then With Sheets("sheet2") .Rows("1:55").Copy .Rows("56").Resize(i * 55).Insert Application.CutCopyMode = False '.PageSetup.PrintArea = .Range(A1).Resize((i + 1) * 55, 10).Address End With End If End Sub 念の為、 >(r-1)ページ目として印刷範囲を55行追加する というのが、追加コピーした範囲に合わせて印刷範囲を設定するという意味なら、 コメントアウトした .PageSetup.PrintArea = .Range(A1).Resize((i + 1) * 55, 10).Address を活かしてください。 (...Resize((i + 1) * 55, 10)の 10 は実際の列数にあわせて変更が必要です)
その他の回答 (1)
- imogasi
- ベストアンサー率27% (4737/17069)
マクロの記録でVBAの勉強を始めたためか Select Selection の多用で、コードが冗長。 初めに返って、やっていること、やりたいことを文章で逐次述べてご覧。回答者にはそのほうが、良いアドバイスができる場合が多いと思う。 質問コードにはPrintPreviewが出てきていないが、何をしたいのでしょうか。 >(r-1)ページ目として印刷範囲を55行追加する Range(・・ ).Printoutの()内の範囲を増やせば印刷される範囲は 増えますが。 もともと、どのシートのどの範囲をどう改ページして印刷したいのですか。そういうことが質問には説明されていない。 読者・回答者にはあなたのシートや問題や意図はみえないのです。言葉で説明しなきゃ。 ーー (VBAコードの参考) 改ページプレビューと標準 Sub test01() ActiveWindow.View = xlPageBreakPreview MsgBox "aaa" ActiveWindow.View = xlNormalView End Sub 印刷プレビュー Sub Test02() ActiveWindow.SelectedSheets.PrintPreview End Sub
お礼
勉強のしかたは、おっしゃる通りマクロの記録を主に使っています。説明もうまくできず、自分でまだまだだと痛感しました。 とりあえず、今回の質問はANo.1の方の回答を元に解決しそうです。 今度質問する時には、アドバイス通り言葉での説明をしっかりするようにします。 ありがとうございました。
お礼
マクロの勉強を始めたばかりで、分不相応なことをやろうとしていたようです。 勉強のために、回答いただいたコードを元にして、新たに自分で作ろうとおもいます。 説明不足の質問に的確な回答ありがとうございました。