「vba offset 左隣」
「excel vba offset 左側のセル」
といった検索キーワードで、このサイト・インストラクターのネタ帳へのアクセスが時折あります。
RangeオブジェクトのOffsetプロパティで、
左隣・左側のセルを表すRangeオブジェクトを取得するには、どうすればいいのかを探していた方による検索です。
左隣のセルを取得するサンプルマクロ
A列以外のセルをアクティブにしておいて、以下のSubプロシージャを実行すると、アクティブだったセルの左隣のセルが選択され、そのアドレスがメッセージボックスに表示されます。
Dim rng As Range
Set rng = ActiveCell.Offset(0, -1)
rng.Select
MsgBox rng.Address(False, False)
End Sub
ポイントは、
Set rng = ActiveCell.Offset(0, -1)
の引数です。
Range.Offsetプロパティの第2引数に「-1」を指定すれば、左隣のセルを表すRangeオブジェクトを取得できます。
Range.Offsetの引数は2つとも書くほうが可読性は上がる
「vba offset 左隣」
「excel vba offset 左側のセル」
という検索をなさった方は、これまで、
Set rng = ActiveCell(1)
Set rng = ActiveCell(, 1)
といったオブジェクト式を、よくご覧になってきたのではないかと推測しています。
Range.Offsetプロパティには引数を2つ指定することができます。
第1引数には行方向にいくつオフセットするか、
第2引数には列方向にいくつオフセットするかをそれぞれ指定します。
列方向へのオフセットがないときに、
Set rng = ActiveCell(1)
行方向へのオフセットがないときに、
Set rng = ActiveCell(, 1)
といった書き方をする方が少なからずいらっしゃいます。
しかしこれらの省略した書き方と、
Set rng = ActiveCell(1, 0)
Set rng = ActiveCell(0, 1)
上記のように省略せずに「0」を明記した書き方と、あとから読むときに、どちらが理解しやすいか、どちらが誤解を生みにくいかを、しっかりと感じてみてください。
エラー処理を含む左隣のセルを取得するサンプルマクロ
上記のマクロでは、A列のセルがアクティブだった場合には実行時エラーが発生してしまいます。
「vba offset 左隣」
「excel vba offset 左側のセル」
という疑問の本題ではありませんが、実行時エラーが発生しないようにするなら、以下のようなエラートラップを入れましょう。
On Error GoTo ErrHndl
Dim rng As Range
Set rng = ActiveCell.Offset(0, -1)
rng.Select
MsgBox rng.Address(False, False)
ErrHndl:
MsgBox "左隣にセルは存在しません。"
End Sub
Home » Excel VBA Rangeオブジェクト » Offsetプロパティ » Offsetプロパティで左隣のセルを取得する