• 締切済み

VBA ブックを並べて同時にスクロール

いつもこのサイトにはお世話になっています。 以下のことができないか困っています。 1.2つのブック(A.xls、B.xls)を並べて開く。 2.A.xlsをユーザ操作にて縦スクロールする。 3.2につられてB.xlsも(自動に)縦スクロールされる。 2つのブックが、常に同じセル範囲を表示していてほしいのです。 (本当は横スクロールにも対応したいです。) ご存知の方、よろしくお願いいたします。 環境:Office2000

みんなの回答

  • Raistlin
  • ベストアンサー率63% (65/102)
回答No.3

「選択範囲が変わった」というイベントはありますので、それを利用してみました。 添付のコードを、比較するシートのシートモジュールに貼り付けてください。 コードを貼り付けたシートの選択範囲が変わると、そのウィンドウの左上隅のセルを記憶し、他の全てのウィンドウの左上隅のセルを揃えます。 注意事項 ・整形用に全角スペースを使用していますので、使用前に置換してください。 ・残りのウィンドウの状態を判定していません(グラフシートなどでこける)ので、必要に応じて適当に改変してください。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) '残りのウィンドウの表示範囲をアクティブウィンドウと同期する   Dim lRw As Long, lClmn As Long   Dim objWDW As Window   Application.ScreenUpdating = False   With ActiveWindow     lRw = .ScrollRow     lClmn = .ScrollColumn   End With   For Each objWDW In Windows     With objWDW       .ScrollRow = lRw       .ScrollColumn = lClmn     End With   Next   Application.ScreenUpdating = True End Sub

  • cotetu
  • ベストアンサー率14% (1/7)
回答No.2

Office2003だと、2つブックを開いてメニューバーの「ウィンドウ」-「***と比べて比較」で実現できます。 マクロ吐いてみたら、この1行のみでした。 Windows.CompareSideBySideWith ("B.xls") ・・・でも、Office2000なんですよね。 2003からの新機能だし、使えないですよね。

参考URL:
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/vbaxl11/html/xlmthCompareSideBySideWith.asp
yurikoxxxx
質問者

お礼

ご回答ありがとうございます。 Office2003ではマクロを組まなくてもできてしまうんですね。 参考になりました。

  • kigoshi
  • ベストアンサー率46% (120/260)
回答No.1

同一Excelウインドウに2つのブックを開くのでしたら下記ソースをお試し下さい。 A.xlsのThisWorkbookに以下を貼り付けて下さい。 Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range) Static asRow, asCol As Integer If (asRow = ActiveWindow.ScrollRow) And (asCol = ActiveWindow.ScrollColumn) Then Exit Sub asRow = ActiveWindow.ScrollRow asCol = ActiveWindow.ScrollColumn Workbooks("B.xls").Activate ActiveWindow.ScrollRow = asRow ActiveWindow.ScrollColumn = asCol Workbooks("A.xls").Activate End Sub

yurikoxxxx
質問者

お礼

ご回答ありがとうございます。 Kigoshiさんの方法を試したところ 以下の操作を行ったら、B.xlsも同じ箇所を見るようになりました! 1.A.xlsとB.xlsを並べる 2.A.xlsをスクロールする。 3.A.xlsの選択セルを変更する。 →B.xlsもA.xlsと同じだけスクロールされた。 ただ、できれば2までの操作で同期させたいのです。 「スクロールをした」とか「セルの表示位置が変わった」とかいう イベントプロシージャは存在しないんでしょうか・・・。 もしご存知でしたら教えてください。