Johnには、ブック内のさまざまなワークシートでいくつかの処理を行うマクロがあります。彼は、マクロの開始時に、ユーザーが選択したセルの範囲(または単一のセル)を保存したいと考えています。彼はActiveCell.Addressを使用してこれを決定します。次に、マクロの最後で、ユーザーが最初に選択したのと同じ範囲を選択して、ユーザーに戻りたいと考えています。

問題は、マクロがユーザーが開始した場所とはまったく異なるワークシートで終了する可能性があり、ActiveCell.Addressはセルアドレスのみを提供し、ワークシート名や範囲を提供しないことです。ジョンは、マクロの最後でユーザーの元の場所に戻ることができるように、必要なものを保存するための最良の方法について疑問に思います。

誰かを最初の場所に戻す可能性を最大限に高めるには、ワークブック、ワークシート、セルの3つの要素があります。実際、この最後の要素(セル)は、ユーザーが常にセルを選択するため(これはActiveCell.Addressによって返されるものです)、少し単純化されている場合がありますが、さらに範囲が選択されている場合もあります。

4つのアイテムすべてを取得する方法は次のとおりです。

Dim rngOrigSelection As Range Dim rngOrigCell As Range Dim sOrigWS As String Dim sOrigWB As String

Set rngOrigSelection = Selection Set rngOrigCell = ActiveCell sOrigWS = ActiveSheet.Name sOrigWB = ActiveWorkbook.Name

後でユーザーを元の場所に戻したい場合は、次のタイプのコードを使用できます:

Workbooks(sOrigWB).Activate Sheets(sOrigWS).Select rngOrigSelection.Select rngOrigCell.Activate

もちろん、Excelには、特定のタスクを実行するための複数の方法が常にあります。この場合、アクティブセルと選択した範囲のみを記憶することでコードを短縮できます:

Dim rngOrigSelection As Range Dim rngOrigCell As Range

Set rngOrigSelection = Selection Set rngOrigCell = ActiveCell

ユーザーをその場所に復元する場合は、VBAで使用可能なParentオブジェクトを使用します。

rngOrigSelection.Parent.Parent.Activate rngOrigSelection.Parent.Select rngOrigSelection.Select rngOrigCell.Activate

保存した選択範囲の親オブジェクトはその範囲が配置されているワークシートであり、その親オブジェクトの親はワークシートが配置されているブックです。

もう1つのアプローチは、マクロ内に、ユーザーが選択したものを参照する名前付き範囲を作成することです。

ActiveWorkbook.Names.Add Name:="MyOrigPlace", RefersTo:=Selection

処理を行った後、ユーザーが選択したものに戻る準備ができたら、次のコードを使用します。

Application.Goto Reference:="MyOrigPlace"

ActiveWorkbook.Names("MyOrigPlace").Delete

最初の行は選択に戻り、2番目の行は名前付き範囲を削除します。このアプローチの唯一の欠点は、アクティブセルが保持されないことです。このコードは、範囲内の左上のセルをアクティブセルにすることを前提としています。また、処理によって名前付き範囲を構成するセルが削除されると、コードが正しく機能しない可能性があることにも注意してください。Excelは存在しなくなった場所に移動できません。

もちろん、マクロを正しくコーディングすれば、場所をまったく覚えておく必要がない場合もあります。 VBAを使用すると、ワークシートやブックのさまざまな領域を「移動」して選択できますが、ほとんどの場合、これは必要ありません。たとえば、現在の選択範囲やアクティブセルを変更することなく、さまざまな範囲で作業してから、それらの範囲で作業を行うことができます。実際、VBAを使用すると、実際にセルを選択しなくても、セルに対して想像できるほとんどすべての変更、再フォーマット、並べ替え、削除、および実行を行うことができます。

注:

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

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

このヒント(6161)は、Microsoft Excel 2007、2010、2013、2016、2019、およびOffice 365のExcelに適用されます。Excelの古いメニューインターフェイス用のこのヒントのバージョンは、次の場所にあります。