Excelブックには、個別のワークシートをいくつでも含めることができます。さまざまなワークシート内を移動すると、Excelはどのワークシートでどのセルが選択されているかを追跡します。新しいワークシートに切り替えると、Excelはそのワークシート内で最後にアクティブだったセルをアクティブにします。したがって、ワークシートでセルF9を最後に選択した場合、それは、前のワークシートで何が選択されたかに関係なく、ワークシートを再度表示するときに選択されるセルです。

ただし、一部のブックでは、選択したワークシートのアクティブセルを前のワークシートのアクティブセルと同じにするようにExcelで設定したい場合があります。 Excelでこれを自動的に行う設定はありませんが、試すことができることがいくつかあります。 1つは、次の手順に従うことです。

。 Ctrlキーを押しながら、移動するワークシートのタブをクリックします。これで、2つのワークシートタブが選択されます。太字の名前は実際に画面に表示されているものです。

。移動するワークシートのタブをクリックします。両方のタブを選択する必要がありますが、クリックしたタブだけに名前が太字で表示されているはずです。

。 Ctrlキーを押しながら、残したワークシートのタブをクリックします。

ワークシートを「グループ化」しているため、これらの手順は機能します。これを行うと、Excelは、選択したセルをグループ内のすべてのワークシートで同じにします。

Ctrl-クリック-クリック-Ctrlシーケンスを使用することを忘れないでください。せいぜい面倒です。また、手順3を忘れると、ワークシートに意図しない変更を加える可能性があるため、危険を伴う可能性のあるシーケンスでもあります。 (グループ化されたワークシートで作業している間、1つのシートに加えた変更は、グループ内のすべてのシートでも同様に変更されます。)

これらの3つのステップはマクロでは自動化できませんが、マクロを使用して別のアプローチを取り、同じタスクを実行することができます。最初に行う必要があるのは、次に示すように、ブックのモジュール内の任意の場所でパブリック変数を宣言することです。

Public sAddress As String

この変数sAddressは、アクティブセルの現在のアドレスを格納するために使用されます。ブックの「ThisWorkbook」モジュールで、次の2つのマクロを追加します。

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, _   ByVal Target As Excel.Range)

sAddress = ActiveCell.Address End Sub
Private Sub Workbook_SheetActivate(ByVal Sh As Object)

On Error Resume Next     If sAddress > "" Then Sh.Range(sAddress).Select End Sub

最初のマクロは、選択したセルが変更されるたびにExcelによって自動的に実行されます。アクティブなセルのアドレスを取得し、そのアドレスをsAddress変数に格納するだけです。

2番目のマクロは、ブックがアクティブ化されるたびに自動的に実行されます。

sAddressに何かが保存されているかどうかを確認します。存在する場合は、そこに格納されているセルアドレスを選択します。チャートシートなど、セルを使用しないシートを選択する場合は、エラーコードが必要です。

このマクロアプローチは、1つまたは2つのワークブックでこのナビゲーションの変更のみを行いたい場合に最適です。変更を「システム全体」(いわば)にする場合は、マクロへのアプローチをもう少し複雑にする必要があります。この場合、Excelを起動するたびにコードが読み込まれるように、Personal.xlsブックにコードを配置する必要があります。具体的には、次のコードをPersonal.xlsブックの新しいクラスモジュールに配置します。このクラスモジュールには、ClassXLAppなどのわかりやすい名前を付ける必要があります。

Public WithEvents gobjXLApp As Excel.Application Private mstrAddress As String

Private Sub gobjXLApp_WorkbookActivate(ByVal Wb As Excel.Workbook)

On Error Resume Next     If mstrAddress > "" Then ActiveSheet.Range(mstrAddress).Select End Sub

Private Sub gobjXLApp_SheetActivate(ByVal Sh As Object)

On Error Resume Next     If mstrAddress > "" Then Sh.Range(mstrAddress).Select End Sub

Private Sub gobjXLApp_SheetSelectionChange(ByVal Sh As Object, _   ByVal Target As Excel.Range)

mstrAddress = Selection.Address End Sub

次に、Personal.xlsの「ThisWorkbook」モジュールを開き、次のコードをコピーします。

Private mobjXLApp As New ClassXLApp

Private Sub Workbook_Open()

Set mobjXLApp.gobjXLApp = Excel.Application End Sub

Personal.xlsを保存してExcelを再起動すると、最初に開いたブックの範囲が、次に選択するワークシートで選択されます。

注:

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

link:/ excelribbon-ExcelTipsMacros [ここをクリックして、新しいブラウザタブでその特別なページを開きます]

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

このヒント(3205)は、Microsoft Excel 97、2000、2002、および2003に適用されます。Excel(Excel 2007以降)のリボンインターフェイス用のこのヒントのバージョンは、次の場所にあります。

link:/ excelribbon-Maintaining_the_Active_Cell [アクティブセルの保守]