Home » ExcelVBA Rangeオブジェクト » Offsetプロパティ » Offsetプロパティで左隣のセルを取得する

Offsetプロパティで左隣のセルを取得する

対象:Excel2007, Excel2010, Excel2013, Windows版Excel2016

「vba offset 左隣」
「excel vba offset 左側のセル」
といった検索キーワードで、このサイト・インストラクターのネタ帳へのアクセスが時折あります。

RangeオブジェクトのOffsetプロパティで、

Excel.Range.Offset

左隣・左側のセルを表すRangeオブジェクトを取得するには、どうすればいいのかを探していた方による検索です。

[スポンサードリンク]

左隣のセルを取得するサンプルマクロ

A列以外のセルをアクティブにしておいて、以下のSubプロシージャを実行すると、アクティブだったセルの左隣のセルが選択され、そのアドレスがメッセージボックスに表示されます。

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 左側のセル」
という疑問の本題ではありませんが、実行時エラーが発生しないようにするなら、以下のようなエラートラップを入れましょう。

Sub 左隣のセルを取得する()
On Error GoTo ErrHndl

 Dim rng As Range
 Set rng = ActiveCell.Offset(0, -1)
 rng.Select
 MsgBox rng.Address(False, False)

Exit Sub
ErrHndl:
 MsgBox "左隣にセルは存在しません。"
End Sub

[スポンサードリンク]

Home » ExcelVBA Rangeオブジェクト » Offsetプロパティ » Offsetプロパティで左隣のセルを取得する

「Offsetプロパティ」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.