- ベストアンサー
EXCELの複数のシートに同じページ設定をしたいです
いつもお世話になっております。 マクロに初挑戦です。 すでに作成してあるブックに、同じページ設定をしたいです。 「マクロの記録」で、以下のマクロを作成しました。 Excel2003です。 Sub PageSetting() ' Keyboard Shortcut: Ctrl+Shift+F With ActiveSheet.PageSetup .RightHeader = "&A" '右上にシート名 .CenterFooter = "- &P -" '下中央にページ番号 .RightMargin = Application.InchesToPoints(0.393700787401575) '右余白1cm .TopMargin = Application.InchesToPoints(0.78740157480315) '上余白2cm .BottomMargin = Application.InchesToPoints(0.393700787401575) '下余白1cm .HeaderMargin = Application.InchesToPoints(0.590551181102362) 'ヘッダー1.5cm .FooterMargin = Application.InchesToPoints(0.196850393700787) 'フッター0.5cm End With End Sub ブック内のすべてのシートに適用するわけではないので、 複数シートを選択しておいて(作業グループ)、 まとめて適用したいのですが、どうすればよいのでしょうか? 今現在は、設定したいシートを1つずつ選択して、 Ctrl+Shift+F を押しています。 よろしくご指導お願い致します。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
#1です。 > 残念ながら、シート名もページ番号も表示されず、変化なしでした。 マクロを含むブックでは無く、他のブックに適用させたい? そんな事、何処にも書いてなかったので処理をマクロを含むブック内に限定した書き方になってます。 For Each ws In ThisWorkbook.Windows(1).SelectedSheets ↓ For Each ws In ActiveWorkbook.Windows(1).SelectedSheets に直したらどうでしょうか? > 「選択したシート名を取ってくる」というサブルーチン(?) > を追加すればよい、ということになるのでしょうか・・・? > 何をどう書けばよいのか、わかりません。 For Each ws In ActiveWorkbook.Windows(1).SelectedSheets これがそれです。
その他の回答 (3)
- imogasi
- ベストアンサー率27% (4737/17069)
#2です。 >合計400枚くらいあります. >ブック内のすべてのシートに適用するわけではないので それであれば、本番データのないシートのA列に、そのブックの中で、同じ内容のPageSetUpすることを、適用するシート名を書き込む。 そしてシート名シートの最下行を探し(仮にdとする) For i=1 to d sn=Worksheets("シート名シート").Cells(i,"A") Worksheets(sn)).Activate MsgBox ActiveSheet.Name '確認用 以下#2と同じ Next i ・・・ をブックの数だけそれぞれのブックへコピーして実行してはどうでしょう。
お礼
無事できました!!ありがとうございます!! 勉強してVBAを扱えるようになりたいです。 ありがとうございました!!!
- imogasi
- ベストアンサー率27% (4737/17069)
Sub Macro1() sn = Array("s1", "s2", "s3") '選択するシート名 For i = 0 To 2 Worksheets(sn(i)).Activate MsgBox ActiveSheet.Name With ActiveSheet.PageSetup .LeftHeader = "" .CenterHeader = "シート " & sn(i) .RightHeader = "" .LeftFooter = "" .CenterFooter = "" ' 以下省略 End With Next i End Sub を実行し、各シートを印刷プレビューで見ると CenterHeaderが意図通りになっていた。 指定しないシートはCenterHeaderは空白のまま。 各シートごとに、本当にPageSetup情報を別に持っていて くれているのか(現瞬間のActiveシートだけではなイか)心配だったからですが、杞憂のようです。 だから本質問では、選択したシートのPageSetupに同じプロパティを設定したいのなら、上記CenterHeaderの行を含めて同じにして、ループさせれば良い。 シート選択(指定)の仕掛けは別方法もあるでしょうが メインテーマで無いようなので、上記にした。
お礼
ご回答ありがとうございます!! 同じページ設定にしたいものは、複数のブックに渡り 合計400枚くらいあります。となると、 「選択したシート名を取ってくる」というサブルーチン(?) を追加すればよい、ということになるのでしょうか・・・? 何をどう書けばよいのか、わかりません。 「マクロの記録」の不要な記述部分を削ることは、なんとかできたのですが。 VBAの本を借りてきたので、勉強します。
- papayuka
- ベストアンサー率45% (1388/3066)
3行程追加しました。 これでどうでしょう? Sub PageSetting() Dim ws As Worksheet ' Keyboard Shortcut: Ctrl+Shift+F For Each ws In ThisWorkbook.Windows(1).SelectedSheets With ws.PageSetup .RightHeader = "&A" '右上にシート名 .CenterFooter = "- &P -" '下中央にページ番号 .RightMargin = Application.InchesToPoints(0.393700787401575) '右余白1cm .TopMargin = Application.InchesToPoints(0.78740157480315) '上余白2cm .BottomMargin = Application.InchesToPoints(0.393700787401575) '下余白1cm .HeaderMargin = Application.InchesToPoints(0.590551181102362) 'ヘッダー1.5cm .FooterMargin = Application.InchesToPoints(0.196850393700787) 'フッター0.5cm End With Next ws End Sub
お礼
早速のご回答ありがとうございます! 残念ながら、シート名もページ番号も表示されず、変化なしでした。 なぜでしょう・・・? 再びご指導お願い致します。
お礼
無事できました!!!ありがとうございます!!! 説明不足で申し訳ありませんでした。 複数のブックを処理したいのでマクロの保存先を 「個人用マクロブック」にしてPERSONAL.XLSに記述しています。 VBAが扱えると仕事を楽に進められるようになるのですね。 これを機にVBAを勉強していきたいと思います。 ありがとうございました!!!