Excel VBA ベーシック 模擬問題 模擬試験

Excel VBA ベーシック 模擬問題 第19問 7章-5

次のマクロを実行したとき、その結果についてどうなったか、

次の選択肢の中からから正しいものを1つ選択しなさい。

VBA basicステートメント

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