ブックのシートを並べて表示

今開いているブックのシートを並べて比較したい場合があります。新と旧のシートを比較する場合などですね。

Excelの仕様上、シートだけを切り離して表示することはできないため、ブックを2つ用意することになりますが、同じブックを別で作成しておく必要はありません。これはExcelの標準の機能で実現出来るのですが、結構手間がかかるためマクロにしてしまった方がラクです。

処理自体はWindows.Arrangeメソッドを使えば並べて表示することは可能ですが、実作業で使うにはそれだけでは不足している部分があります。

後述のソースコードではそのあたりも含めて、シートを並べて表示する方法を紹介しています。


手作業での手順

Excelでする場合の手順は以下になります。

  1. 並べて表示したいシートがあるブックを選択する。
  2. 表示メニュー→ウインドウ→新しいウインドウで開く をクリック。
  3. 表示メニュー→ウインドウ→整列 をクリック。
  4. ウインドウの整列ダイアログで、整列ラジオボタン(並べて・上下・左右・重ねて)を選択して、「作業中のブックのウィンドウを整理する」にチェックを付けてOKボタンを押す。
  5. 表示メニュー→ウインドウ→並べて比較 をクリック。
  6. 表示メニュー→ウインドウ→同時にスクロール をクリック。

これで、今開いているブックが2つ並んで表示されます。

以下はこれを自動化するマクロになります。


ソースコード

上下に整列するマクロ

上下に並べて整列するマクロです。

左右に整列するマクロ

左右に並べて整列するマクロです。



ソースコードの説明

上下と左右の2つのソースコードですが、やっていることはほとんど同じで、違うのは10行目のArrangeStyleの引数のみです。

4行目はウィンドウサイズを標準にしています。これは最小化されているとコピーは作成できるのですが、最小化された状態のままだと並べて表示が出来ないため標準サイズに変更しています。

7行目は選択しているブックのコピーを作成します。このソースではアクティブウィンドウ(ActiveWindow)を指定していますが、任意のブックを指定したい場合はWindowオブジェクトかWorkbookオブジェクトを指定します。

このソースのようにアクティブウィンドウの場合はエラーになりませんが、任意のブックを指定したい場合で開いていないWorkbookを指定するとエラーが発生するためそのブックが開いているかのチェック処理が必要になります。

10行目が整列のメイン処理です。

ここには4つの引数があります。

ArrangeStyle

ArrangeStyleが未指定の場合は既定値のxlArrangeStyleTiledの動作になります。

指定する場合の定数は以下になります。かっこは定数値です。

  • xlArrangeStyleTiled(1) 既定値です。全ウィンドウを均等にタイル状に並べて表示します。
  • xlArrangeStyleCascade(7) タイトルバーが見える状態で重ねて表示します。
  • xlArrangeStyleHorizontal(-4128) 上下に並べて表示します。
  • xlArrangeStyleVertical(-4166) 左右に並べて表示します。

ActiveWorkbook

ActiveWorkbookを省略した場合の既定値はFalseです。

既定値の場合は全ウィンドウを整列します。

アクティブウィンドウとそのウィンドウのコピーを整列する場合はTrueを設定します。

SyncHorizontal

ActiveWorkbook:=Trueの場合のみ動作します。

整列したウィンドウで縦スクロールを同期する場合はTrueを設定します。

省略時の既定値はFalseです。

SyncVertical

ActiveWorkbook:=Trueの場合のみ動作します。

整列したウィンドウで横スクロールを同期する場合はTrueを設定します。

省略時の既定値はFalseです。


使い方

並べて表示したいブックを選択して、上記マクロを実行します。

上下、左右のどちらで並べたいかで実行するマクロを決めてください。表示したいシートは個別に手で選択してください。

なお、そこまで気にならないとは思うのでソースコードには実装しませんでしたが、コピーして作成したブックはコピー元の状態を引き継がない部分があります。例えば、コピー元でグリッド線の表示を消していてもコピーで作成したウィンドウはグリッド線が表示されています。

何を引き継がないのかを明確には調べていませんが、そのあたりが気になる場合は適宜カスタマイズして利用してください。