• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBAでヘッダーにページ設定)

VBAでヘッダーにページ設定

このQ&Aのポイント
  • VBAを使用して、シートA・B・C以外のページ数をヘッダーに表示するマクロを作成します。
  • シートを追加しても、このマクロを使用してページ設定を再設定することができます。
  • 複数のシートを選択して印刷する場合、正しいページ数が表示されない問題があります。どのような設定が必要でしょうか?

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

  • ベストアンサー
  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.3

なんとなく理解できました。 これでどうでしょう。 各シートに先頭ページ番号を指定して、ページ数自体は「&P」で出しています。 Sub Sample()      総ページ = 0   For Each sht In Worksheets     sht.Select     総ページ = 総ページ + Application.ExecuteExcel4Macro("get.document(50)")   Next   ページ数 = 0      For Each sht In Worksheets     If sht.Name <> "A" And sht.Name <> "B" And sht.Name <> "C" Then       sht.Select       sht.PageSetup.FirstPageNumber = ページ数 + 1       sht.PageSetup.RightHeader = "&""MS Pゴシック""&8&P/" + CStr(総ページ)       ページ数 = ページ数 + Application.ExecuteExcel4Macro("get.document(50)")     End If   Next End Sub

noname#165268
質問者

お礼

回答いただきありがとうございます。 思い通りの動作を確認できました。 分かりにくい説明にもかかわらず、丁寧に解説いただき本当に助かりました。 ありがとうございました。

その他の回答 (3)

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.4

>複数のシートを選択して印刷をすると、ページ数がおかしくなります。 印刷もマクロで行えば For Each sh In ActiveWindow.SelectedSheets   sh.PrintOut Preview:=True Next

  • nao-y
  • ベストアンサー率58% (111/190)
回答No.2

#1さんのコードでは意図していることができない、ということでしょうか? その、「意図されていること」がわからないのですが、、、 > ブックにシートが10枚あるとし、そのうちのシートA・B・Cを除いて、 > 残りのシートにページをシート順に表示させようと思います。 > ここでは1/7・2/7。。。というようにシートを1枚選択した場合でも、 > 総ページとページ数を表示させたいのです。 > シートが挿入されても総ページ数を取得して再設定できるようにしたのですが、 > 印刷時に質問のような問題が出てしまいました。 「質問のような問題」とは、以下のことですよね? > 印刷時にシートを1枚ずつ選択して印刷すると正しくページ数が表示されますが > 複数のシートを選択して印刷をすると、ページ数がおかしくなります。 > 複数シート選択時に正しいページ数で印刷できるようにするには この、「ページ数がおかしくなります」とは、具体的にどういうことですか? 「ページをシート順に表示させようと」ということと合わせると、 もしかして、次のような問題でしょうか? 左から、シートA・B・Cを除いて以下の順番でシートが並んでいる。 シート1、シート2、シート3、シート4 それぞれのシートは印刷するとページが2P、1P、3P、1Pの合計7Pになる。 本当は、 シート1の1ページ目:1/7、シート1の2ページ目:2/7 シート2の1ページ目:3/7 シート3の1ページ目:4/7、シート3の2ページ目:5/7、シート3の3ページ目:6/7 シート4の1ページ目:7/7 と表示させたいのに、例えば、 シート1の1ページ目:5/7、シート1の2ページ目:6/7 シート2の1ページ目:7/7 シート3の1ページ目:1/7、シート3の2ページ目:2/7、シート3の3ページ目:3/7 シート4の1ページ目:4/7 と表示されてしまう、ということでしょうか? だとすれば、For Eachの部分を For i=1 to Worksheets.Count (iはLong型で宣言)と書けば解決すると思いますが。。。 いずれにせよ、何が問題なのか説明不足だと思います。

  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.1

単純にこういう事ではないのかな? Sub Sample()   For Each sht In Worksheets     If sht.Name <> "A" And sht.Name <> "B" And sht.Name <> "C" Then       sht.PageSetup.RightHeader = "&P/&N"     End If   Next End Sub

noname#165268
質問者

補足

ありがとうございます。説明不足で申し訳ございません。 全てのシートを印刷する際に、通常でしたら複数選択したシートに順にページ番号が付きますが、1シートだけ選択した場合はページが1/1のようになってしまいます。 ブックにシートが10枚あるとし、そのうちのシートA・B・Cを除いて、残りのシートにページをシート順に表示させようと思います。ここでは1/7・2/7。。。というようにシートを1枚選択した場合でも、総ページとページ数を表示させたいのです。 シートが挿入されても総ページ数を取得して再設定できるようにしたのですが、印刷時に質問のような問題が出てしまいました。 ご教授の程、よろしくお願い致します。

関連するQ&A