Excel VBA | 学習支援モード付き「オブジェクト変数と Set 文」完全練習ファイルを作る

Excel VBA VBA
スポンサーリンク

学習支援モード付き「オブジェクト変数と Set 文」完全練習ファイル拡張版
を作成します。

このファイルでは、次の3つの学習機能がついています。

機能一覧(学習支援モード)

機能内容
✅ ボタン実行ボタンをクリックして各マクロを実行(結果を即確認)
💬 自動解説ポップアップボタンを押すとマクロの説明がメッセージで表示される
🧩 参照と値の違いを図で表示テキストベースの図解がポップアップで表示される
🌈 色で可視化処理対象のセルがハイライトされ、動きが見える
🧹 後片付け(Nothing化)も視覚化実行後にセル色が戻り、参照解除を実感できる

作成手順

  1. Excel を開く
  2. Alt + F11 → 「挿入」→「標準モジュール」
  3. 下記のコードをすべて貼り付け
  4. 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

使い方の流れ

  1. 各ボタンをクリックすると、
    → ポップアップで説明
    → 対応するセルが色付きで変化
    → Set / Nothing の動きが目でわかる!
  2. 「参照と値の違い」ボタンを押すと図解が出て理解を整理できます。

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