次のコードは、B列の数値が10より大きいときは、
B列の同じ行の、A列のセルの値をF列をシート一番下から上へ進んでみつけたセルを起点としたセル内へ、B列のセルの値をG列へ代入するマクロである。
次の選択肢の中から空欄に入るものとして適切なものを1つ答えなさい。
Sub Exam1()
Dim i As Long, LastRow As Long
LastRow = Cells(Rows.Count, 1).End(xlUp).Row
For i = 2 To LastRow
If Cells(i, 2) > 150 Then
Cells(Rows.Count, 6).End(xlUp)【 空欄① 】= Cells(i, 1)
Cells(Rows.Count, 6).End(xlUp).Offset(1, 1) = Cells(i, 2)
End If
Next i
End Sub
1. Offset(1)
2. .Offset(1)
3. .Offset(, 1)
4. Offset(0, 1)
正解
2
解説
【7章 ステートメント】
【Offsetプロパティ】
●Offsetプロパティは、指定したセルの位置から別のセルの位置を指定することができます。
構文
セル.Offset(行, 列)
Offsetプロパティの基点となるセルの位置は(0,0)で行, 列です。
右に一つ目のセルは(0,1)、下に一つ目のセルは(1,0)という具合に指定します。
●ー(マイナス)の値は、行の場合は左、列の時は上を表します。

●引数の省略
・行を下に一つ目のセルは(1,0)のときは(1)、
列を右に一つ目のセルは(0,1)(,1)のように
行や列の変わらない時、Offsetの引数の0を省略して表すこともできます。
・Offset(1, 0)・・・Offset(1)
・Offset(0, 1)・・・Offset(, 1)
【コード解説】
次のコードは、B列の数値が10より大きいときは、
B列の同じ行の、A列のセルの値をF列をシート一番下から上へ進んでみつけたセルを起点としたセル内へ、B列のセルの値をG列へ代入するマクロである。
次の選択肢の中から空欄に入るものとして適切なものを1つ答えなさい。
Sub Exam1()
Dim i As Long, LastRow As Long
‘変数の宣言をする。
LastRow = Cells(Rows.Count, 1).End(xlUp).Row
’変数LastRowにRows.Countでシート行の数を数えて、
’行の一番下から上へ向かって値があるセルのセル行番号(数)をRowプロパティで取得する。
For i = 2 To LastRow
‘①開始値から終了値まで繰り返し処理を行う。
If Cells(i, 2) > 10 Then
‘条件分岐 B列指定のセルの値が10より大きい時は以下の処理を行う。
Cells(Rows.Count, 6).End(xlUp).Offset(1) = Cells(i, 1)
’Cells(Rows.Count, 6).End(xlUp) 6列目 F列の行数を数えて、下から上に向かって進みつきあたるセルを指定する。
’見つかったセルをOffsetプロパティで1行下へ位置をずらして、A列のセルの値を代入する。
’.Offset(1) は.Offset(1, 0) の省略表現です。
Cells(Rows.Count, 6).End(xlUp).Offset(1, 1) = Cells(i, 2)
’6列目の見つかったセルをOffsetプロパティで1行下1列右へ位置をずらして、B列のセルの値を代入する。
End If
’①へ終了値まで繰り返し戻る。
Next i
’①へ終了値まで繰り返し戻る。
End Sub
1. Offset(1)
誤り。
Offsetの記述では、Offsetの前にドット(.)が必要です。
2. .Offset(1)
正しい。
Cells(Rows.Count, 6).End(xlUp) は、F列の一番下から上へ進んで見つかった最初のデータセル(F列の最終データセル)を指しています。
.Offset(1) は、そのセルから1行下、同じ列(F列)のセルを参照します。これにより、A列の値をF列の次の空いている行に代入できます。
3. .Offset(, 1)
誤り。
これは .Offset(0, 1) と同じ意味で、対象セルと同じ行の1列右(G列)のセルを参照します。A列の値を代入したいのはF列なので間違いです。
4. Offset(0, 1)
誤り。
先頭にドット(.)がない点と、G列のセルを参照してしまう点の両方が間違いです。