- 締切済み
Excel・VBAのコード教えてください。
1シートに12ずつあるまとまりを印刷したくて下記のようなものを作成しました。 Worksheets("Sheet1").Select Last = Cells(1).CurrentRegion.Rows.Count Warizan = Abs(Last / 12) ←12個以上の場合2、3…以下は1となる。 Kaisuu = Left(Warizan, 1) For r = 1 To Kaisuu ←回数分繰り返す For i = 2 To Last ←シート1に書かれたデータの最終行まで。 Worksheets("Sheet1").Select Company = Cells(i, 1) Yuubin = Cells(i, 2) Address = Cells(i, 3) Worksheets("Sheet2").Select Select Case i Case (Kaisuu * 12) - 10 Range("D4") = Yuubin Case (Kaisuu * 12) - 9 Range("AF4") = Yuubin : Case (Kaisuu * 12) - 1 Range("AF45") = Yuubin Case (Kaisuu * 12) Range("D56") = Yuubin Case (Kaisuu * 12) + 1 Range("AF56") = Yuubin End Select Next ActiveWindow.SelectedSheets.PrintPreview Next とした時に、最終ページが2回、もしくは3回…と表示されてしまいます。 例えばデータが25個あったとして、1ページ目(12個分)が終ったらプレビュー、残りの2ページ目(1個分)を表示、としたいのです。 よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- imogasi
- ベストアンサー率27% (4737/17069)
>Warizan = Abs(Last / 12) ←12個以上の場合2、3…以下は1となる。 ABS(絶対値)を使う意味は判りません。 W=int(Last/12)+1 では。 >sheet1、Sheet2が出てくる意味は。 LastはSheet1の最終行でありながら、何故突然sheet2 出てくるのでしょう。 >Case文のところは何をしているのでしょう。 >下記(テスト済み)では、どう言う点が満たされていないですか。12行ずつsheet1をpreviewします。 Sub test01() last = Range("a1").CurrentRegion.Rows.Count MsgBox last w = Int(last / 12) + 1 For i = 1 To w Range(Cells((i - 1) * 12 + 1, 1), Cells(i * 12, 12)).PrintPreview Next i End Sub
- ki-aaa
- ベストアンサー率49% (105/213)
>例えばデータが25個あったとして >Last = Cells(1).CurrentRegion.Rows.Count これで、Lastに、25がセットされる。 >Warizan = Abs(Last / 12) ←12個以上の場合2、3…以下は1となる。 >Kaisuu = Left(Warizan, 1) これで、Kaisuuに、3がセットされる。 >For r = 1 To Kaisuu ←回数分繰り返す 3回繰り返す。 >For i = 2 To Last Lastが25だから、24回繰り返す。 >Select Case i >Case (Kaisuu * 12) - 10 Kaisuuが3のとき、当てはまるケースが無いので、 Sheet2はKaisuuが2のときのままである。 対策1 Warizan = Abs(Last / 12) →Warizan = Abs((Last - 1)/ 12) 対策2 For r = 1 To Kaisuu ←回数分繰り返す ***** ここでSheet2のクリアをやる。 For i = 2 To Last ←シート1に書かれたデータの最終行まで。
- 0shiete
- ベストアンサー率30% (148/492)
>例えばデータが25個あったとして、1ページ目(12個分)が終ったらプレビュー、残りの2ページ目(1個分)を表示、としたいのです。 25÷12=2余り1なので、3ページあるわけではないのですか? 残りの2ページ目(1個分)というのはどういうことでしょうか?