パソコン活用研究5番街(Visual Basic、Excel(VBA)、BASIC プログラミング研究)
ブック(シート)の表示位置、サイズの変更
1 ブックの表示位置、サイズの設定
ブックの表示位置、サイズを表すプロパティは以下のように
Top(EXCELのWindow内での縦の位置)、Left(EXCELのwindow内での横位置)
Height(ブックの高さ)、Width(ブックの幅)
です。
Microsoft Excel | ||||||||||||||||||||||
| Top <-Left-> |
<−−−−−Width−−−−−−−−−−−−−−−−−−−−−−> |
(1) ブックの表示位置、サイズの設定
ただし、ブックを表すWorkbookオブジェクトにはTop,Left,Width,Heightといったプロパティが
ありません。これらはWindowオブジェクトに属するプロパティなので、ブックの位置、サイズを指定
するには次のように記述します。
Workbooks("Book1.xls").Windows(1).Top=0
Workbooks("Book1.xls").Windows(1).Left=0
Workbooks("Book1.xls").Windows(1).Height=100
Workbooks("Book1.xls").Windows(1).Width=200
あるいは、次のような記述もできます。
ブックをEXCELのwindow内の左上隅に表示する
Sub SET_Book( )
Workbooks("Book1.xls").activate
ActiveWindow.Top=0
ActiveWindow.Left=0
End Sub
なお、Windowオブジェクトについては後で説明します。
(2) ブックを消す
VIsibleプロパティで非表示にする
Workbooks("Book1.xls").Windows(1).Visible=False
あるいは、EXCELのWindowに表示されない領域に位置を変更するという方法もあります
Workbooks("Book1.xls").Windows(1).Top=
-Workbooks("Book1.xls").Windows(1).Height
Workbooks("Book1.xls").Windows(1).Left=
-Workbooks("Book1.xls").Windows(1).Width
(3) EXCELのwindowの枠内いっぱいに表示する
EXCELのWindowの枠内のサイズは
Application.UsableHeight
Application.UseableWidth
で求められます。
従って、枠内いっぱいにブックを表示するには以下のようにします
Workbooks("Book1.xls").Windows(1).Top=0
Workbooks("Book1.xls").Windows(1).Left=0
Workbooks("Book1.xls").Windows(1).Height=
Application.UseableHeight
Workbooks("Book1.xls").Windows(1).Width=
Application.UseableWidth
(4) 最大表示、アイコン化
WindowStateプロパティを使って、ブックを最大表示、アイコン化することができます。
ブックをアイコン化するには次のように記述します
Workbooks("Book1.xls").Windows(1).WindowState =
xlMinimized
同様に通常表示は xlNormal 最大表示は xlMaximized を指定します
2 複数のブックの処理
複数のブックを開いている時に、開いているブックの数を取得するには Countプロパティを使用して
Workbooks.Count
で求められます。
従って、全てのブックをアイコン化するなら以下のように記述します。
For i=1 To Workbooks.Count
Workbooks(i).Windows(1).WindowState = xlMinimized
Next
また、Book1.xlsだけを表示して他のブックをみなアイコン化したいなら、以下のようにします
For i=1 To Workbooks.Count
If StrComp("Book1.xls",Workbooks(i).Name, 1) <>0
Then
Workbooks(i).Windows(1).WindowState = xlMinimized
End If
Next
StrCompは文字列を比較する関数で、文字列が等しければ0を返します。
ちなみに、最初の文字列>2番目の文字列なら1、その逆なら−1を返します
3 Windowオブジェクトとブック(シート)の整列
Windowオブジェクトには、ブック(Workbookオブジェクト)に属するものと、EXCEL本体(application
オブジェクト)に属するものがあります。
EXCEL本体に属するWindowオブジェクトは
Application.Windows(1)
というように記述しますが、通常はApplicationを省略します。
従って、いきなり、Windows(1) のような書き方をすると、これはApplicationオブジェクトのWindow
オブジェクトになります。
今、3つのブックが開かれている場合、WindowオブジェクトのIndexは3まで存在します。
つまり、Windows(3) までが存在します。
アクテイブウィンドウは常にWindows(1)になります。
ある特定のブックは通常1つしか開かれていないので、ブックに属するWindowオブジェクトのIndexは
通常1です。
例えば、Workbooks("Book1.xls").Windows(1)
さて、ApplicationオブジェクトのWindowオブジェクトを使って、複数のブックを少しづつ、づらして表示する
マクロは次のようになります。
Sub Arrange_Book()
For i=1 To Workbooks.Count
Windows(i).Top =i*10
Windows(i).Left = i*10
Next
End Sub
また、ブック(ウィンドウ)を整列させる専門のメソッド Arrange がWindowオブジェクトにあります。
Arrangeメソッドの構文
Object.Arrange(arrangestyle,activeWorkbook,syncHorizontal,syncVertical) |
ObjectにはWindowsコレクションオブジェクトを指定する arrangestyle: xlTiled 開かれているウィンドウが全て画面に表示されるよう、サイズを縮小して並べる xlCascade 全てのタイトルバーが見えるように、少しづつ、づらして表示する。(上記マクロはこれに近い) xlHorizontal ウィンドウを同じサイズに縮小し、縦に並べる xlVertical ウィンドウを同じサイズに縮小して、横並びにする xlIcon アイコン化されたウィンドウの整列 activeWorkook: True アクティブブックの現在表示されているウィンドウだけ整列 False (デフォルト) 全てのウィンドウを整列 syncHorizontal: True: アクテイブブックのウィンドウを左右にスクロールすると、他のウィンドウも同時スクロールする syncVertical: True: 上記同様。上下スクロール |
上記マクロと同じような動作をさせるには以下のように記述します。(ちょつと結果はちがうけど)
Windows.Arrange arrangestyle:=xlCascade