ウィンドウを操作するVBA

Excelでは、同じブックを2つのウィンドウで表示できるので離れた範囲や別のシートを並べて表示したり操作したりすることができます。
同じブックの違うシートを同時に見たり操作したり
このウィンドウをVBAで操作することができます。逆に普通に操作していることでもウィンドウを対象にしないとできないこともあるのでその解説をします。

Windows

Windowsは現在開いているウィンドウすべてを表します。
はじめにブックオブジェクトを指定し、ThisWorkbook.Windowsで対象ブックのウィンドウを指定しますが、省略すると、開いているすべてのブックの全てのウィンドウを表します。省略したときのそのウィンドウの元ブックを特定するには、Windows(1).Parentで親要素を見ることでブックを特定できます。

ActiveWindow

今、操作しているウィンドウを指します。

Count

Countはウィンドウの数を表します。ThisWorkbook.Windows.CountでThisWorkbookのウィンドウの数がわかります。

Caption

ウィンドウを複製した場合、タイトルバーにブック名に-1、-2のような名称が表示されます。

これがCaptionです。ActiveWindow.Captionで取得できますし、ActiveWindow.Caption=”ABC”でウィンドウのタイトルをブック名ではなく、ABCという文字に変えることができます。これはファイルを閉じたらリセットされます。

Zoom

Zoomは表示の拡大縮小率を表します。ActiveWindow.Zoom=75のように%は入力しません。Sheetに対し設定するもののようなイメージがありますが、実はZoomはWindowで指定します。シート1枚1枚に拡大縮小率を設定する場合はそのシートを表示しウィンドウ番号を取得する必要があるので、シートをアクティブにしてからActiveWindow.Zoom=50という処理をするのが手っ取り早いかもしれません。
次のようなループでブックにかかわらず、すべてのウィンドウの拡大縮小率を75%にすることはできます。

For Each wnd In Windows
  wnd.Zoom=75
Next

しかし、それぞれのブックに対し、表示しているシートの拡大縮小率しか変わりません。
開いている全てのブックの全てのシートに対して拡大縮小率を75%にするためには次のようなループにする必要があるでしょう。

For Each bk In Workbooks
  bk.Activate 
  For Each sh In bk.Worksheets
    sh.Select
    ActiveWindow.Zoom=75
  Next 
Next

このように本来ブックやシートで指定出来てほしい設定がWindowsでしか設定できなくなっているものがあります。それらはExcelのリボンだと表示タブの機能です。 たとえ同一ウィンドウを複製していなくてもこれらの設定はWindowsオブジェクトの設定となり、実際にそのウィンドウを表示した上でActiveWindowに対して設定していくのが一番手っ取り早い方法になります。

FreezePanes

そのウィンドウのウィンドウ枠の固定の状況を表します。
ActiveWindow.FreezePanes=Trueでその前に選択されているセル範囲に対してウィンドウ枠の固定がされます。ActiveWindow.FreezePanes=Falseで解除されます。
ウィンドウ枠の固定がされていなければセルD4でウィンドウ枠の固定をする場合は次のVBAで実行できます。

If Not ActiveWindow.FreezePanes Then
  Range("D4").Select
  ActiveWindow.FreezePanes=True
End If

SplitColumn、SplitRow

SplitColumnはウィンドウの分割列でSplitRowはウィンドウの分割行です。
ActiveWindow.SplitColumn=0で列の分割をやめます。SplitRowも同様です。

View

Viewは標準表示や改ページプレビューなどの表示の方法を変えます。
ActiveWindow.View = xlNormalViewで標準表示、xlPageLayoutViewでページレイアウト、 xlPageBreakPreviewで改ページプレビューになります。

DisplayHeadings

DisplayHeadingsは行列の見出しを表示するかを示しています。Trueで表示、Falseで非表示です。

DisplayGridlines

DisplayGridlinesはセルの枠線を表示するかを示しています。Trueで表示、Falseで非表示です。

DisplayFormulaBar

DisplayFormulaBarは数式バーを表示するかを示しています。Trueで表示、Falseで非表示です。

コメント

タイトルとURLをコピーしました