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

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

変数に代入をするとき、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中級者向けの本》
VBA上級者を目指したい人にはパーフェクトExcel VBA一択です。

created by Rinker
技術評論社
¥3,608 (2024/02/29 15:48:28時点 Amazon調べ-詳細)

VBA

Posted by やろまい