- 締切済み
VBA ブックを並べて同時にスクロール
いつもこのサイトにはお世話になっています。 以下のことができないか困っています。 1.2つのブック(A.xls、B.xls)を並べて開く。 2.A.xlsをユーザ操作にて縦スクロールする。 3.2につられてB.xlsも(自動に)縦スクロールされる。 2つのブックが、常に同じセル範囲を表示していてほしいのです。 (本当は横スクロールにも対応したいです。) ご存知の方、よろしくお願いいたします。 環境:Office2000
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- Raistlin
- ベストアンサー率63% (65/102)
「選択範囲が変わった」というイベントはありますので、それを利用してみました。 添付のコードを、比較するシートのシートモジュールに貼り付けてください。 コードを貼り付けたシートの選択範囲が変わると、そのウィンドウの左上隅のセルを記憶し、他の全てのウィンドウの左上隅のセルを揃えます。 注意事項 ・整形用に全角スペースを使用していますので、使用前に置換してください。 ・残りのウィンドウの状態を判定していません(グラフシートなどでこける)ので、必要に応じて適当に改変してください。 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)
Office2003だと、2つブックを開いてメニューバーの「ウィンドウ」-「***と比べて比較」で実現できます。 マクロ吐いてみたら、この1行のみでした。 Windows.CompareSideBySideWith ("B.xls") ・・・でも、Office2000なんですよね。 2003からの新機能だし、使えないですよね。
- kigoshi
- ベストアンサー率46% (120/260)
同一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
お礼
ご回答ありがとうございます。 Kigoshiさんの方法を試したところ 以下の操作を行ったら、B.xlsも同じ箇所を見るようになりました! 1.A.xlsとB.xlsを並べる 2.A.xlsをスクロールする。 3.A.xlsの選択セルを変更する。 →B.xlsもA.xlsと同じだけスクロールされた。 ただ、できれば2までの操作で同期させたいのです。 「スクロールをした」とか「セルの表示位置が変わった」とかいう イベントプロシージャは存在しないんでしょうか・・・。 もしご存知でしたら教えてください。
お礼
ご回答ありがとうございます。 Office2003ではマクロを組まなくてもできてしまうんですね。 参考になりました。