Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


2394 / 13646 ツリー ←次へ | 前へ→

【68286】結合したセルを分割しないで印刷したい アキさん 11/2/20(日) 19:56 質問[未読]
【68287】Re:結合したセルを分割しないで印刷したい かみちゃん 11/2/20(日) 20:18 発言[未読]
【68288】Re:結合したセルを分割しないで印刷したい UO3 11/2/20(日) 20:41 発言[未読]
【68289】Re:結合したセルを分割しないで印刷したい ichinose 11/2/20(日) 20:55 発言[未読]
【68290】Re:結合したセルを分割しないで印刷したい UO3 11/2/20(日) 21:08 回答[未読]
【68294】Re:結合したセルを分割しないで印刷したい アキさん 11/2/21(月) 11:51 発言[未読]
【68295】【補足】Re:結合したセルを分割しないで印... アキさん 11/2/21(月) 11:56 発言[未読]
【68297】Re:結合したセルを分割しないで印刷したい UO3 11/2/21(月) 12:21 発言[未読]
【68298】Re:結合したセルを分割しないで印刷したい UO3 11/2/21(月) 14:07 発言[未読]
【68299】Re:結合したセルを分割しないで印刷したい UO3 11/2/21(月) 14:17 回答[未読]
【68304】Re:結合したセルを分割しないで印刷したい アキさん 11/2/22(火) 8:48 お礼[未読]

【68286】結合したセルを分割しないで印刷したい
質問  アキさん  - 11/2/20(日) 19:56 -

引用なし
パスワード
   エクセルのA列を結合しています。
結合しているセル数はまちまちで2行であったり6行であったりです。

この状態で印刷すると結合したセルがページを分割され印刷されます。
なので、マクロで結合セルを分割しないで印刷できる方法をネットで検索し、以下のマクロを見つけました。

Sub 行結合対応改頁位置調整印刷()
' 水平方向の改ページ位置を結合セル内から外し、上に調整移動する
'----------------------
Const TargetCol = "A" ' <--- 改ページに反映させる結合のある列を指定
'----------------------
Dim Rng As Range
Dim Hpb As Long
Dim Rw As Long
Application.ScreenUpdating = True ' False禁止
Set Rng = Cells.SpecialCells(xlCellTypeLastCell).Offset(1)
Rng.Activate
If HPageBreaks.Count = 0 Then Exit Sub
ActiveSheet.ResetAllPageBreaks
For Hpb = 1 To HPageBreaks.Count
  Rng.Activate
  Rw = HPageBreaks(Hpb).Location.Row
  Cells(Rw, Range(TargetCol & 1).Column).Activate
  If Selection.Row < Rw Then
    HPageBreaks.Add Before:=ActiveCell
  End If
Next Hpb
Range("A1").Activate
ActiveSheet.PrintOut  'Preview:=True
Set Rng = Nothing
End Sub


このマクロを入力したのですが、ページの最初の方はうまく分割され印刷されますがページ後半になると、分割されてしまいます。

最終ページまで結合セルが分割されないで印刷するにはどうすれば良いのでしょうか?

ちなみに、作成している表はページ分割しないで印刷した場合、20ページほどになります。

宜しくお願いします。

【68287】Re:結合したセルを分割しないで印刷したい
発言  かみちゃん  - 11/2/20(日) 20:18 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>最終ページまで結合セルが分割されないで印刷するにはどうすれば良いのでしょうか?

質問内容をきちんと読んでいないのですが、以下などが参考になりますでしょうか?
ht tp://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1454975564
ht tp://soudan1.biglobe.ne.jp/qa2261261.html

見当違いであれば、読み捨ててください。

【68288】Re:結合したセルを分割しないで印刷したい
発言  UO3  - 11/2/20(日) 20:41 -

引用なし
パスワード
   ▼アキさん さん:

当方で、適当なシートを作成してこのコードを動かして見ましたが
今のところ、問題なくページブレークされています。

ところで、エクセルバージョンはいくつでしょうか?
というのは、当方、2003でテストしてみましたが、まずコンパイルエラーに
なります。2003ではHPageBreaksには、その前にシート修飾が必須です。
で、とりあえずActiveSheet.HPageBreaksとして実行しています。

あと、不具合ということではないですけど、
Const TargetCol = "A" と規定しておられるのですから
Cells(Rw, Range(TargetCol & 1).Column).Activate は
Cells(Rw, TargetCol).Activate と表現することができますね。

その他セルやセル領域をActivateしておられるところは、不要だったり
あるいは別の記述方法ができたりしますね。

【68289】Re:結合したセルを分割しないで印刷したい
発言  ichinose  - 11/2/20(日) 20:55 -

引用なし
パスワード
   こんばんは。


>ところで、エクセルバージョンはいくつでしょうか?
>というのは、当方、2003でテストしてみましたが、まずコンパイルエラーに
>なります。2003ではHPageBreaksには、その前にシート修飾が必須です。

ここだけ、シートモジュールにコードを配置すれば、エラーには、
なりませんけどねえ!!
いいか悪いかは別として・・・。

【68290】Re:結合したセルを分割しないで印刷したい
回答  UO3  - 11/2/20(日) 21:08 -

引用なし
パスワード
   ▼ichinose さん:

あっ!そうだったのかもですね。
シートモジュール!
はい。いいか悪いかは別にしてということですよね。
ありがとうございました。

【68294】Re:結合したセルを分割しないで印刷したい
発言  アキさん  - 11/2/21(月) 11:51 -

引用なし
パスワード
   皆様、早速のご回答有難うございます。

しかしながら、なかなか上手く行きません。

・エクセルバージョンは2003です。
・マクロを実行しても「コンパイルエラー」とは表示されませんでした。

まったくの初心者で申し訳ございませんが、
・シート修飾とは何でしょうか?
・ActiveSheet.HPageBreaksとして実行とは、どうするのでしょうか?

また、シートモジュールにコードを配置とアドバイスを頂きましたが、
具体的には、
・当該エクセルのシート名の所で右クリックし「コードの表示」を選択し、
 コードを入力したのですが、間違いは無いのでしょうか?

初心者のため、ネットで検索しても、よく分からないため、
論点がずれた質問をしていたら申し訳ございません。

宜しければご協力お願い致します。

【68295】【補足】Re:結合したセルを分割しないで...
発言  アキさん  - 11/2/21(月) 11:56 -

引用なし
パスワード
   度々の投稿で申し訳ございません。

上記、再質問の中で「上手く行かない」とは、以下のとおりです。

・やはりページ後半部分で、ページブレークされません
(ページ前半はうまく分割されるのですが・・・・)

【68297】Re:結合したセルを分割しないで印刷したい
発言  UO3  - 11/2/21(月) 12:21 -

引用なし
パスワード
   ▼アキさん さん:

こんにちは

>まったくの初心者で申し訳ございませんが、
>・シート修飾とは何でしょうか?
>・ActiveSheet.HPageBreaksとして実行とは、どうするのでしょうか?

私が、「当然」このコードが標準モジュールに書かれていると思い込んだ発言
でしたので忘れてください。

>また、シートモジュールにコードを配置とアドバイスを頂きましたが、
>具体的には、
>・当該エクセルのシート名の所で右クリックし「コードの表示」を選択し、
> コードを入力したのですが、間違いは無いのでしょうか?

シートモジュールにコードを配置することを「アドバイス」したわけではありません。
通常、シートモジュールは、そのシートの様々なイベントを捕捉して処理することが
多いですし、この種のコードは標準モジュールに書くことが多いかなとも思いますが
人それぞれですから。

ちなみに、シート名右クリックででてくるモジュールがシートモジュールです。

>・やはりページ後半部分で、ページブレークされません
>(ページ前半はうまく分割されるのですが・・・・)

こちらで40ページぐらいにわかれるシートを作り、適当にセルを結合させて
実行していますが、今のところ、最終ページまで、分かれるべきところのみが
分かれています。
まさかととは思いますが、1ページの行数以上の行が結合されているということは
ないでしょうね。

【68298】Re:結合したセルを分割しないで印刷したい
発言  UO3  - 11/2/21(月) 14:07 -

引用なし
パスワード
   ▼アキさん さん:

こんにちは

原因がわかったような気がします。とりあえず原因のみ申し上げます。

たとえば2ページ分だけのシートを以下のように作成します。

・1ページの最後の5行と2ページの最初の5行を結構させます。
・2ページ目は最後の行の前までにデータを入れた状態にしておきます。
・で、その2ページ目のデータが入っている最後の行の10行ぐらいを結合させます。

このシートでご提示のコードを実行しますと、最後の結合セルが2ページ目と3ページ目に
またがり、ページブレークされませんね。

原因

処理を開始する際の HPageBreaks.Count は 1 です。従ってループは1回だけ。
もともとの最初のページブレークのところのみを判定します。
で、ページのまた借りがあるので、結合セルの前にページブレークを挿入しますね。
この時、2ページ目の開始行が上方にシフトされており、もともと2ページしかなかったのですが
最後の結合セル部分が3ページ目にまたがります。でも、この(あたらしく出来上がった)
3ページ目のページブレークは、上記で申し上げたように、最初のカウントには入っていませんので
チェックされないということになります。

結果として最後の部分がなきわかれということになりますね。

コードでどう対応するかは、この後、試してみて、できあがればアップします。

【68299】Re:結合したセルを分割しないで印刷したい
回答  UO3  - 11/2/21(月) 14:17 -

引用なし
パスワード
   ▼アキさん さん:

こんにちは

以下のコードでお試しください。
なお、あわせて、先に申し上げた、不要、あるいは別の書き方ができるActivateやSelectを
なくしてあります。実行時の画面のちらつきがおさえられると思います。

Sub Sample()
' 水平方向の改ページ位置を結合セル内から外し、上に調整移動する
'----------------------
Const TargetCol = "A" ' <--- 改ページに反映させる結合のある列を指定
'----------------------
Dim Hpb As Long
Dim Rw As Long
Application.ScreenUpdating = True ' False禁止
Cells.SpecialCells(xlCellTypeLastCell).Offset(1).Activate
If HPageBreaks.Count = 0 Then Exit Sub
ActiveSheet.ResetAllPageBreaks
Hpb = 1
Do Until Hpb > HPageBreaks.Count
  Rw = HPageBreaks(Hpb).Location.Row
  If Cells(Rw, TargetCol).MergeArea.Row < Rw Then
    HPageBreaks.Add before:=Cells(Rw, TargetCol).MergeArea
  End If
  Hpb = Hpb + 1
Loop
ActiveSheet.PrintOut  'Preview:=True
End Sub

【68304】Re:結合したセルを分割しないで印刷したい
お礼  アキさん  - 11/2/22(火) 8:48 -

引用なし
パスワード
   ▼UO3 さん:

本日、コード入力し無事にページブレークできました。
本当に有難うございます。助かりました。

他の皆様もご回答有難うございます。

感謝m(__)m

2394 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free