複数のワークシートを使用する場合、Chrisは、すべてのワークシートのスクロールを「ロック」する方法があるかどうか疑問に思います。たとえば、行100〜140と列G〜Pが表示されるまでSheet1を下にスクロールして横切る場合、Sheet2(または他のワークシート)に切り替えると、同じ行と列がそれらに表示されるようにします。ワークシート。

このタスクを実行する唯一の方法は、マクロを使用することです。何が起こらなければならないかというと、マクロは、シートが非アクティブ化された(残っている)ときに表示される行と列を判別し、アクティブ化されたシート(これから移動するシート)の表示を同じ行と列に設定する必要があります。 ThisWorkbookモジュールに追加された次のマクロは、まさにこのタスクを実行します。

Dim grngSelection As Range Dim gintScrollColumn As Integer Dim glngScrollRow As Long

Private Sub Workbook_SheetActivate(ByVal Sh As Object)

If TypeName(ActiveSheet) = "Worksheet" Then         On Error Resume Next         With ActiveWindow             Sh.Range(grngSelection.Address).Select             .ScrollColumn = gintScrollColumn             .ScrollRow = glngScrollRow         End With     End If End Sub
Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)

Dim oSheet As Object     If TypeName(Sh) = "Worksheet" Then         Set oSheet = ActiveSheet         Application.EnableEvents = False         Sh.Activate         With ActiveWindow             gintScrollColumn = .ScrollColumn             glngScrollRow = .ScrollRow             Set grngSelection = .RangeSelection         End With         oSheet.Activate         Application.EnableEvents = True     End If End Sub

イベントハンドラーの外部での変数の使用に注意してください。これらの変数は、列、行、および選択された領域の値をSheetDeactivateハンドラーからSheetActivateハンドラーに渡すために使用されます。

もちろん、自動ソリューションは必要ないかもしれません。代わりに、ワークシートが同期されているかどうかをトリガーする特定の手順をユーザーに実行させたい場合があります。これは、ワークブックの通常のモジュールに次のマクロを追加することで実行できます。

Global WindowScrollRow Global WindowScrollCol Global WindowSyncOn As Boolean

Public Sub WindowLock()

If Not WindowSyncOn Then         WindowScrollRow = ActiveWindow.VisibleRange.Row         WindowScrollCol = ActiveWindow.VisibleRange.Column         Application.StatusBar = "WindowSync: ON"

Else         Application.StatusBar = ""

End If     WindowSyncOn = Not WindowSyncOn End Sub

このマクロが行うことは、グローバル変数WindowSyncOnのステータスをチェックすることだけです。値がFalseの場合、一番上の表示行と一番左の表示列の現在の設定がグローバル変数に格納されます。これらの変数の設定は、ThisWorkbookモジュールに追加された次のイベントハンドラーによって使用されます。

Private Sub Workbook_SheetActivate(ByVal Sh As Object)

If WindowSyncOn Then         If Not ActiveWindow Is Nothing Then             ActiveWindow.ScrollRow = WindowScrollRow             ActiveWindow.ScrollColumn = WindowScrollCol         End If     End If End Sub

マクロは単にWindowSyncOn変数の設定をチェックし、それがTrue(設定済み)の場合、マクロはアクティブなウィンドウの上部と左側にある行と列を設定します。

注:

このページ(または_ExcelTips_サイトの他のページ)で説明されているマクロの使用方法を知りたい場合は、役立つ情報を含む特別なページを用意しました。

_ExcelTips_は、費用効果の高いMicrosoftExcelトレーニングのソースです。

このヒント(3860)は、Microsoft Excel 97、2000、2002、および2003に適用されます。