この記事で解決できる3つの疑問

「オブジェクト型って何?」っていつも混乱しちゃう…
「Set」つけなくても動くときがあるけど、いいの?
結論:Setは「オブジェクト型の変数」に値(参照)を代入するときに必須です!
初心者が最初に混乱しがちな「Set」は、オブジェクトと呼ばれる特殊な型を扱うときにだけ必要なキーワードです。
セルやワークブックなどの「何かの集合体」を扱うとき、Setがないと正しく動作しないことがあります。
目次
変数の代入に使う「=」は2種類ある
VBAでは「=」を使って変数に値を代入しますが、代入先によって処理が異なります。
- 値型:そのままの値を渡す
- オブジェクト型:「参照」を渡す(=どこにあるかを教える)
例:
Dim 点数 As Integer 点数 = 90 ' 値をそのまま代入 Dim rng As Range Set rng = Range("A1") ' セルの場所を参照として代入
「Set」が必要なオブジェクト型とは?
以下はすべてオブジェクト型の例です。これらを変数に代入するにはSetが必要です。
- Range(セル)
- Workbook(ブック)
- Worksheet(シート)
- Dictionary、Collectionなどのデータ構造
Setの使用例:RangeやWorkbookを扱うとき
Dim セル As Range Set セル = Sheets("売上").Range("B2") Dim ブック As Workbook Set ブック = Workbooks("データ.xlsx")
Setを使うことで、「B2セルの場所を指す変数」や「あるブックの情報を持つ変数」が正しく使えるようになります。
Setがないとどうなる?エラーになる例
Dim セル As Range セル = Range("A1") ' ← エラー!「Set」がないと代入できない
エラー内容:「オブジェクトが必要です」
これは、「オブジェクト型の変数にはSetを使ってください」という意味です。
値型(IntegerやString)との違いを整理しよう
型 | Setが必要? | 例 |
---|---|---|
Integer | 不要 | 点数 = 100 |
String | 不要 | 名前 = "佐藤" |
Range | 必要 | Set セル = Range("A1") |
Workbook | 必要 | Set wb = Workbooks(1) |
Setは「オブジェクト型=中身のある箱を指す変数」につけると覚えると良いでしょう。
まとめ:Setは「参照」を渡すおまじない!
初心者の混乱ポイントである「Set」は、中身が大きく複雑なオブジェクトを正しく扱うためのおまじないです。
- 値型 → 普通に
=
- オブジェクト型 →
Set
を使って参照を渡す
覚えてしまえば簡単です。RangeやWorkbookを扱う処理を書くときは、必ず Set
を意識してみてください。
コメント