Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10全般 : Excel 2016)
改ページができません
投稿日時: 21/03/20 16:12:49
投稿者: yuuko3200

excelで30行ごとに改ページ設定のためコードを書いたところ、どうしても31行目ごとになってしまいます。
なお、先頭行は印刷見出し設定をしています。
 
なお、次のコードです。
LastRow =Cells(Rows.Count,1).End(xlUp).Row
 
For i = 32 To LastRow Step 30
.Rows(1)PageBreak = xlPageBreakManual
next
 
大元のデータが1シート目にあり、そこからオートフィルターで対象データを絞り込みます。
そのデータを2シート目にコピーで貼り付け、かつオートフィルターは外しています。
貼り付けた2シート目のデータを加工し、表にしたところで上記のコードで改ページを行います。
 
なお、1シート目の大元データで同様の動作をさせると正しく30行目で改ページされます。
 
大変申し訳ないのですが、急いで解決したいです。
不足な情報があれば書きますので、教えてください。
 
よろしくお願いします。

回答
投稿日時: 21/03/20 16:24:16
投稿者: simple

引用:
なお、次のコードです。
LastRow =Cells(Rows.Count,1).End(xlUp).Row
  
For i = 32 To LastRow Step 30
.Rows(1)PageBreak = xlPageBreakManual
next

落ち着いて、コードエディタから、そのままコピーペイストしてみたらどうですか?
ワークシートの指定が漏れているし、(i)じゃなく(1)だしねえ。
あなたのInputミスが混入しているので、本当のところ何が動作しているのか分かりません。

回答
投稿日時: 21/03/20 23:52:00
投稿者: simple

あれ、申し訳ないですが、急いでいるんじゃなかったですか?
 
解決していなければ、正しい情報をアップしてもらえますか?
もし解決されたのなら、閉じてもらえますか?

投稿日時: 21/03/22 00:43:48
投稿者: yuuko3200

simple様
 
申し訳ありません。
 
ご指摘の通り、1はiの誤りです。
 
該当コードの前後でwith〜endwithで指定していたのですが、
もしかしたら該当のコードはシートを指定しないといけなかったのかと考えています。
 
確認環境がどうしても本日は整わず、お返事が遅くなりました。
 
22日に確認して回答いたします。
よろしくお願いします。

回答
投稿日時: 21/03/22 10:25:39
投稿者: WinArrow
投稿者のウェブサイトに移動

>どうしても31行目ごとになってしまいます。
 
ステップ実行して、変数:iの内容を確認しましょう。
rows(i)
の「i」にカーソルを当てると、「i」の値が表示されます。
 

引用:
該当コードの前後でwith〜endwithで指定していたのですが、
もしかしたら該当のコードはシートを指定しないといけなかったのかと考えています。
 

 
この発言はおかしいよ!
このままだとコンパイルエラーで実行すらしないから、
>どうしても31行目ごとになってしまいます。
このような状況にはなりません。
 
掲示板には、手入力せずに、コードペインからコピペしましょう。

投稿日時: 21/03/22 20:37:32
投稿者: yuuko3200

WinArrow様
 
回答、ご指摘ありがとうございます。
取り急ぎ以下お伝えします。
 
ステップインで実行すると正しく改ページされるのですが、
該当マクロを登録したボタンで一括処理すると上手くいきません。
 
またご指摘の点は
該当コードの前後でwith ActiveSheet〜endwithで指定していたという意味です。
一応、sheets(2)のように指定もしてみましたが、結果は同じでした。
 
該当のコードは、後ほどお伝えします。
よろしくお願いします。

回答
投稿日時: 21/03/22 22:36:09
投稿者: WinArrow
投稿者のウェブサイトに移動

どこかに
行挿入のコードがあるのでは?

投稿日時: 21/03/23 20:24:17
投稿者: yuuko3200

WinArrow様
 
お返事が遅くなり申し訳ありません。
1点思いあたることがありました。
 
1ブックの中で2シートを行き来する動作になるため、sheet名の指定があいまいな書き方になっていたことが原因かもと考えました。
修正コードでの動作確認が明日できるので、結果をご連絡いたします。
 
1行目のみ印刷見出し設定をしていても、30行ごとに改ページを入れる時のカウントの仕方は
 
For i = 32 TO LastRow Step 30
 
というコードのように、2ページ目以降も変わらないと思っています。
 
行挿入のコードは動作上特に記述していません・・・
 
またコメントします。

回答
投稿日時: 21/03/23 21:34:00
投稿者: WinArrow
投稿者のウェブサイトに移動

引用:
ステップインで実行すると正しく改ページされるのですが、
該当マクロを登録したボタンで一括処理すると上手くいきません。

 
該当のマクロ全部をステップ実行したのでしょうか?
中途半端では、正しく動作したという確証はないと思いますが・・・

投稿日時: 21/03/25 21:02:34
投稿者: yuuko3200

WinArrow様
 
コメントありがとうございます。
確認したところ、シート指定の仕方が間違っていました。
 
ステップ実行をすべて行ったのですが、思い通りに改ページできていませんでしたが、以下のミスが原因とでした。
 
With Activesheet
 
この中に、sheets(2)と書く必要があるところを、「・」で書いてしまい、
ActiveSheetを有効にしてしまっていたことが原因だったようです。
 
end With
 
色々、すみません。
ありがとうございました。

回答
投稿日時: 21/03/25 21:14:19
投稿者: simple

解決されたようですね。
 
一般的な話として、現在どのシートがアクティブかということに依存するコードは
間違いが混入しやすいです。
どのシートでも適用させるために、あえてActivesheetを使うことがありますが、
それぞれのシートが固有の情報を持っている場合は、きちんとシートを指定するべきです。
 
ちなみに、
>この中に、sheets(2)と書く必要があるところを、「・」で書いてしまい、
ここがよくわかりませんでした。
「・」って何ですか?
後学のために教えてください。

回答
投稿日時: 21/03/25 22:30:46
投稿者: WinArrow
投稿者のウェブサイトに移動

最初に、何回も忠告しましたが、
  
掲示板にコードを載せる場合、手入力では、間違いがあり得ます。
  
最後まで、本当のコード(意図する結果になるかならないかは別)
を掲示して貰えないから、あてずっぽうな回答しかできません。
  
With Activesheet
だけを書いてもらっても、どこに記述したのか?
前後関係がわかりませんから、回答しようもないです。
 

投稿日時: 21/03/26 06:30:57
投稿者: yuuko3200

. は、
sheets(2).row(i)ではなく
.row(i)のように、Active sheetを対象にした書き方をしたことで、望んだ動きにならなかったようです。
 
今回、会社ではなく自宅のパソコンに同じ環境を作ってお話しするべきでした。申し訳ありません。
 
今後注意いたします。