• ベストアンサー

Excelで特定の文字・記号のところで自動的に改ページしたい

2000行ぐらいあるデータを、あるカテゴリ毎に分けて印刷したいのですが、 いちいち改ページを設定するのが面倒なので・・・ 例えばA列に数行おき(一定間隔ではない)に“○”が入力されて いたときに、“○”がある行毎に改ページを設定することは可能でしょうか? 当方、あまり複雑なことは出来ませんが、若干ならマクロの理解もできます。 教えていただけると有り難いです。

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんばんは。 以下の場合は、このようになります。 ------------ ○ .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

その他の回答 (3)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.4

改ページは A(1)手動 (2)位置を知らせる仕組み(#3回答?)  (3)ボタン化(VBA) B(1)決まった行数で改ページ  (2)ある列のデータが変化したらその直前で改ページ(#2回答 (3)決まった語句や数が出てきたら改ページ (4)改ページを入れないでプログラムでRange(○).PrintOutの○を調節 などが考えられる。 この質問ではB(3)かなと思う。 ーーー A列   B列 得意先A 1 2 3 4 5 得意先B 2 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

  • robbie21
  • ベストアンサー率55% (5/9)
回答No.3

わたしからは手動で行う場合にちょっと楽になる方法を。 A列にオートフィルタをかけて、○を抽出します。 一番最初の○のある行を行ごと選択して、 [挿入]-[改ページ] を行います。 以下、 下矢印=>[F4]=>下矢印=>[F4]... と繰り返しキー入力をすればOK。 #[F4]キーは[前の動作を繰り返す]操作なので、これは改ページ挿入=>下移動の繰り返しになります。

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.1

以下のマクロは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

関連するQ&A