Sub ForEach_Range()
Dim rg As Range
For Each rg In Range("C2:H29")
If rg.Value >= 40 Then
rg.Interior.ColorIndex = 46
rg.Font.ColorIndex = 2
rg.Font.Bold = True
End If
Next
End Sub
のようにオブジェクト型の変数を宣言する場合は、
Sub ForEach_Range()
Dim rg As Range
Set rg = Range("C2:H29")
For Each rg In Range("C2:H29")
のようにSetで変数を割り当てなくても良いのでしょうか?
2017/10/29 18:20
小川慶一さんのコメント
(コメントID: 4998)
柴田 邦彦さん:
こんにちは。
> のようにオブジェクト型の変数を宣言する場合は、 > [[snip]] > For Each rg In Range("C2:H29") > のようにSetで変数を割り当てなくても良いのでしょうか?
柴田 邦彦さんの投稿
(投稿ID: 3521)
のようにオブジェクト型の変数を宣言する場合は、
のようにSetで変数を割り当てなくても良いのでしょうか?
小川慶一さんのコメント
(コメントID: 4998)
こんにちは。
> のようにオブジェクト型の変数を宣言する場合は、
> [[snip]]
> For Each rg In Range("C2:H29")
> のようにSetで変数を割り当てなくても良いのでしょうか?
柴田さんご自身は、どう思われますか?
そう思われる理由も添えて投稿ください。よろしくお願いいたします。
柴田 邦彦さんのコメント
(コメントID: 5002)
柴田です。
どう思われますか?との問いに対して回答いたします。
Set rg = Range("C2:H29")の一行を入れても入れなくてもマクロにエラーは出ません。
ただ、発展1講座第1章 - 総称オブジェクト型で習った内容を律儀に実行するのであれば、As Rangeでオブジェクト型の変数宣言をしていますので、変数reにオブジェクトを格納するためには、Setで割り当てる必要があると考えます
小川慶一さんのコメント
(コメントID: 5004)
こんばんは。
先に結論を書きます。
For Each構文で個別のオブジェクトへの参照用に用意した変数に対しては、For Each構文がはじまる前に何らかの参照設定を施す必要はありません。
また、ここの2回の柴田さんからの投稿に出てくる用語の使われ方、論理構成を見る限り、第1章、第4章についての理解が不足しているように思います。
まずは、箇条書きにして要点を整理します。以下の[a]-[c]です。
たぶん、これで十分ではないか、と思いますが...。
もし、これを読んで、第1章、第4章を復習しても、まだ不明なことが出てきたようでしたら、どれがどう理解できないか?をお知らせください。
[a] オブジェクト型変数の宣言は以下の構文で行う。
[b] オブジェクト型変数の初期値は Nothing である。
[c] オブジェクト型変数に対してオブジェクトへの参照設定をする方法は、以下の2つがある。
[c-1] 以下の構文で明示的に設定する
[c-2] 以下のように、For Each構文内で暗示的に指定させる(コレクションの要素ひとつひとつを順に参照する)