Excel&VBA解説サイト「エクセルの神髄」様出題の問題集、
「VBA100本ノック」に対する私の回答と解説のページです。
100本ノックの出題リストはこちらから
excel-ubara.com
出題:Window操作
#VBA100本ノック 47本目
ブックの全ウィンドウの全シートに対して以下の処理を行ってください。
・A1セルを選択しA1セルが見える状態にする
・ズームを85%
・枠線を非表示
・表示を標準
・印刷の向き「横」
※全ウィンドウという点を忘れずに
※ブックは任意

◇ 出題ページはこちら
ソースコード
Option Explicit ' 100本ノック047:Window操作 Sub 全ウィンドウの全シートに表示設定を行う() Dim wb対象ブック As Workbook: Set wb対象ブック = ActiveWorkbook ' 全ウィンドウを順に処理 Dim ウィンドウ As Window For Each ウィンドウ In wb対象ブック.Windows ウィンドウ.Activate ' 各ウィンドウごとに全シートを処理 Dim シート As Worksheet For Each シート In wb対象ブック.Worksheets シート.Activate ' A1セルを選択しA1セルが見える状態にする ウィンドウ.ScrollRow = 1 ウィンドウ.ScrollColumn = 1 シート.Range("A1").Select ウィンドウ.Zoom = 85 ' ズームを85% ウィンドウ.DisplayGridlines = False ' 枠線を非表示 ウィンドウ.View = xlNormalView ' 表示を標準 シート.PageSetup.Orientation = xlLandscape '印刷の向き「横」 Next Next End Sub
解説
ウィンドウごとの表示設定を行う問題です。
注意しなければいけないのが
「同じシートでもウィンドウが異なれば違う設定にできる」
点で、「新しいウィンドウを開く」を使用時に対応しなければいけません。
よってウィンドウ1のシート1、ウィンドウ1のシート2、・・・
、ウィンドウ2のシート1、ウィンドウ2のシート2、・・・
と、各ウィンドウの中ですべてのシートに設定を行う必要があります。
それがわかればコード自体は特に難しいことはなく、
各ウィンドウをActiveにしてから各シートをActiveにすることで、
そのウィンドウ内の対象シートへ処理を実行することができます。
逆に言うと、
ウィンドウ.Zoom = 85
このコードはActiveSheetによって処理対象が変わるコードですので、
実際に使うときはこの仕様に注意して設定してください。