以下のコードを実行した際の結果と、Withステートメントに関する説明として最も適切なものはどれか。
以下の選択肢より1つ解答しなさい。
ただし、プロジェクト内に「Module1」というモジュールが存在するものとする。
Sub Exam1()
With Modules("Module1")
MsgBox "モジュール名: " & .Name
MsgBox "行数: " & .CountOfLines
End With
End Sub
1.コードは正常に実行され、メッセージボックスが2回表示される。このステートメントは、同じオブジェクトに対する処理でオブジェクト名を省略し、可読性を高める。
2.コードは正常に実行されるが、メッセージボックスは1回しか表示されない。Withステートメントは、最初の処理のみに適用されるためである。
3.コンパイルエラーが発生する。これはWithステートメント内でプロパティ名の前にピリオド(.)がないためである。
4.コードは正常に実行されるが、一つのWithステートメントで複数の異なるオブジェクトを指定できるため、例えばModules("Module1")とModules("Module2")を同時に指定することも可能である。
正解
1
解説
【4章 ステートメント】
【With…End With ステートメント】
●With ステートメントは、指定のオブジェクトを省略しまとめた記述にして、可読性上げるために使用されます。
●With. 省略する対象からEnd Withまでは
語句の最初に「.」とついている場合はVBAでは「省略する対象」を指定しているとみなされます。
構文
With. 省略する対象
「.」から始まる語句
End With・・・ここが省略した記述の終了行です。
●End Withまで省略して記述されていることと同じと扱われます。
【コード解説】
以下のコードを実行した際の結果と、Withステートメントに関する説明として最も適切なものはどれか。
以下の選択肢より1つ解答しなさい。
ただし、プロジェクト内に「Module1」というモジュールが存在するものとする。
Sub Exam1()
With Modules("Module1")
’Withステートメントでモジュール名「Module1」を省略する。
MsgBox "モジュール名: " & .Name
’Nameプロパティでモジュール名を取得しメッセージで表示します。
MsgBox "行数: " & .CountOfLines
’CountOfLinesプロパティで行数を取得しメッセージで表示します。
End With
’省略を終了する。
End Sub


1.コードは正常に実行され、メッセージボックスが2回表示される。このステートメントは、同じオブジェクトに対する処理でオブジェクト名を省略し、可読性を高める。
正しい。
Withステートメントは、同じオブジェクトが繰り返し出てくるコードにおいて、オブジェクト名を省略して記述できるようにするものです。
これにより、コードの可読性が向上し、オブジェクトへの参照回数が減ることで実行速度も向上します。
2.コードは正常に実行されるが、メッセージボックスは1回しか表示されない。Withステートメントは、最初の処理のみに適用されるためである。
誤り。
Withブロック内の全ての処理に対して、指定したオブジェクトが適用されます。このコードでは2つのMsgBoxが実行されます。
3.コンパイルエラーが発生する。これはWithステートメント内でプロパティ名の前にピリオド(.)がないためである。
誤り。
Withステートメント内でオブジェクト名を省略して記述する場合、そのオブジェクトのプロパティやメソッドの前にピリオド(.)を付ける必要がありますが、示されたコードでは正しくピリオドが使用されています。
4.コードは正常に実行されるが、一つのWithステートメントで複数の異なるオブジェクトを指定できるため、例えばModules("Module1")とModules("Module2")を同時に指定することも可能である。
誤り。
Withステートメントで指定できるオブジェクトは一つだけです。複数のオブジェクトを一つのWithステートメントで指定することはできません 。