VBA入門
第54回.Windowsオブジェクト

ExcelマクロVBAの基本と応用、エクセルVBAの初級・初心者向け解説
最終更新日:2020-10-14

第54回.Windowsオブジェクト


Windowオブジェクトは、ブックやシートの見方を変えることのできるもので、
エクセルで「ウインドウ」と表現されているものをマクロVBAで扱う時のオブジェクトになります。


エクセルのリボンでは「新しいウインドウ」や「ウインドウ枠」といった言葉で表現されているものです。
手操作ではなんとなく理解して使っていても、その実態はかなり理解しづらいものとなっています。
スクロールバー、枠線などの多くのワークシート関連の見た目は、実際にはウィンドウのプロパティです。

Windowオブジェクトについて少し詳しく見てみましょう。
Windowオブジェクトの集まりが、 Windowsコレクションであり、
Windowオブジェクトは、Windowsコレクションのメンバーです。

Windowの指定方法

Windows("ウインドウ名")
ウインドウ名で指定されるウインドウ
Windows(インデックス)
インデックス(ウインドウの順番)で指定されるウインドウ
ActiveWindow
アクティブウインドウ

ウインドウ名は、ワークブックに1つだけウインドウが存在している場合は、
ウインドウ名 = ワークブック名
複数ウインドウが存在している場合は、
ウインドウ名 = ワークブック名:ウインドウ番号
このように指定します。

Windowオブジェクトデータ型

Window
つまり、
Dim 変数 As Window
のように使います。
ただし、
Windowオブジェクトを変数に入れて使うようなマクロVBAを書くことはほとんどないでしょう。

Windowオブジェクトのプロパティとメソッド

Windowオブジェクトに含まれるプロパティ・メソッドは、非常にたくさんあります。
Windowのプロパティ、メソッドの一覧
エクセルの基本である、Windowオブジェクトのプロパティ、メソッドの一覧です。覚えるというより、必要に応じて調べて使うものになります。Windowオブジェクトのプロパティ一覧 Windowオブジェクトのメソッド一覧 名前 説明 Activate ウィンドウをZオーダーの前面に移動します。
Windowオブジェクトの、プロパティとメソッドの、ごく一部で良く使うものを紹介します。

プロパティ DisplayGridlines 枠線を表示
DisplayHeadings 行と列の両方の見出しを表示
DisplayHorizontalScrollBar 水平スクロール バー
DisplayVerticalScrollBar 垂直スクロール バー
DisplayWorkbookTabs シート見出しを表示
FreezePanes 分割ウィンドウ枠を固定します
Zoom 表示サイズを、パーセント単位
メソッド Activate アクティブにする
Close 閉じる
SmallScroll 行または列数分だけウィンドウをスクロールします
LargeScroll ページ数分だけウィンドウをスクロールします
NewWindow 新しいウィンドウ、またはウィンドウのコピーを作成

今までに出てきたのは、Activateくらいです。

Windowオブジェクトの解説

恐らく、WorkbookオブジェクトやWorkSheetオブジェクトとの違いに戸惑うのではないかと思われます。
これは、エクセルの基本操作で、複数ウインドウを使う事が少ない事とも関係していると思います。
上で紹介した、プロパティ・メソッドは、Windowオブジェクトのメンバーであり、
WorkbookオブジェクトやWorkSheetオブジェクトには存在していません。

つまり、スクロールバーや枠線は、ブックやシートに設定するものではなく、
Windowオブジェクトに設定するものだということです。

例えば
DisplayGridlines ・・・ 枠線を表示
これは、ワークシートでもなければ、ワークブックの情報でもないのです。
従って、「新しいウインドウを開く」では、その情報は引き継がれません。

部屋があり、その窓(ウインドウ)から部屋を見ていると考えて下さい。
部屋の上の方を見ているとか、窓に目盛をつけて見易くしているとか、
それらは、部屋の中には一切関係していないのです。
部屋の中は、実際には何も変化していないのです。
別の窓から覗けば、部屋の中は同じでも、別の見え方になるということです。

マクロVBAでは、Windowのメソッドを使う事はほとんどないと思います。
プロパティについては、
VBAで新規ブックや新規シートを作成した時に設定する必要になる事はあるでしょう。

Windowオブジェクトの使用例

Dim wd As Window
Set wd = ActiveWindow
With wd
  .DisplayGridlines = False '枠線を非表示
  .DisplayHeadings = False '行と列の両方の見出しを非表示
  .DisplayHorizontalScrollBar = False '水平スクロールバーを非表示
  .DisplayVerticalScrollBar = False '垂直スクロール バーを非表示
  .DisplayWorkbookTabs = False 'シート見出しを表示
  .FreezePanes = False '分割ウィンドウ枠を固定解除
  Range("C3").Select
  .FreezePanes = True 'C3セルでウィンドウ枠を固定
  .Zoom = 75 '表示サイズを75%
End With

Windowオブジェクトは、少々理解しづらいのですが、使用する場面も限られていますので、
ここで紹介したプロパティが使えれば問題ないでしょう。

アクティブシート以外のWindowの設定

枠線や行列見出しは、どのVBAサンプルを見ても大抵はActiveWindowに対して設定しているはずです。
これは、ActiveWindowのActiveSheetに対して設定していることになります。
では、ActiveSheet以外のシートにこれらを設定する方法は無いのでしょうか。
以下では、シートをアクティブにすることなく表示(Window)に関する設定を行う方法と、設定可能なプロパィを紹介しています。

アクティブシート以外の表示(Window)に関する設定
VBAの中でも非常に分かりづらいオブジェクトにWindowオブジェクトがあります。Windowオブジェクトは、ブックやシートの見方を変えることのできるものです。Windowオブジェクトの集まりがWindowsコレクションです。



同じテーマ「マクロVBA入門」の記事

第51回.Withステートメント
第52回.オブジェクト変数とSetステートメント
第53回.Workbookオブジェクト
第54回.Windowsオブジェクト
第55回.Worksheetオブジェクト
第56回.Rangeオブジェクト(RangeとCells)
第57回.Applicationのプロパティ(マクロ高速化と警告停止等)
第58回.コレクションとは(Collection)
第59回.コレクション処理(For Each)
第60回.エラー処理(On Error)
第61回.「On Error GoTo」と「Exit Sub」


新着記事NEW ・・・新着記事一覧を見る

VBA100本ノック 61本目:「ふりがな」の取得と設定|VBA練習問題(1月6日)
VBA100本ノック 60本目:「株式会社」の表記ゆれ置換|VBA練習問題(1月5日)
VBA100本ノック 59本目:12ヶ月分のシートを四半期で分割|VBA練習問題(1月4日)
Select Caseでの短絡評価(ショートサーキット)の使い方|VBA技術解説(1月3日)
VBA100本ノック 迷宮編:巡回セル問題|VBA練習問題(12月31日)
VBA100本ノック 58本目:番号リストを簡潔にした文字列で返す|VBA練習問題(12月30日)
VBA100本ノック 57本目:ファイルの更新日時|VBA練習問題(12月29日)
VBA100本ノック 56本目:数式内の自身のシート名を消す|VBA練習問題(12月28日)
VBA100本ノック 55本目:他ブックのマクロを起動|VBA練習問題(12月26日)
VBA100本ノック 54本目:シートのChangeイベント|VBA練習問題(12月25日)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.RangeとCellsの使い方|VBA入門
3.変数宣言のDimとデータ型|VBA入門
4.マクロって何?VBAって何?|VBA入門
5.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
6.繰り返し処理(For Next)|VBA入門
7.Range以外の指定方法(Cells,Rows,Columns)|VBA入門
8.セルに文字を入れるとは(Range,Value)|VBA入門
9.とにかく書いてみよう(Sub,End Sub)|VBA入門
10.繰り返し処理(Do Loop)|VBA入門




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。



このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ