- ベストアンサー
VBAでデータが変わった切れ目で改ページしたい
例えばA列に担当者コードが1から100まであって昇順に並んでいます。この表を印刷するときにデータが変わったところで改ページの挿入がしたいのですが、どうやればいいのかわかりません。 手作業でするとすごく時間がかかってしまいます。しかも毎週出すデータなので。 お願いします あと、データのある範囲を選択してその部分を印刷範囲に設定したいのですがVBAでどのようになるでしょうか。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
概ねこんな感じかと・ (あくまでサンプルなので実データに合わせて変更して下さい) 'データの変わり目で改ページ挿入 '解除するときは、右クリックから「全ての改ページの解除」 Do While Worksheets(SheetName).Cells(rindex, cIndex) <> "" '空白セルでない間 If Worksheets(SheetName).Cells(rindex - 1, cIndex) <> Worksheets(SheetName).Cells(rindex, cIndex) Then '1つ前の行とデータが違ったら If rindex <> 6 Then '最初の行は除く Worksheets(SheetName).Range("B" + Trim$(Str$(rindex))).Activate ActiveWindow.SelectedSheets.HPageBreaks.Add ActiveCell '改ページ挿入 ' ActiveWindow.SelectedSheets.VPageBreaks.Add ActiveCell End If End If rindex = rindex + 1 Loop >データのある範囲を選択してその部分を印刷範囲に設定したいのですがVBAでどのようになるでしょうか。 ActiveSheet.PageSetup.PrintArea = Selection.Address Selection は、現在選択されている範囲 Selection でなくても、適当なRange オブジェクトでよい。
その他の回答 (1)
- imogasi
- ベストアンサー率27% (4737/17070)
(第1優先) 1ページの最大印刷行数を50行として 50行を超えたかを判定 (第二優先) 担当者コードが変わったか。上から全行順次、担当者コードが前の行といつも比較して、変わったら、その前行まで印刷する。 ただし50行以上進むこともあるので、 ーーー だから担当者コードが変わったら、現担当コードが始まった行から、50行以上進んだか判定し、超えていたら、50行ずつ印刷し、50行以下の端数行分を最後に印刷する。 そして担当者コード変化の判定を続ける。 ーーー 印刷はRange範囲.PrintOut を発行する。改ページは行われます。 ーーーーー 上記の、Range範囲の指定は Range(Cells(開始行、”A”),Cells(変化察知前行、印刷する最右列記号)).PrintOutがお勧め。
お礼
ありがとうございます。ここでまとめてお礼を言わせていただきます。初めて目にする単語が多くてわかるかどうか心配ですがとりあえずこのとおりにやって修正していきたいと思います。