次のマクロを実行したとき、その結果についてどうなったか、
次の選択肢の中からから正しいものを1つ選択しなさい。
Sub Exam1()
Dim i As Long
For i = 2 To Cells(Rows.Count, 1).End(xlUp)
If Cells(i, 1) = "静岡" Then
If Cells(i, 3) > 800 And Cells(i, 4) > 2400 Then
MsgBox Cells(i, 2)
End If
End If
Next i
End Sub
1.メッセージボックスに「愛知」と表示される
2.メッセージボックスに「福岡」と表示される
3.何も起きない
4.エラーになる
正解
4
解説
【7章 ステートメント】
1.「愛知」と表示される
誤り
エラーが発生するため、この処理は実行されません。
2.「福岡」と表示される
誤り
エラーが発生するため、この処理は実行されません。
3.何も起きない
誤り
エラーが発生するため、この選択肢も誤りです。
4.エラーになる
正解
.Row を指定しない場合、実行時エラー 13 が発生します。
表の最下行にあるセルを特定するとき、よくEndモードを使います。Endモードは「基準セル.End(方向)」のように指定して、行き着くであろう"セル"を返します。
Endモードが返すのは"セル"です。
その"セルの行番号"ではありません。
For…Nextステートメントに指定する場合は、行番号を表すRowをつけなければなりません。
【コード解説】
Sub Exam1()
Dim i As Long
For i = 2 To Cells(Rows.Count, 1).End(xlUp)
' A列のデータが存在する最終行までループを実行するが.Rowがないため実行時エラーとなり処理はとまります。
処理が止まるので以下の解説は参考情報としてください。
If Cells(i, 1) = "静岡" Then
' A列の値が「静岡」の場合に条件をチェック
If Cells(i, 3) > 800 And Cells(i, 4) > 2400 Then
' C列が800より大きく、D列が2400より大きい場合
MsgBox Cells(i, 2)
' B列(地域名)をメッセージボックスに表示
End If
End If
Next i
End Sub