プロが教えるわが家の防犯対策術!

VBAについて教えてください。

現在マクロを組んでおり行き詰まっています。
20行ごとに改ページの設定をするのに
Sheets("シート名").Rows(20).PageBreak=xlPageBreakManual

としています。
しかし、行のカウントをしたいのは1行目からではなく11行目からになります。
11行目から印刷設定をしており、11行目からカウントして20行ごとに改ページの設定をしたいのですが、どのようにすればよろしいのでしょうか?

自分で調べてもわからなかったので知恵を貸していただけると助かります。

質問者からの補足コメント

  • こちらの説明不足で申し訳ございませんでした。
    エクセルシートにはアウトラインが設定されており、行数が足りなかった場合にアウトラインを開いて使用できるようになっております。
    一番下に小計ページがくるのですが、アウトラインを開いていない時にも設定は小計行含め19行、開いている時には小計ページが最終頁にしかこないのですが、こちらもレイアウトを揃える為19行で改ページするようにしたいのです。この場合はどのような設定をしたらいいのでしょうか?

      補足日時:2022/06/22 10:51

A 回答 (7件)

こちらも何か早とちりしてしまい申し訳ございません


こんなイメージです
よろしくお願いします

==============================
Dim i As Integer

Sheet1.ResetAllPageBreaks

ActiveWindow.View = xlPageBreakPreview

Sheet1.PageSetup.PrintArea = "A1:H100"
Sheet1.PageSetup.PrintTitleRows = "1:11"

For i = 11 To 100
If i Mod 20 = 0 Then
Sheet1.Rows(i).PageBreak = xlPageBreakManual
End If

Next
    • good
    • 0

No5です。



いまだに、何をどのようにしたいのか不明のままですけれど・・・

>アウトラインを設定している行(閉じている時には行数が飛んでいるところ)
>に改ページが設定されてしまうのです。
それは、自動改ページになっていないからです。
固定指定の改ページが存在すれば、それは無視されずに改ページされます。
自動改ページになっていれば、非表示の行で改ページされることはありません。
(改ページプレビューで見てみればわかると思います)

と言っても、質問者様が何をしたいのかがわからないまま、いろいろ回答しても無駄だと思いますので、他の方にお任せします。
    • good
    • 0

No1です。



補足を読みましたが・・・

『ユーザが適当にアウトラインを開いたり閉じたりしている時に、ある一定の間隔で改ページしたい』ってことでしょうか?
まさに、『それ、早く言ってよぉ~~!』ですね。


補足を読んでも、「表示されている19行ごとに改ページ」で良いのかどうかわかりませんけれど、仮にそうだとするなら、
『1行ずつ表示行をカウントして、19行になるごとに改ページを入れる』
ようにすればよいのではないでしょうか。

まぁ、表示19行ごとの改ページで良いのならば、VBAなど使わなくても、ページ設定で19行/1ページになるように設定しておくだけですみそうです。
これで、エクセルの自動改ページに任せておけば、VBAなんぞ不要になると思いますけれど・・

なんだか意味が違っていそうなので、コードは無駄になるので書きませんが。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
エクセルの自動改ページにて設定すると、アウトラインを閉じている時と開けている時では全く仕上がりが違うものになります。
閉じている時には閉じているページに改ページが入りこんでいるので、アウトラインを設定している行(閉じている時には行数が飛んでいるところ)に改ページが設定されてしまうのです。
なのでアウトラインを閉じていても開いていたも同じ行数で設定できないものかと思い質問させていただきました。
わかりにくい説明で本当申し訳ございません。

お礼日時:2022/06/22 11:28

実はこれ解決されずにフェードアウトされちゃう系?


みんな一生懸命ヒントを書いてくれたのにそれは悲しいな( ;∀;)
    • good
    • 0
この回答へのお礼

返答が遅くなり申し訳ございません。別の仕事もやらなくてはいけないため昨日は他業務をしなくてはならず、こちらには手を付けられませんでした。また、初心者のためみなさんに教えて頂いたことを調べながらじっくり実践しております。そのためお時間かかってしまいますがフェードアウトはしません。不快にさせてしまい申し訳ございませんでした。

お礼日時:2022/06/22 10:46

ループ処理は11から1ずつカウントアップ


ループの最後でループカウンターを20で除算した余りが0だったら改ページの処理を入れれば良いんですよね
If i Mod 20 = 0 Then
改ページ処理
End If
で行けるのでは
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。こちらの設定をすると11行目からという認識をされないのか?20行目までで改ページされてしまいます。
改ページ処理の部分は
Sheets("シート名").Rows(20).PageBreak=xlPageBreakManual
でよろしいでしょうか?

お礼日時:2022/06/22 10:47

こんにちは。



Stepを使うとカウントしなくても大丈夫かと。

Sub testProc()
  Dim i As Long
  For i = 11 To 1000 Step 20
    Sheets("シート名").Rows(i).PageBreak = xlPageBreakManual
  Next
End Sub
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
ためしにやってみたのですが、エラーメッセージ[Range クラスの PageBreak プロパティを設定できません。]と出てきてしまい動きませんでした。アウトラインを設定していることが原因でしょうか?説明不足で申し訳ございませんでした。

お礼日時:2022/06/22 10:28

こんにちは



エクセルってことで良いのでしょうか?

>20行ごとに改ページの設定をするのに~~
ご提示のコードだと、19行目の下で改ページされていませんか?
行数をどう数えているのかはっきりしませんけれど・・

普通で考えれば、11行目が実質の1行目なら、「20行目ごと」は30、50、70・・行ということになります。
ですので、
 .Rows(31).PageBreak=xlPageBreakManual
 .Rows(51).PageBreak=xlPageBreakManual
  ・・・・
等となるようにしておけばよいのでは?
(ループ処理で行えば宜しいかと)
    • good
    • 1
この回答へのお礼

エクセルで大丈夫です。教えて頂いた方法でやってみたのですが、アウトラインの設定をしているのでアウトラインが開いている時は上手く動きましたが、閉じている時は細かく改ページされてしまいうまくいきませんでした。(閉じていても開いていても19行で改ページしたかったのです)
せっかくお答えいただいたのに申し訳ございません。

お礼日時:2022/06/22 10:30

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

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