
VBA(マクロ)の得意な人に質問です。ご協力お願い致します。
業務で必要となり、マクロが得意でない為、ご教授できる方いましたら何卒教えて頂けませんでしょうか。
(やりたい事)
Excelの表を1ページ目は45行目の下、2パージ目以降は39行ごと
(行84の下、行123の下、行162の下・・・)に改ページを入れたいです。
今はここまでできました。
これに改ページの処理を追加したいです。
よろしくお願いします。
Private Sub 全体_Click()
最初のページ = TextBox1.Value
最後のページ = TextBox2.Value
印刷部数 = TextBox3
Unload UserForm1
With ActiveSheet.PageSetup
.PrintArea = "$A$1:$T$1020"
.Orientation = xlLandscape
.PaperSize = xlPaperA4
.Zoom = 65
.RightHeader = ""
End With
Application.Dialogs(xlDialogPrint).Show arg1:=2, arg2:=最初のページ, arg3:=最後のページ, arg4:=印刷部数
End Sub
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
#2です 連投失礼します
もし使用される場合はエラー処理を加えていませんが
不具合の発生する可能性がある明らかな場所の修正をお願いします
① 2行追加1行変更
Unload UserForm1 '既存
'この場所へ
Dim last_page As Integer
last_page = Application.Max(最後のページ, 2)
last_row = first_pageRows + pageRows * (last_page - 1)
With ActiveSheet '既存
② 移動
.Zoom = 65の下に移動
.RightHeader = ""
③
TextBoxの値入力で数値以外を入力できない様に設定するなどしてください
またはIntegerで宣言していますので変数代入前に数値であるか確認して分岐処理を入れるなど対策が必要です
No.2
- 回答日時:
1ページ目の行数 2ページ目以降の行数は コード内で定数設定しています
Private Sub 全体_Click()
Const first_pageRows As Integer = 45
Const pageRows As Integer = 39
Dim buf As Integer
Dim last_row As Long
Dim 最初のページ As Integer
Dim 最後のページ As Integer
Dim 印刷部数 As Integer
Dim 行番号 As Integer
最初のページ = TextBox1.Value
最後のページ = TextBox2.Value
印刷部数 = TextBox3
Unload UserForm1
last_row = first_pageRows + pageRows * (最後のページ - 1)
With ActiveSheet
.ResetAllPageBreaks
For 行番号 = first_pageRows To last_row Step pageRows
.HPageBreaks.Add Before:=.Rows(行番号 + 1)
Next
With .PageSetup
.PrintArea = False
.PrintArea = "$A$1:$T$" & last_row
.Orientation = xlLandscape
.PaperSize = xlPaperA4
.Zoom = 65
Do While 最後のページ <> .Pages.Count
Application.PrintCommunication = False
buf = .Pages.Count 'ページ数を取得
Application.PrintCommunication = True
If buf > 最後のページ Then
Application.PrintCommunication = False
.Zoom = .Zoom - 5 '5%縮小
Application.PrintCommunication = True
Else
Application.PrintCommunication = False
.Zoom = .Zoom + 5 '5%拡大
Application.PrintCommunication = True
End If
DoEvents
Loop
.RightHeader = ""
End With
End With
Application.Dialogs(xlDialogPrint).Show arg1:=2, arg2:=最初のページ, arg3:=最後のページ, arg4:=印刷部数
End Sub
解説は割愛します
念のためLoop内でDoEventsを入れています
AIにコードを入れ解説を付けさせるなどしてください
不明な点はお知らせください
No.1
- 回答日時:
Excel VBAで改ページを設定するマクロ
Excelの表に指定した行で改ページを挿入するVBAコードをご提案します。1ページ目は45行目、2ページ目以降は39行ごとに改ページを入れる処理を追加しました。
完成コード
Private Sub 全体_Click()
Dim ws As Worksheet
Dim lastRow As Long
Dim pageBreakRow As Long
Dim i As Integer
'ユーザーフォームから値を取得
最初のページ = TextBox1.Value
最後のページ = TextBox2.Value
印刷部数 = TextBox3.Value
Unload UserForm1
'作業シートを設定
Set ws = ActiveSheet
'既存の改ページを全てクリア
ws.ResetAllPageBreaks
'ページ設定
With ws.PageSetup
.PrintArea = "$A$1:$T$1020"
.Orientation = xlLandscape
.PaperSize = xlPaperA4
.Zoom = 65
.RightHeader = ""
End With
'1ページ目の改ページを45行目に設定
ws.HPageBreaks.Add Before:=ws.Rows(46)
'2ページ目以降の改ページを39行ごとに設定
lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
pageBreakRow = 84 '2ページ目の改ページ位置 (45 + 39 = 84)
Do While pageBreakRow <= lastRow
ws.HPageBreaks.Add Before:=ws.Rows(pageBreakRow + 1)
pageBreakRow = pageBreakRow + 39
Loop
'印刷ダイアログを表示
Application.Dialogs(xlDialogPrint).Show arg1:=2, arg2:=最初のページ, arg3:=最後のページ, arg4:=印刷部数
End Sub
コードの説明
既存の改ページをクリア:
ws.ResetAllPageBreaksで既存の改ページを全て削除します
1ページ目の改ページ設定:
45行目の下に改ページを挿入するため、46行目の前に改ページを追加
ws.HPageBreaks.Add Before:=ws.Rows(46)
2ページ目以降の改ページ設定:
84行目(45+39)、123行目(84+39)、162行目(123+39)…と39行ごとに改ページを追加
最終行までループ処理で改ページを追加
印刷設定:
元のコードの印刷設定を維持
最後に印刷ダイアログを表示
注意点
このコードはアクティブなシートに対して処理を行います
印刷範囲はA1:T1020としていますが、必要に応じて変更してください
行の高さやフォントサイズによって、実際の印刷ページ数が変わる可能性があります
このコードを実行すると、指定した行で改ページが設定され、印刷時に適切にページ分割されます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) VBAの高速化について 2 2024/01/04 23:26
- Visual Basic(VBA) ユーザーフォームに別シートからデータを反映させたい。 10 2023/11/03 08:46
- Visual Basic(VBA) Excel マクロについて詳しい方、ご教示ください。 『行数が毎回変わる元データの、A列に「1」と入 2 2024/11/23 01:53
- Visual Basic(VBA) Vba SelStart、SelLen教えてください教えてください 1 2024/04/25 17:12
- その他(Microsoft Office) 以下マクロの処理を最終行まで処理されるようにしたいです。 以下マクロですと最初の5行のA~D列をそれ 4 2023/12/07 11:48
- Visual Basic(VBA) Excelのマクロについて教えてください。 1 2024/06/18 09:20
- Visual Basic(VBA) VBA listBoxについて 2 2024/03/26 16:14
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 4 2023/05/26 10:43
- デスクトップパソコン wordの改行が変なので直したい 1 2024/01/27 17:08
- Excel(エクセル) エクセル2013「次のページ数に合わせて印刷」が小さすぎる 9 2023/03/28 10:18
このQ&Aを見た人はこんなQ&Aも見ています
-
改行文字「vbCrLf」とは
Visual Basic(VBA)
-
vbsでのwebフォームへの入力制限?
Visual Basic(VBA)
-
以下のプログラムの実行結果はどうなると思いますか? その理由も教えてください。
Visual Basic(VBA)
-
-
4
【マクロ】変数を使った、文字の種類の変更にて、エラーとなる。
Visual Basic(VBA)
-
5
VBAのエラー表示の対処法について
Visual Basic(VBA)
-
6
算術演算子「¥」の意味について
Visual Basic(VBA)
-
7
vb.net(vs2022)のtextboxのデザイン時と実行時の見た目の違いはなぜ?
Visual Basic(VBA)
-
8
マクロ・VBAで、当該ファイルのショートカットからなら正常に動作する疑問につきまして
Excel(エクセル)
-
9
【マクロ】開いているブックの名前を取得した後、名前をセルに1つづつ入力するには?
Visual Basic(VBA)
-
10
質問58753 このコードでうまく動作しません。どうしたら良いですか Private Sub Wor
Visual Basic(VBA)
-
11
VBAの「To」という語句について
Visual Basic(VBA)
-
12
Vba FileSystemObject オブジェクトに使って拡張子、BaseNameを取り出す
Visual Basic(VBA)
-
13
ダブルクリックで貼り付けた画像からリンクのみ削除し、画像を残したい。
Visual Basic(VBA)
-
14
Vba セルの4辺について罫線が有るかどうか調べたいのですが
Visual Basic(VBA)
-
15
CSVファイルの複数行削除
その他(プログラミング・Web制作)
-
16
数学、プログラミング、物理、化学など理系の方に質問 プログラミング言語、数式、化学式などで会話をしよ
その他(プログラミング・Web制作)
-
17
Vba Array関数について教えてください
Visual Basic(VBA)
-
18
Visualbasicの現状について教えてください
Visual Basic(VBA)
-
19
VBAのループ処理について教えてください
Visual Basic(VBA)
-
20
プログラミングに興味があるのですが、作りたいものはありません。 ゲーム機とかパソコンの中身(ソースコ
その他(プログラミング・Web制作)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAでCOPYを繰り返すと、処理が...
-
【ExcelVBA】5万行以上のデー...
-
2つのマクロでチェックボックス...
-
vbsでのwebフォームへの入力制限?
-
VBAでユーザーフォームを指定回...
-
【マクロ】売上一覧YYYYMMDDHHS...
-
Vba Array関数について教えてく...
-
【マクロ】シートの変数へ入れ...
-
Vba セルの4辺について罫線が有...
-
【マクロ】並び替えの範囲が、...
-
エクセルのマクロについて教え...
-
エクセルの改行について
-
【マクロ】開いているブックの...
-
ワードの図形にマクロを登録で...
-
Excelマクロで使うVBAコードを...
-
(EXCEL超初心者)EXCELの関数(ま...
-
vb.net(vs2022)のtextboxのデザ...
-
エクセルのVBAコードと数式につ...
-
算術演算子「¥」の意味について
-
Excelのマクロについて教えてく...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Vba セルの4辺について罫線が有...
-
vbsでのwebフォームへの入力制限?
-
【ExcelVBA】5万行以上のデー...
-
【マクロ】売上一覧YYYYMMDDHHS...
-
【マクロ】開いているブックの...
-
【マクロ】並び替えの範囲が、...
-
エクセルの改行について
-
エクセルのマクロについて教え...
-
vb.net(vs2022)のtextboxのデザ...
-
VBAでCOPYを繰り返すと、処理が...
-
VBA ユーザーフォーム ボタンク...
-
エクセルのVBAコードと数式につ...
-
エクセルのVBAコードについて教...
-
[VB.net] ボタン(Flat)のEnable...
-
【マクロ】変数を使った、文字...
-
改行文字「vbCrLf」とは
-
質問58753 このコードでうまく...
-
【マクロ】シートの変数へ入れ...
-
ワードの図形にマクロを登録で...
-
算術演算子「¥」の意味について
おすすめ情報
ありがとうございます。
1ページ目は45行目の下でうまく改ページができましたが、
なぜか2ページめが85行目の下で改ページされ、以降39行ごとの改ページになってしまいます。
pageBreakRow = 84 の数字を前後で変えてみたりしましたが、症状が変わりませんでした。
何か他のものが関係しているのでしょうか?