2つのウィンドウを同期を取ってスクロールさせる。

これは同一シートであることが条件になりますが、そのシートに対して複数のウィンドウを開いた時の同期動作の設定です。
「並べて比較」は標準機能です。   並べて比較
Excel2010から「表示」タブのウィンドウメニューに「並べて比較」が加わっており、細かい設定はできませんが「水平垂直同期」での動作はマクロいらずになりました。 これは対象ウィンドウは2つですが、同一ワークシートの別ウィンドウ表示でも、別シートでも別ワークブックでも機能しますので、あえてマクロを使わなくても機能としては問題ないでしょう。



但し、操作に不得手の方向けなどで、マクロを用意することなどもあるかも知れませんから、このページの説明は残しておきます。



「垂直同期」を試してみましょう。
「水平垂直同期」は事実上、手操作の「並べて比較」で実現できてしまうので、あえて「垂直同期」のみにしてみましょう。
垂直同期
(画像をクリックすると、このサンプルがダウンロードできます)
サンプルを開くと、元々は単一シートでしたが新しいウィンドウが開いて単一シートのまま2つのウィンドウで「垂直同期」が取られます。 これはExcel2013の画像ですが、一旦はスクリーンに最大化した大きさから上下2分割のウィンドウができます。 上下にスクロールさせると2つのウィンドウとも同期してスクロールされますが、左右は同期しないことが判ります。



この方法は、スクリーンからはみ出てしまうような左右に広い表について、左端の方と右端の方をスクリーン内に納めて並べて表示させ、 しかも縦スクロールも同期できるという便利な方法です。 このケースでは横スクロールは同期してしまうより独立していた方が良いわけです。



ソースコードを見てみましょう。

'***************************************************************************************************
'   Window垂直同期サンプル(同一シート)                              ThisWorkbook(Class)
'
'   作成者:井上治  URL:http://www.ne.jp/asahi/excel/inoue/ [Excelでお仕事!]
'***************************************************************************************************
'変更日付 Rev  変更履歴内容------------------------------------------------------------------------>
'03/08/02(1.00)新規作成
'03/11/16(1.01)初回修正
'20/02/23(1.10)*.xlsm化、他
'***************************************************************************************************
Option Explicit

'***************************************************************************************************
'   ■■■ ワークブックイベント ■■■
'***************************************************************************************************
'* 処理名 :Workbook_Open
'* 機能  :ブック起動時自動実行
'---------------------------------------------------------------------------------------------------
'* 返り値 :(なし)
'* 引数  :(なし)
'---------------------------------------------------------------------------------------------------
'* 作成日 :2003年08月02日
'* 作成者 :井上 治
'* 更新日 :2020年02月23日
'* 更新者 :井上 治
'* 機能説明:
'* 注意事項:
'***************************************************************************************************
Private Sub Workbook_Open()
    '-----------------------------------------------------------------------------------------------
    Dim objWbk As Workbook                                          ' 本ブック
    Set objWbk = ThisWorkbook
    Application.ScreenUpdating = False
    ' 本ブックのウィンドウが1つだけだったら新しいウィンドウを開く
    If objWbk.Windows.Count <= 1 Then
        ActiveWindow.NewWindow
    End If
    ' ウィンドウを上下に並べ、縦方向のみ同期させる
    Windows.Arrange ArrangeStyle:=xlArrangeStyleHorizontal, _
                    ActiveWorkbook:=True, _
                    SyncHorizontal:=False, _
                    SyncVertical:=True
    Application.ScreenUpdating = True
End Sub
'
''***************************************************************************************************
''* 処理名 :Workbook_BeforeClose
''* 機能  :ブック閉鎖時自動実行
''---------------------------------------------------------------------------------------------------
''* 返り値 :(なし)
''* 引数  :Arg1 = Cancel(Boolean)                 ※Ref参照
''---------------------------------------------------------------------------------------------------
''* 作成日 :2003年08月02日
''* 作成者 :井上 治
''* 更新日 :2020年02月23日
''* 更新者 :井上 治
''* 機能説明:
''* 注意事項:
''***************************************************************************************************
'Private Sub Workbook_BeforeClose(Cancel As Boolean)
'    '-----------------------------------------------------------------------------------------------
'    Dim objWbk As Workbook                                          ' 本ブック
'    Set objWbk = ThisWorkbook
'    Application.ScreenUpdating = False
'    objWbk.Activate
'    ' ウィンドウの同期を元に戻す
'    Windows.Arrange ArrangeStyle:=xlArrangeStyleCascade, _
'                    ActiveWorkbook:=True, _
'                    SyncHorizontal:=False, _
'                    SyncVertical:=False
'    ' 本ブックのウィンドウが複数だったら1つだけにする
'    Do While objWbk.Windows.Count > 1
'        ActiveWindow.Close False
'    Loop
'    Application.ScreenUpdating = True
'    ' 本ブックを保存済みにする
'    objWbk.Saved = True
'End Sub

'----------------------------------------<< End of Source >>----------------------------------------
このようになっています。



まず、このサンプルは単一ワークブックのアクティブシートについて、2つのウィンドウに並べて縦方向のみスクロール同期させることを目的としています。
Workbook_Open」では、まず、このワークブックのウィンドウが1つしかなかったら新しいウィンドウを開くようにしています。 ワークブックは複数のウィンドウ状態で保存させると、次回もそのウィンドウ状態で開いてしまうので、既に複数のウィンドウが開いている時は、 さらに新しいウィンドウは作成しないようにしています。
但し、この処置は万全ではなく、複数のウィンドウが開いているものの行が同期していなかったり、別シートが選択されていたりすると、期待する結果になりません。



次に「Windows.Arrange」でウィンドウの配置と同期処置が行なわれます。
各引数は「:=」をなぞる(上から再入力する)と値の候補メンバが表示されるので変更しながら試してみて下さい。



Workbook_BeforeClose」は全体をコメントにしていますが、動作があまり芳しくないためです。
Excel2010まではMDIだったので「いきなり全てを閉じる」があり得たのですが、 Excel2013以降はSDIなので各ウィンドウごとに閉じることになります。 従って「Workbook_BeforeClose」は最後のウィンドウを閉じる段階で動作するため、 その時点ではこのような単一ワークブックのウィンドウでは「1つしかない」ことになります。 つまり「Windows.Arrange」の意味がないわけです。
そのくせ、ウィンドウの最大化を解除していても「Windows.Arrange」の動作で最大化してしまうということがあります。