「教えて!ピックアップ」リリース!

2000行ぐらいあるデータを、あるカテゴリ毎に分けて印刷したいのですが、
いちいち改ページを設定するのが面倒なので・・・

例えばA列に数行おき(一定間隔ではない)に“○”が入力されて
いたときに、“○”がある行毎に改ページを設定することは可能でしょうか?

当方、あまり複雑なことは出来ませんが、若干ならマクロの理解もできます。
教えていただけると有り難いです。

A 回答 (4件)

こんばんは。



以下の場合は、このようになります。
------------

○ .Cells(i + 1, 1) 1行足されている
------------改ページ

しかし、そうではなく、以下のようになるなら、このようにします。
------------

------------改ページ
○ .Cells(i - 1, 1) 1行減らす


印刷範囲を最初に設定してから、マクロを行ってください。
出来上がったら、改ページプレビューで確認してください。

標準モジュールに設定してください。

'------------------------
Sub PageBreak_enter()
Dim Rng As Range
Dim i As Long
'区切れの文字列
Const CHKSTRING As String = "○"
With ActiveSheet
 If .PageSetup.PrintArea = "" Then
  MsgBox "印刷範囲を設定してください"
  Exit Sub
 End If
  .ResetAllPageBreaks
 ' ↑(何回も行わないなら要りません)
 Application.ScreenUpdating = False
 Set Rng = .Range(.PageSetup.PrintArea)
 For i = 1 To Rng.Rows.Count
 If .Cells(i, 1).Value Like CHKSTRING Then
  'ここで、改ページを調整可
   .Cells(i + 1, 1).PageBreak = xlPageBreakManual
 End If
 Next
 End With
 Application.ScreenUpdating = True
 Set Rng = Nothing
End Sub
    • good
    • 1

改ページは


A(1)手動
(2)位置を知らせる仕組み(#3回答?)
 (3)ボタン化(VBA)
B(1)決まった行数で改ページ
 (2)ある列のデータが変化したらその直前で改ページ(#2回答
(3)決まった語句や数が出てきたら改ページ
(4)改ページを入れないでプログラムでRange(○).PrintOutの○を調節
などが考えられる。
この質問ではB(3)かなと思う。
ーーー
A列   B列
得意先A1
2
3
4
5
得意先B2
3
4
ff
のようなデータの場合
標準モジュールに
Sub test01()
d = Range("B65536").End(xlUp).Row
For i = 2 To d
If InStr(Cells(i, "A"), "得意先") > 0 Then
Cells(i, 1).PageBreak = xlPageBreakManual
End If
Next i
Cells.PrintOut
End Sub
で良いようです。
ーー
A(3)は
シートにボタンを貼り付け、そのClickイベントに
Private Sub CommandButton1_Click()
ActiveCell.PageBreak = xlPageBreakManual
End Sub
    • good
    • 0

わたしからは手動で行う場合にちょっと楽になる方法を。



A列にオートフィルタをかけて、○を抽出します。
一番最初の○のある行を行ごと選択して、
[挿入]-[改ページ]
を行います。
以下、
下矢印=>[F4]=>下矢印=>[F4]...
と繰り返しキー入力をすればOK。


#[F4]キーは[前の動作を繰り返す]操作なので、これは改ページ挿入=>下移動の繰り返しになります。
    • good
    • 3

以下のマクロはB列の値が変わる行で改頁を挿入するマクロです。


もしカテゴリが大分類、小分類などに分かれているならもう少し判断を加える必要があるので補足するか、ご自身で改造してみてください。
(1行目がタイトル、2行目以降がデータの想定です)

ご存じと思いますが、以下のマクロをALT+F11でVBE画面を開き、「VBAProjectエクスプローラのシート名右クリック」→「挿入」→「標準モジュール」で表示される画面にペーストして下さい。実行はシート画面に戻って、ALT+F8を押してマクロ一覧からマクロ名を選択して実行します。MacroBKが改行挿入、macroBKDELが改行削除です

Sub MacroBK()
Dim PB As HPageBreak
Dim idx As Long
Const tCol As String = "B" '改頁判断する列
 With ActiveSheet
  For idx = 3 To .Cells(65536, tCol).End(xlUp).Row
   If .Cells(idx, tCol) <> .Cells(idx - 1, tCol) Then
    ActiveSheet.HPageBreaks.Add Before:=.Cells(idx, tCol)
   End If
  Next idx
 End With
End Sub

Sub MacroBKDEL()
Dim idx, PB As Integer
 PB = ActiveSheet.HPageBreaks.Count
 For idx = 1 To PB
   ActiveSheet.HPageBreaks(1).Delete
 Next
End Sub
    • good
    • 2

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


人気Q&Aランキング