Excel VBA | 変数にオブジェクトを代入 (Set文)

Excel VBA VBA
スポンサーリンク

初心者でも理解しやすいように、基本例 → 応用例 → 実践パターンの順で整理して紹介します。

基本: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 の付け忘れでエラーになりやすい。

VBA
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました