目次

B,C 列の値を取得したい

今回は、エクセルのワークシートの A 列をループしている途中で B 列 C 列など、別の列の値を取得するマクロを作成してみました。

マクロの中で Range オブジェクトの Offset プロパティを使用してみました。

Offset プロパティは元のセルの行、列を一時的に移動して、移動した先の Range オブジェクトを取得出来るようです。

目次まで戻る

マクロの一例

A 列のループ途中で B,C 列の値を取得する以下のマクロを作成してみました。

「a.Offset(0, 1)」「a.Offset(0, 2)」の記述で、B , C 列の値を取得しています。 Offset(行の移動量 , 列の移動量)の書式で行、列の移動量を指定しています。

Sub A列をループしている途中でB列C列の値を取得するマクロ()
Dim a As Range
For Each a In Range("A2:A6")
Debug.Print a.Value; a.Offset(0, 1).Value; a.Offset(0, 2).Value
Next
End Sub

上記マクロを以下の画像のワークシートで実行してみたいと思います。

A 列をループして、 B 列 C 列の値を取得してみます。
A 列をループして、 B 列 C 列の値を取得してみます。

マクロを実行すると、 VBE のイミディエイトウィンドウに以下の内容が出力されました。ワークシート の B , C 列の値が取得出来たようですね。

1 2 3 
4 5 6
7 8 9
10 11 12
13 14 15

目次まで戻る

数列左の列

数列左の列の値を取得するマクロも作成してみました。

C 列をループして A,B 列の値を取得してみます。行のオフセットを指定しない場合は「Offset( , -2 )」のように 0(ゼロ)を省略出来るようです。

Sub C列をループしている途中でA列B列の値を取得するマクロ()
Dim a As Range
For Each a In Range("C2:C6")
Debug.Print a.Offset(, -2).Value; a.Offset(, -1).Value; a.Value
Next
End Sub

以下の画像のワークシートで実行してみます。

C 列をループして A,B 列の値を取得してみます。
C 列をループして A,B 列の値を取得してみます。

上記マクロを実行してみると、 VBE のイミディエイトウィンドウに以下の内容が出力されました。

1 2 3 
4 5 6
7 8 9
10 11 12
13 14 15

目次まで戻る

上下左右斜め

今度は、元のセルを四方八方にオフセットした位置の値を取得するマクロを作成してみました。

行のみのオフセットを行う場合は「Offset( -2 )」のように行の移動量のみを指定して、 2 つ目の列の移動量の引数は省略出来るようです。

Sub 四方八方にオフセット()

Dim a As Range
Set a = Range("B4")

Debug.Print a.Offset(-2, -1); a.Offset(-2); a.Offset(-2, 1)
Debug.Print a.Offset(-1, -1); a.Offset(-1); a.Offset(-1, 1)
Debug.Print a.Offset(, -1); a.Offset(); a.Offset(, 1)
Debug.Print a.Offset(1, -1); a.Offset(1); a.Offset(1, 1)
Debug.Print a.Offset(2, -1); a.Offset(2); a.Offset(2, 1)

End Sub

以下の画像ワークシートの状態でマクロを実行してみます。 B4 セルを基準にオフセットしてみます。

B4 セルの周囲にある数値を取得してみます。
B4 セルの周囲にある数値を取得してみます。

上記のマクロを実行してみると、以下の内容が VBE のイミディエイトウィンドウに出力されました。

1 2 3 
4 5 6
7 8 9
10 11 12
13 14 15

目次まで戻る

テスト環境

  • Windows 10(64 ビット)
  • Microsoft Office Excel 2003

以上、閲覧ありがとうございました。

目次まで戻る

同じカテゴリの投稿(Excel VBA)

前後の投稿