VBAテクニック集 VBA一覧 オブジェクト変数 文法・構文

【VBA】SetとDimの違いを使い方と一緒にわかりやすく比較

Excel VBAを学び始めると、必ず出てくるのが「Dim」と「Set」というキーワードです。
コード例を見ると両方が登場することが多く、「どちらも変数を宣言するものなのでは?」と感じる方も多いのではないでしょうか。

例えば次のようなコードです。

Dim ws As Worksheet
Set ws = Worksheets("Sheet1")

この2つの命令はセットで登場することが多いため、違いを意識せずに使ってしまうケースも少なくありません。
しかし実務では、DimとSetの意味を理解していないとエラーやバグの原因になることがあります。

特にオブジェクト変数を扱う場合は、DimとSetの役割を理解しておくことが重要です。
この記事では、VBAのDimとSetの違いを整理しながら、実務でどのように使い分けるべきかを分かりやすく解説します。

✅ VBAのDimとは?変数を宣言する基本構文

VBAでコードを書く際、最初に登場するのが「Dim」です。
VBAを学び始めたばかりの方は、「Dimを使えば変数を作れる」という理解で止まっていることが多いですが、実際にはもう少し重要な役割があります。

Dimは単に変数を作るだけでなく、変数の型を明確にして処理の安全性を高めるための構文です。
この理解がないと、意図しないデータ型の変換が発生したり、デバッグが難しいコードになってしまうことがあります。

また、VBAではOption Explicitを使用することで、Dimで宣言していない変数の使用を防ぐことができます。
実務ではこの設定を前提にコードを書くことが多いため、Dimの役割を正しく理解しておくことが重要です。

・Dimの役割:変数を宣言する

Dimは、変数を宣言するための構文です。

Dim number As Integer
Dim total As Double
Dim name As String

このコードでは

・number → 整数型
・total → 小数型
・name → 文字列型

として変数を宣言しています。

つまりDimは

「この名前の変数を使います」とVBAに伝える命令

です。

・Dimはオブジェクトにも使う

Dimは数値や文字列だけでなく、オブジェクトにも使用します。

Dim ws As Worksheet
Dim wb As Workbook
Dim rng As Range

この場合は

・Worksheet
・Workbook
・Range

といったオブジェクト型の変数を宣言しています。

ただし、この状態ではまだオブジェクトは代入されていません。

DimはVBAで変数を宣言する基本構文ですが、
実務では DimだけでなくPrivateやPublicとの違いも理解しておくことが重要です。

変数のスコープ(どこから参照できるか)を正しく理解していないと、
意図しない動作やバグの原因になることがあります。

▶ 変数のスコープと宣言方法の違いについては
【VBA】Dim・Private・Publicの使用方法|変数・プロシージャのスコープを理解
で詳しく解説しています。


✅ VBAのSetとは?オブジェクトを変数に代入する命令

Dimだけでは、オブジェクト変数は使える状態になりません。
オブジェクト変数を実際に使用するためには、Setを使ってオブジェクトを代入する必要があります。

この点を理解していないと、次のようなエラーに遭遇します。

「オブジェクト変数またはWithブロック変数が設定されていません」

これは、Setによる代入が行われていない場合に発生する典型的なエラーです。

つまりSetは、オブジェクト変数を使うための重要なステップになります。

・Setの基本構文

Setは次のように使います。

Set 変数 = オブジェクト

Dim ws As Worksheet
Set ws = Worksheets("Sheet1")

このコードでは

・wsという変数を宣言
・Sheet1を代入

しています。

これにより、wsを通してSheet1を操作できるようになります。

・Setを使うオブジェクトの例

Setが使われる代表的なオブジェクトは次の通りです。

・Worksheet
・Workbook
・Range
・Chart

Dim rng As Range
Set rng = Range("A1")

このコードでは、A1セルをrngに代入しています。

SetはVBAでオブジェクトを扱う際に欠かせない構文ですが、
「なぜSetが必要なのか」「オブジェクト変数とは何なのか」といった仕組みまで理解しておくと、コードの理解度が大きく変わります。

▶ VBAのオブジェクト変数の基本と参照の仕組みについては
【VBA】Setとは?オブジェクト変数の基本と参照の仕組み|初心者が必ず押さえるべき基礎文法
で詳しく解説しています。


✅ VBAのDimとSetの違いを理解する

DimとSetはよく一緒に登場しますが、役割はまったく異なります。

Dimは

変数を宣言する

Setは

オブジェクトを代入する

という違いがあります。

・DimとSetの違いまとめ

構文役割
Dim変数を宣言する
Setオブジェクトを代入する

この2つを組み合わせて使用することで、オブジェクトを安全に扱うことができます。

・Dimだけではオブジェクトは使えない

次のコードはエラーになります。

Dim ws As Worksheet
ws.Name

これはSetがないためです。

正しいコード

Dim ws As Worksheet
Set ws = Worksheets("Sheet1")

ws.Name

このようにSetを使うことで、オブジェクト変数が有効になります。


✅ VBAでDimとSetを使う実務例

実務では、オブジェクト変数を使うことでコードの可読性が大きく向上します。
特にWorksheetやRangeを何度も参照する場合、毎回フルパスで書くよりも変数に代入した方がコードが分かりやすくなります。

ここでは、実務でよく使われるパターンを紹介します。

・例:シートを変数に格納する

Sub Sample()

Dim targetSheet As Worksheet
Set targetSheet = Worksheets("売上データ")

targetSheet.Range("A1").Value = "売上"

End Sub

このように変数を使うことで

Worksheets("売上データ")

を何度も書く必要がなくなります。


✅ VBAでDimとSetを使うときの注意点

DimとSetはシンプルな構文ですが、実務ではいくつか注意点があります。
特にオブジェクト変数の扱い方を理解していないと、コードのトラブルにつながることがあります。

・Setを忘れるエラー

最も多いミスがSetの書き忘れです。

Dim ws As Worksheet
ws = Worksheets("Sheet1")

これはエラーになります。

正しくは

Set ws = Worksheets("Sheet1")

です。

・Nothingでオブジェクトを解放する

オブジェクトを解放する場合はNothingを使います。

Set ws = Nothing

これはメモリ管理のために使われることがあります。

DimとSetを使う際には、
変数をどこで宣言するか(スコープ)も重要なポイントになります。

変数の宣言方法には

・Dim
・Private
・Public

といった種類があり、使用する場所によって
変数が参照できる範囲が変わります。

▶ VBAの変数スコープについて詳しく知りたい方は
【VBA】Dim・Private・Publicの使用方法|変数・プロシージャのスコープを理解
もあわせて確認してみてください。


✅ VBAのコードを読みやすくする設計ポイント

VBAでは、コードが長くなるほど可読性が重要になります。
オブジェクト変数を適切に使うことで、コードの読みやすさを大きく改善できます。

例えば次のコードを見てみましょう。

Worksheets("Sheet1").Range("A1").Value = 100
Worksheets("Sheet1").Range("A2").Value = 200
Worksheets("Sheet1").Range("A3").Value = 300

これを変数で書き直すと

Dim ws As Worksheet
Set ws = Worksheets("Sheet1")

ws.Range("A1").Value = 100
ws.Range("A2").Value = 200
ws.Range("A3").Value = 300

この方が

・コードが読みやすい
・修正が簡単
・エラーが起きにくい

というメリットがあります。


✅ VBAで表示や書式設定を自動化する場面でも重要

DimとSetの理解は、単なる文法の問題ではありません。
実務では、Excelの操作を自動化する際にオブジェクト変数を多く使用します。

例えば

・複数シートの処理
・データ集計
・書式設定の自動化

といった処理では、WorksheetやRangeの変数が頻繁に登場します。

このようなコードを書く際、DimとSetの役割を理解しておくことで、
読みやすく保守しやすいVBAコードを書くことができます。


 

✅ まとめ:VBAのDimとSetの違いを理解してコードを読みやすくしよう

VBAでオブジェクトを扱う際は、DimとSetの役割を理解しておくことが重要です。
この2つの違いを理解することで、エラーを防ぎ、読みやすいコードを書くことができます。

今回のポイントを整理します。

・Dimは変数を宣言するための構文
・Setはオブジェクトを代入するための構文
・オブジェクト変数はDimとSetを組み合わせて使用する
・Setを忘れるとエラーが発生する
・オブジェクト変数を使うとコードが読みやすくなる

VBAのコードは、単に動けばよいというものではありません。
保守性・可読性を意識した設計が、実務で長く使えるマクロを作るポイントになります。

ぜひDimとSetの違いを理解して、
読みやすく実務で使いやすいVBAコードを書けるようにしていきましょう。

    -VBAテクニック集, VBA一覧, オブジェクト変数, 文法・構文