ファイルを開いた時に、ウインドウ枠の固定や解除を自動でするVBAを紹介します。
エクセルを表示するモニターにはさまざまなサイズがあります。
近頃のデスクトップPCのモニターは横長のものが多いですし、昔のものを使い続けている方のモニターは正方形に近いものがほとんどでしょう。コンパクトなサイズを好まれる方もいらっしゃいますし、大きいサイズのものを好まれる方もいらっしゃいます。
デバイスの種類も、デスクトップPC・ノートPC・スマートフォンなどと、増えるばかりです。
今回は、一つのエクセルファイルを複数人で編集・閲覧する場合、編集者それぞれのモニターの大きさが異なることで問題となる「ウインドウ枠の固定」について解決しましょう。
具体的にはどんなことが問題となりますか。
エクセルファイルにおいて、モニターの大きさが異なると、一度に表示できるセル範囲が変わってきます。
確かに、大きいモニターだとたくさんのセルがいっぺんに見れるし、小さいモニターだとそれよりも少ない範囲しか画面上に表示できないですね。
大きいモニターの画面上で、より右側の列や下側の行を基準にしてウインドウ枠を固定し保存すると、次に小さいモニターでそのエクセルファイルを開いたとき、固定された部分で画面がいっぱいになってスクロールできなくなってしまいます。
小さい画面を使用している人は、ファイルを開くたびにウインドウ枠の固定を解除しないといけなくなりますね。
そうです。でも大きい画面の人はウインドウ枠の固定を使用したいですよね。その方が見やすいですから。
解決策として、モニターの大きさによってウインドウ枠の固定を設定するかどうか判断するVBAを紹介します。
ブックを開いたときに実行するVBAの作成
VBAを記入するウインドウを開く
- マクロを作成したいエクセルブックの、Visual Basic for Applicationsを開きます(F11を押下)。
- 左側のVBA Projectから、Microsoft Excel Objectの中のThisWorkBookをダブルクリックし、コードを記述するウインドウを表示します。
- (General)のプルダウンから、「Workbook」を選択します。
- 3.の横の(Declarations)から「Open」を選択します。
これでこのブックを開いたときに実行するマクロを記入する準備ができました。
VBAを記入する
上記の結果で表示される
「Private Sub Workbook_Open()」と「End Sub」の間にVBAを記述していきます。
Private Sub Workbook_Open()
ActiveWindow.WindowState = xlMaximized
Sheets(“●●●”).Select
ActiveSheet.Unprotect
ActiveWindow.FreezePanes = False
ActiveWindow.ScrollColumn = 1
ActiveWindow.ScrollRow = 1
If ActiveSheet.AutoFilterMode Then
ActiveSheet.AutoFilterMode = False
End If
If ActiveWindow.VisibleRange.Columns.Count > 20 Then
Range(“S2”).Select
ActiveWindow.FreezePanes = True
End If
ActiveSheet.Protect
End Sub
VBAの説明
- ウインドウを最大化する
- シートを指定する
- (シートを保護しているのであれば)保護を解除する
- ウインドウ枠の固定を解除する
- 左端に表示されるセルをA1にする
- オートフィルタを解除する
- ウインドウに表示されているセルを確認する(T列が表示されているならば)
- S2セルを基準にウインドウ枠の固定をする
- シートを保護する(必要があれば)
補足
<VBAの説明>7.のVisibleRange.Columns.Countはウインドウに表示されている最終列を取得しています。
ウインドウに表示されている最終行を取得する場合は、VisibleRange.Rows.countへ、
ウインドウに表示されているセル範囲を取得する場合は、VisibleRange.Addressへ変更します。
ただしこれらのVBAは、ウインドウ枠の固定をしている場合、固定されている部分はカウントされません。固定外の部分だけを反映した結果を返します。
コメント