パソコン活用研究5番街(Visual Basic、Excel(VBA)、BASIC プログラミング研究)

ブック(シート)の表示位置、サイズの変更

1 ブックの表示位置、サイズの設定
ブックの表示位置、サイズを表すプロパティは以下のように
Top(EXCELのWindow内での縦の位置)、Left(EXCELのwindow内での横位置)
Height(ブックの高さ)、Width(ブックの幅)
です。

Microsoft Excel                                             
       |
       Top
<-Left->  | 
Book1                          |         
                                |             
          Height  
           |  
           |  

     <−−−−−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


TopPage > Visual BasIc&Excel活用研究目次