アクティブセルの保守(Microsoft Excel)
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 [アクティブセルの保守]
。