処理開始時のセルの保持する方法
VBAでの処理で選択セルの位置が変わることがあります。
そのため、処理開始時のセルを再度選択したい場面があります。
その場合は、処理開始時にどのセルが選択されているのかを保持しておけばいいのですが、保持方法には2つあります。
1つはセルの位置であるAddressプロパティの値を保持しておく方法で、もう1つはセル自体をRangeオブジェクトとして保持しておく方法です。
書き方に違いがあるため、それぞれについて紹介します。
1. Addressプロパティを使う方法
処理開始時のAddressプロパティを事前に取得しておき、必要になったときに開始時点のアドレスを選択する方法です。
Addressプロパティは引数を設定しなければ「$C$15」のように$が付きます。$は絶対参照の意味です。$がなければ相対参照になります。
.Address(False, False)と書くと「C15」のように$が無い形となります。どちらの場合もRangeオブジェクトの引数に渡して利用することが可能です。
ここではアドレスさえ分かればいいのでAddressプロパティの引数は省略しています。
Addressプロパティについては「セルのアドレスを取得する」に詳細を書いていますのでご参照ください。
5行目のSelection.Addressですが、単一セルではなくてセル範囲を選択している場合でも使えるようにSelectionとしています。
セル範囲の場合のAddressプロパティの値は「$C$17:$H$21」のようにセル範囲が返却されます。
アクティブセルの単一セルだけを保持しておきたい場合は「Selection.Address」ではなく「ActiveCell.Address」としてください。
1 2 3 4 5 6 7 8 9 10 11 12 |
Sub StartAddressTest() Dim sAddress As String '// 開始セル位置 '// 開始時点のアドレス取得 sAddress = Selection.Address '// 中略(処理で開始時とは別のセルが選択された状態になる) Range("C10").Select '// 開始時点のアドレスを選択 Range(sAddress).Select End Sub |
2. Rangeオブジェクトを使う方法
処理開始時の選択セルのRangeオブジェクトを保持しておき、あとで必要になったときにそのRangeオブジェクトをSelectメソッドで選択する方法です。
選択セルが単一セルの場合もセル範囲の場合もRangeオブジェクトは同じため、どちらも同じ書き方になります。
Rangeオブジェクトを保持する際にはオブジェクトのためSetステートメントが必要になります。
1 2 3 4 5 6 7 8 9 10 11 12 |
Sub StartRangeTest() Dim rStart As Range '// 開始セル '// 選択セルを保持 Set rStart = ActiveCell '// 中略(処理で開始時とは別のセルが選択された状態になる) Range("C10").Select '// 最初の選択セルを選択 rStart.Select End Sub |