【VBA】Setが必要なときと不要なときの違い
変数に代入をするとき、Set 変数 = 〜、とSetステートメントが必要なときがあります。
しかし、変数への代入であっても不要なときもあります。
本やサイトを書き写しているけど、よく分からないという人もいるかもしれません。
今回はSetが必要な代入と要らない代入の違いについて解説します。
Setが必要なのはオブジェクトの代入
Sub Sample()
Dim rng As Range
Set rng = Range("A1")
Dim str As String
str = "ABC"
End Sub
Setステートメントが必要になるのは、変数にオブジェクトを代入するときです。
上のコードでは、Range型変数とString型変数に代入をしています。
Rangeはオブジェクトのため代入にはSetが必要になります。反対にString型はオブジェクトでないため、Setは不要です。
ここで、じゃあそもそもオブジェクトってなに?と疑問に思うかもしれません。
簡単にいうと、プロパティ(例:Range.Value)やメソッド(Range.Copy)があるものはオブジェクトになります。
プロパティやメソッドがあるものを代入するときにはSetステートメントが必要と覚えておきましょう。
Setが不要な代入
VBAには下表のようなデータ型があり、これらの代入にはSetステートメントは不要です。
ちなみに、Setステートメントは不要ですが、実は省略可能なLetステートメントが省略されています。
データ型 |
---|
Boolean |
Byte |
Currency |
Date |
Decimal |
Double |
Integer |
Long |
LongLong |
LongPtr |
Single |
String |