初心者でも理解しやすいように、基本例 → 応用例 → 実践パターンの順で整理して紹介します。
基本:Set 文の使い方
例1:セルを指す Range オブジェクトを変数に代入
Sub Sample_SetRange()
Dim r As Range
Set r = Range("B2") ' セルB2をr変数にセット
r.Value = "こんにちは"
End Sub
VB🟢 ポイント
Setを付けるのは「オブジェクトを代入する」ときだけ。Range("B2")はオブジェクト(Range型)なのでSetが必要。
例2:ワークシートを変数に代入
Sub Sample_SetWorksheet()
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Sheet2")
ws.Range("A1").Value = "Sheet2に書き込みました"
End Sub
VB🟢 ポイント
Worksheets("名前")もオブジェクト(Worksheet型)。Set ws = ...で代入すれば、以降はws.Range("A1")のように短く書ける。
応用:複数オブジェクトを扱う
例3:複数シートに同じ値を書き込む
Sub Sample_MultiSheets()
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Set ws1 = Worksheets("Sheet1")
Set ws2 = Worksheets("Sheet2")
ws1.Range("A1").Value = "同じ内容を2枚に"
ws2.Range("A1").Value = "同じ内容を2枚に"
End Sub
VB🟢 応用のヒント
- 複数のオブジェクト変数を使うと、繰り返し処理や管理がしやすくなる。
- 同じ型のオブジェクトは
For Each構文でも扱える(下で例示)。
例4:For Eachで全シートを処理
Sub Sample_LoopSheets()
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
ws.Range("A1").Value = "これは " & ws.Name & " シートです"
Next ws
End Sub
VB🟢 ポイント
wsは1つずつ順番に各シートを指す。Setは不要(For Eachの中で自動的に代入される)。
実践パターン:セル操作をまとめて扱う
例5:セルを変数にして見た目も変える
Sub Sample_RangeObject()
Dim r As Range
Set r = Worksheets("Sheet1").Range("B2")
r.Value = "オブジェクト変数の例"
r.Font.Bold = True
r.Interior.Color = RGB(255, 255, 200)
End Sub
VB🟢 実践メモ
- 同じセルを何度も操作する場合、変数にしておくと効率的。
Setで保持した Range オブジェクトは、書式設定や値変更をまとめて行える。
例6:動的にセル範囲をセット
Sub Sample_DynamicSet()
Dim targetRow As Long
Dim r As Range
targetRow = Cells(Rows.Count, 1).End(xlUp).Row + 1 ' A列の最終行+1
Set r = Range("A" & targetRow)
r.Value = "次のデータ"
r.Offset(0, 1).Value = Now()
End Sub
VB🟢 ポイント
Setで代入する対象を動的に作れる(文字列結合など)。Offsetで相対的な位置にアクセス可能。
よくあるエラーと対策
| 状況 | 原因 | 対応方法 |
|---|---|---|
| 「オブジェクト変数または With ブロック変数が設定されていません」 | Set を付け忘れた | Set ws = Worksheets("Sheet1") のように修正 |
| 「変数がオブジェクトでない」 | 宣言が As Range などになっていない | 型宣言を正しく行う |
| 代入元のオブジェクトが存在しない | シート名・セル参照のミス | Debug.Print やブレークポイントで確認 |
まとめ
| 概念 | 説明 |
|---|---|
Set 文 | オブジェクトを変数に代入するための文。必須。 |
Let 文 | 数値や文字列の代入に使う(通常は省略される)。 |
| 利点 | コードの再利用性・可読性が上がる。 |
| 注意点 | Set の付け忘れでエラーになりやすい。 |
