- ベストアンサー
エクセルでの改ページ設定方法とVBAの記述について
- エクセルで特定の文字が現れた時に自動で改ページする方法についてです。
- ページ数が多い場合や複数回の処理を行う場合に便利なVBAの記述方法も紹介します。
- タイトルや要約文はSEOを意識したものとなっており、キーワードにも配慮しています。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
Sub test() Set wb = Workbooks("Book1") Set sh1 = wb.Sheets(1) With sh1 rmin = 1 'データcellの最小行 rmax = 1000 'データcellの最大行 pnm = 20 '1ページ最大行数 r0 = rmin c0 = 1 'データcellの列 r = r0 c = c0 n = 0 Do dd = Cells(r, c) While dd <> "D" r = r + 1 If r > rmax Then Exit Sub dd = Cells(r, c) Wend dr = r - r0 n = n + dr + 1 If n > pnm Then r = r - dr .HPageBreaks.Add Before:=.Cells(r, 1) n = 0 End If r = r + 1 r0 = r Loop While r < rmax End With End Sub これでどうですか。 データcellの最終行をデータ上から知る方法がありますか。未入力が無いデータ列とか。 自分の作業にあわせて、適当に変更してください。
その他の回答 (3)
- okormazd
- ベストアンサー率50% (1224/2412)
最大行を入力しなくてもよいようにしようとしたのですが、このままでも実際の最大行より大きい行ナンバーを余裕を持って指定(65000とか)しておけば支障ないでしょう。
お礼
そうですね。おかげさまで作業の効率が上がりそうです。 このたびはどうもありがとうございました。 大変助かりました。
- okormazd
- ベストアンサー率50% (1224/2412)
微修正 細かいことが気になるので、 初期データとして、 dd0="D" として、 while文を while dd<>dd0 にする。
- okormazd
- ベストアンサー率50% (1224/2412)
1.A,B,C,D は、どこかに入っているデータですか。 2.Dが現れるまでに1ページの最大行数を超えてしまうことは無いですか。 3.この並びの途中に未入力のセルはないですか。
補足
回答ありがとうございます。 説明を補足させていただきます。 1.ABCDはそれぞれ、下記のように現れます。 各文字の間にある列の間隔は常に一定です。 |a|b|c|d|e| 1 |()←(1.a)には直下にあるAのコードナンバーが入力されます。 2 |A 3 | ←Aの直下は空白です。 4 |()←こちらにもBのコードナンバーが入力されます。CDも同様です 5 |B 6 | 7 |() 8 |C 9 | 10|() 11|D 12| 2.Dは1ページ中には少なくとも2回以上は必ず現れます。 3.上記のように空白のセルは存在します。 以上です。よろしくお願いします。
お礼
回答ありがとうございます。 素晴らしいですね。仮のデータを作成しテストしてみましたが、見事に 私の望んでいる処理が実現できています。 おそらく実際のデータにも有効に処理が働くと思います。 また、未入力が無いデータ列は存在したと思います。仮にそれが (1.F)(2.F)と最終行まで続いていた場合には、どのようなコードに なるでしょうか。もしよろしければ教えてください。