学習支援モード付き「オブジェクト変数と Set 文」完全練習ファイル拡張版
を作成します。
このファイルでは、次の3つの学習機能がついています。
機能一覧(学習支援モード)
| 機能 | 内容 |
|---|---|
| ✅ ボタン実行 | ボタンをクリックして各マクロを実行(結果を即確認) |
| 💬 自動解説ポップアップ | ボタンを押すとマクロの説明がメッセージで表示される |
| 🧩 参照と値の違いを図で表示 | テキストベースの図解がポップアップで表示される |
| 🌈 色で可視化 | 処理対象のセルがハイライトされ、動きが見える |
| 🧹 後片付け(Nothing化)も視覚化 | 実行後にセル色が戻り、参照解除を実感できる |
作成手順
- Excel を開く
Alt + F11→ 「挿入」→「標準モジュール」- 下記のコードをすべて貼り付け
- Excelに戻り、「開発」タブ →「挿入」→「ボタン」を追加
各ボタンに対応するマクロを割り当てます(例:「Example_Range_Explain」など)
モジュール名例:Module_Set_Training_Pro
Option Explicit
'====================================================
' Excel VBA 学習支援モード付き:Set文・オブジェクト変数 練習ファイル
'====================================================
'------------------------------------------
' 🔹 共通メッセージ(学習用)
'------------------------------------------
Sub ShowDiagram()
Dim msg As String
msg = ""
msg = msg & "【参照と値の違い(イメージ図)】" & vbCrLf & vbCrLf
msg = msg & "値型(数値や文字列):" & vbCrLf
msg = msg & " [num] → 10" & vbCrLf
msg = msg & " 値そのものを持つ" & vbCrLf & vbCrLf
msg = msg & "参照型(オブジェクト):" & vbCrLf
msg = msg & " [r] → (Sheet1のB2セルを指す矢印)" & vbCrLf
msg = msg & " 実体を指し示す“リンク”を持つ" & vbCrLf & vbCrLf
msg = msg & "Set文:リンクをつなぐ" & vbCrLf
msg = msg & "Nothing:リンクを切る(参照解除)" & vbCrLf
MsgBox msg, vbInformation, "参照と値の違い(図解)"
End Sub
'------------------------------------------
' 🧩 Example 1: Range 変数+説明モード
'------------------------------------------
Sub Example_Range_Explain()
Dim r As Range
MsgBox "【Example_Range】" & vbCrLf & _
"セルB2をRangeオブジェクトとして代入し、値と書式を変更します。" & vbCrLf & _
"この後 Set文の動作を観察してみましょう。", vbInformation
Set r = ThisWorkbook.Worksheets("Sheet1").Range("B2")
r.Select
r.Value = "こんにちは"
r.Font.Bold = True
r.Interior.Color = RGB(255, 255, 200)
MsgBox "今、変数 r は「B2 セル」を参照しています。" & vbCrLf & _
"このあと Set r = Nothing でリンクを解除します。", vbInformation
Set r = Nothing
ThisWorkbook.Worksheets("Sheet1").Range("B2").Interior.ColorIndex = xlNone
End Sub
'------------------------------------------
' 🧩 Example 2: Worksheet 変数+説明モード
'------------------------------------------
Sub Example_Worksheet_Explain()
Dim ws As Worksheet
MsgBox "【Example_Worksheet】" & vbCrLf & _
"Sheet1 オブジェクトを変数 ws に代入して、" & vbCrLf & _
"セルA1・A2を操作します。", vbInformation
Set ws = ThisWorkbook.Worksheets("Sheet1")
ws.Range("A1").Value = "日付"
ws.Range("A2").Value = Date
ws.Range("A1:A2").Interior.Color = RGB(200, 230, 255)
MsgBox "ws は今、Sheet1を指しています。" & vbCrLf & _
"Set ws = Nothing で参照を切ります。", vbInformation
Set ws = Nothing
ThisWorkbook.Worksheets("Sheet1").Range("A1:A2").Interior.ColorIndex = xlNone
End Sub
'------------------------------------------
' 🧩 Example 3: With文+説明モード
'------------------------------------------
Sub Example_With_Explain()
Dim r As Range
MsgBox "【Example_With】" & vbCrLf & _
"Withを使うと、同じオブジェクトへの操作をまとめて書けます。", vbInformation
Set r = ThisWorkbook.Worksheets("Sheet1").Range("C3")
With r
.Value = "合計"
.Offset(0, 1).Value = 100
.Font.Italic = True
.Interior.Color = RGB(220, 255, 220)
End With
MsgBox "With~End With の中では、変数名を繰り返さずに済みます。", vbInformation
Set r = Nothing
ThisWorkbook.Worksheets("Sheet1").Range("C3:D3").Interior.ColorIndex = xlNone
End Sub
'------------------------------------------
' 🧩 練習問題1: A1+A2→A3(解説付き)
'------------------------------------------
Sub Task1_AddCells_Explain()
Dim ws As Worksheet
Dim r1 As Range, r2 As Range, rOut As Range
MsgBox "【Task1】A1 と A2 の数値を足して A3 に書きます。" & vbCrLf & _
"各セルを Range オブジェクトとして変数に代入します。", vbInformation
Set ws = ThisWorkbook.Worksheets("Sheet1")
Set r1 = ws.Range("A1")
Set r2 = ws.Range("A2")
Set rOut = ws.Range("A3")
ws.Range("A1:A3").Interior.Color = RGB(255, 255, 200)
rOut.Value = Val(r1.Value) + Val(r2.Value)
MsgBox "完了!" & vbCrLf & "Set文で3つのRangeをリンクしました。" & vbCrLf & _
"Nothingで解除します。", vbInformation
Set r1 = Nothing
Set r2 = Nothing
Set rOut = Nothing
Set ws = Nothing
ThisWorkbook.Worksheets("Sheet1").Range("A1:A3").Interior.ColorIndex = xlNone
End Sub
'------------------------------------------
' 🧩 練習問題2: 空セルを赤く塗る(解説付き)
'------------------------------------------
Sub Task2_HighlightEmpty_Explain()
Dim ws As Worksheet
Dim r As Range
Dim i As Long
MsgBox "【Task2】列Bの1~10行を調べて、空セルを赤で塗ります。", vbInformation
Set ws = ThisWorkbook.Worksheets("Sheet1")
For i = 1 To 10
Set r = ws.Cells(i, "B")
If Trim(r.Value & "") = "" Then
r.Interior.ColorIndex = 3
Else
r.Interior.ColorIndex = xlNone
End If
Next i
MsgBox "空セル検出完了。Setでセルを1つずつ参照しました。", vbInformation
Set r = Nothing
Set ws = Nothing
End Sub
'------------------------------------------
' 🧩 参照と値の違いを再表示(図解ボタン用)
'------------------------------------------
Sub Diagram_Button()
Call ShowDiagram
End Sub
VBシート構成の推奨例
| シート | 内容 |
|---|---|
| Sheet1 | 練習用メインシート。A列〜C列を使って動作確認。 |
| ボタン配置例 | B2セル付近:「Range操作」ボタン → Example_Range_ExplainA1付近:「Worksheet操作」ボタン → Example_Worksheet_ExplainC3付近:「With文」ボタン → Example_With_ExplainA10付近:「参照と値の違い」ボタン → Diagram_ButtonA12付近:「練習1」ボタン → Task1_AddCells_ExplainA13付近:「練習2」ボタン → Task2_HighlightEmpty_Explain |
使い方の流れ
- 各ボタンをクリックすると、
→ ポップアップで説明
→ 対応するセルが色付きで変化
→ Set / Nothing の動きが目でわかる! - 「参照と値の違い」ボタンを押すと図解が出て理解を整理できます。
