解説パネル+コードパネル付きの全6例完全版を作ります。
これで「Set文の基本から応用まで」を一つの教材としてまとめて学習できます。
シート構成
| シート名 | 役割 |
|---|---|
操作パネル | ボタンで各例を実行 |
Sheet1 | 実行用セル |
Sheet2 | 応用用(複数シート確認) |
解説パネル | 各例の説明表示 |
コードパネル | 実行コード表示 |
手順
① シート準備
- Excelで以下の5枚を用意:
操作パネルSheet1Sheet2解説パネルコードパネル
解説パネルとコードパネルはA列にタイトルを入れる:
解説パネルA1:学習解説
コードパネルA1:実行コード
Module1:全6例コード
'====================================================
' Excel VBA 学習用:Set文(オブジェクト変数)
' 解説パネル+コード表示パネル 全6例版
'====================================================
'-----------------------------------------
' 解説パネルに説明を表示
'-----------------------------------------
Sub ShowExplanation(title As String, desc As String)
Dim wsExp As Worksheet
Set wsExp = Worksheets("解説パネル")
wsExp.Cells.Clear
wsExp.Range("A1").Value = "🧠 学習解説"
wsExp.Range("A3").Value = title
wsExp.Range("A5").Value = desc
wsExp.Columns("A").ColumnWidth = 60
wsExp.Rows("5:30").RowHeight = 20
wsExp.Range("A5").WrapText = True
End Sub
'-----------------------------------------
' コードパネルに表示
'-----------------------------------------
Sub ShowCode(codeText As String)
Dim wsCode As Worksheet
Set wsCode = Worksheets("コードパネル")
wsCode.Cells.Clear
wsCode.Range("A1").Value = "📘 実行コード"
wsCode.Range("A3").Value = codeText
wsCode.Columns("A").ColumnWidth = 80
wsCode.Rows("3:40").RowHeight = 18
wsCode.Range("A3").WrapText = True
End Sub
'-----------------------------------------
' 例1:Rangeオブジェクト
'-----------------------------------------
Sub Sample_SetRange_CodePanel()
Dim r As Range
Set r = Worksheets("Sheet1").Range("B2")
r.Value = "こんにちは"
r.Interior.Color = RGB(200, 255, 200)
Call ShowExplanation("例1:Rangeオブジェクトを変数に代入", _
"Set r = Range(""B2"") でセルB2を変数rに代入。" & vbCrLf & _
"r.Value で値を設定し、緑色にハイライトしました。")
Call ShowCode("Dim r As Range" & vbCrLf & _
"Set r = Worksheets(""Sheet1"").Range(""B2"")" & vbCrLf & _
"r.Value = ""こんにちは""" & vbCrLf & _
"r.Interior.Color = RGB(200,255,200)")
End Sub
'-----------------------------------------
' 例2:Worksheetオブジェクト
'-----------------------------------------
Sub Sample_SetWorksheet_CodePanel()
Dim ws As Worksheet
Set ws = Worksheets("Sheet2")
ws.Range("A1").Value = "Sheet2に書き込みました"
ws.Range("A1").Interior.Color = RGB(255, 255, 180)
Call ShowExplanation("例2:Worksheetオブジェクトを変数に代入", _
"Set ws = Worksheets(""Sheet2"") でシートを変数に代入。" & vbCrLf & _
"ws.Range(""A1"") に値を設定し、黄色でハイライトしました。")
Call ShowCode("Dim ws As Worksheet" & vbCrLf & _
"Set ws = Worksheets(""Sheet2"")" & vbCrLf & _
"ws.Range(""A1"").Value = ""Sheet2に書き込みました""" & vbCrLf & _
"ws.Range(""A1"").Interior.Color = RGB(255,255,180)")
End Sub
'-----------------------------------------
' 例3:複数シートを扱う
'-----------------------------------------
Sub Sample_MultiSheets_CodePanel()
Dim ws1 As Worksheet, ws2 As Worksheet
Set ws1 = Worksheets("Sheet1")
Set ws2 = Worksheets("Sheet2")
ws1.Range("A3").Value = "同じ内容を2枚に"
ws2.Range("A3").Value = "同じ内容を2枚に"
ws1.Range("A3").Interior.Color = RGB(200, 230, 255)
ws2.Range("A3").Interior.Color = RGB(200, 230, 255)
Call ShowExplanation("例3:複数シートを同時に扱う", _
"ws1とws2にSetして、それぞれ同じ処理を適用。" & vbCrLf & _
"A3セルを水色でハイライトしています。")
Call ShowCode("Dim ws1 As Worksheet, ws2 As Worksheet" & vbCrLf & _
"Set ws1 = Worksheets(""Sheet1"")" & vbCrLf & _
"Set ws2 = Worksheets(""Sheet2"")" & vbCrLf & _
"ws1.Range(""A3"").Value = ""同じ内容を2枚に""" & vbCrLf & _
"ws2.Range(""A3"").Value = ""同じ内容を2枚に""" & vbCrLf & _
"ws1.Range(""A3"").Interior.Color = RGB(200,230,255)" & vbCrLf & _
"ws2.Range(""A3"").Interior.Color = RGB(200,230,255)")
End Sub
'-----------------------------------------
' 例4:全シートループ
'-----------------------------------------
Sub Sample_LoopSheets_CodePanel()
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
ws.Range("A5").Value = "これは " & ws.Name & " シートです"
ws.Range("A5").Interior.Color = RGB(255, 220, 250)
Next ws
Call ShowExplanation("例4:全シートをループ処理", _
"For Each構文では、wsに自動的にシートが代入されます。" & vbCrLf & _
"全シートのA5セルをピンクでハイライトしました。")
Call ShowCode("Dim ws As Worksheet" & vbCrLf & _
"For Each ws In ThisWorkbook.Worksheets" & vbCrLf & _
" ws.Range(""A5"").Value = ""これは "" & ws.Name & "" シートです""" & vbCrLf & _
" ws.Range(""A5"").Interior.Color = RGB(255,220,250)" & vbCrLf & _
"Next ws")
End Sub
'-----------------------------------------
' 例5:Rangeオブジェクトで書式変更
'-----------------------------------------
Sub Sample_RangeObject_CodePanel()
Dim r As Range
Set r = Worksheets("Sheet1").Range("B6")
With r
.Value = "書式設定の例"
.Font.Bold = True
.Font.Color = vbBlue
.Interior.Color = RGB(255, 255, 200)
.Borders.LineStyle = xlContinuous
End With
Call ShowExplanation("例5:Rangeオブジェクトを活用", _
"RangeをSetしておくと、同じセルを何度も操作可能。" & vbCrLf & _
"太字・罫線・背景色などをまとめて設定しました。")
Call ShowCode("Dim r As Range" & vbCrLf & _
"Set r = Worksheets(""Sheet1"").Range(""B6"")" & vbCrLf & _
"With r" & vbCrLf & _
" .Value = ""書式設定の例""" & vbCrLf & _
" .Font.Bold = True" & vbCrLf & _
" .Font.Color = vbBlue" & vbCrLf & _
" .Interior.Color = RGB(255,255,200)" & vbCrLf & _
" .Borders.LineStyle = xlContinuous" & vbCrLf & _
"End With")
End Sub
'-----------------------------------------
' 例6:動的セル決定
'-----------------------------------------
Sub Sample_DynamicSet_CodePanel()
Dim targetRow As Long
Dim r As Range
With Worksheets("Sheet1")
targetRow = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
Set r = .Range("A" & targetRow)
r.Value = "次のデータ"
r.Offset(0, 1).Value = Now()
r.Interior.Color = RGB(180, 255, 180)
End With
Call ShowExplanation("例6:動的にセルを決定して書き込み", _
"最終行を取得して下の行にSet。" & vbCrLf & _
"Offsetで右隣に日付を追加し、背景を緑でハイライト。")
Call ShowCode("Dim targetRow As Long, r As Range" & vbCrLf & _
"With Worksheets(""Sheet1"")" & vbCrLf & _
" targetRow = .Cells(.Rows.Count,1).End(xlUp).Row + 1" & vbCrLf
VB③ 操作パネルにボタンを配置
| ボタン名 | マクロ |
|---|---|
| 例1:セルに値を代入 | Sample_SetRange_CodePanel |
| 例2:シートを変数に代入 | Sample_SetWorksheet_CodePanel |
| 例3:複数シート操作 | Sample_MultiSheets_CodePanel |
※ 例4~6も同様に 解説パネル+コードパネル 用に追加できます。
④ 使い方
- ファイル名:Set文_解説+コードパネル版.xlsm
- 保存形式:マクロ有効ブック (.xlsm)
- 「操作パネル」シートのボタンを押すと:
- セルに書き込み(色付き)
- 解説パネルに説明表示
- コードパネルに実行コード表示
💡 メリット
- 実行内容と対応コードを同時に確認できる
- 反復練習で「Set文の理解」「オブジェクト操作」の定着が早い
- 教材としてそのまま授業や自習に使える

