このサイトの記事内では「アフィリエイト広告」などの広告を掲載している場合があります。
消費者庁が問題としている「誇大な宣伝や表現」とならないよう配慮しコンテンツを制作しておりますのでご安心ください。
問題のある表現が見つかりましたらお問い合わせよりご一報いただけますと幸いです。

【VBA】Setが必要なときと不要なときの違い

2024年6月22日

変数に代入をするとき、Set 変数 = 〜、とSetステートメントが必要なときがあります。

しかし、変数への代入であっても不要なときもあります。

本やサイトを書き写しているけど、よく分からないという人もいるかもしれません。

今回はSetが必要な代入と要らない代入の違いについて解説します。

VBAが難しいと感じたら
ココナラにてVBAの作成依頼を受け付けています。
ご依頼・ご相談はこちらから

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
Set不要なデータ型一覧

《VBA上級者になりたい人へ》
VBA上級者を目指したい人にはパーフェクトExcel VBA一択です。
この本を読み切れば間違いなくVBA上級者になれます。

created by Rinker
技術評論社
¥3,608 (2024/11/10 14:27:38時点 Amazon調べ-詳細)
VBAが難しいと感じたら
ココナラにてVBAの作成依頼を受け付けています。
ご依頼・ご相談はこちらから

VBA

Posted by やろまい