右隣のセルを参照する|Excel VBA

セル操作関連のテクニック

右隣のセルを参照する

(Excel 97/2000/2002/2003/2007/2010)

●概要●

リストから任意の名前を探し、見つかったセルの「右隣」に入力されている値を調べます。

■Offsetプロパティを使う方法
A列に名前、B列に数値が入力されていたとします。
A列から名前を探すにはいくつかの方法が考えられますが、ここではFindメソッドで検索します。
また、見つかったFoundCellの右隣を参照するのにいくつかの書き方がありますが、次のような方法は美しくありませんね。

Range("B" & FoundCell.Row)

行と列を別々の値として指定するのなら、RangeではなくCellsを使うべきです。
あるいは、このケースでは次のようにOffsetプロパティを使うのがセオリーでしょう。

●サンプル1●

Sub Sample1()
    Dim FoundCell As Range
    Set FoundCell = Range("A:A").Find("田中")
    If Not FoundCell Is Nothing Then
        MsgBox FoundCell.Offset(0, 1)
    End If
End Sub

"美しくない"話をしましたので、ついでに書きますが、Offsetプロパティでこのように「行または列の数値が0」のときは、次のように0を省略することが可能です。

FoundCell.Offset(1)    'Offset(1,0)と同じ。カンマと列の0を省略
FoundCell.Offset(,1) 'Offset(0,1)と同じ。行の0を省略

可能ですが、これもオススメできません。理由は、可読性が低下するからです。
0を省略することで、可読性が低下するというデメリットがあります。対して、0を省略するメリットは、わずか1つか2つのキー入力を省略できるというだけです。

作成したマクロが後任者に引き継がれるようなビジネスの現場で、どちらを重要視するべきか、言うまでもありませんね。

■Nextプロパティを使う方法
「右隣」のセルを参照するように、あるセルから見て相対的な位置を参照するときは、Offsetプロパティがセオリーですが、参照する位置が必ず「右隣」または「左隣」と決まっているのなら、別の簡単な方法もあります。

RangeオブジェクトのNextプロパティは、指定したセルから、Tabキーを押して移動するであろうセルを返します。
保護されていない一般的なワークシートではTabキーを押すと、アクティブセルは右隣に移動しますので、保護されていないワークシートで「Range("A3").Next」はセルB3を返します。

もしワークシートが保護されていて、移動できるセルが限定されている場合も、Nextプロパティはやはり、そのセルからTabキーで移動できるセルを返します。
[Shift]+[Tab]キーで移動するであろうセルは、Previousプロパティで取得できます。

●サンプル2●

Sub Sample2()
    Dim FoundCell As Range
    Set FoundCell = Range("A:A").Find("田中")
    If Not FoundCell Is Nothing Then
        MsgBox FoundCell.Next
    End If
End Sub