Excel VBA | 「参照と値の違いを体験できる学習用Excelシート(ボタン付き)」を作る

Excel VBA VBA
スポンサーリンク

で「参照と値の違いを体験できる学習用Excelシート(ボタン付き)」を作りましょう。

この説明では、初心者でも手順通りに進めるだけで再現できるように
① シート構成 → ② ボタン配置 → ③ VBAコード → ④ 実行の流れ
の順に説明します。

① シート構成

新しいExcelファイルを作って、名前を「参照と値の違い_練習.xlsm」として保存してください。
マクロ有効ブック(.xlsm)であることがポイントです。

シート名:Sheet1

セル内容
A1🔷 値型(Value Type)テスト
A2a =
A3b =
A5🔷 参照型(Reference Type)テスト(Range)
B6← B列に結果を表示します
A7r1 =
A8r2 =

② ボタンを配置

  1. Excelのメニューから「開発タブ」→「挿入」→「フォームコントロールのボタン」を選択
  2. シート上にボタンを2つ配置
  3. それぞれ次のマクロを割り当てます👇
ボタンの名前割り当てるマクロ
🔘 値型をテストTestValueType
🔘 参照型をテストTestReferenceType

③ モジュールコード(コピーして貼るだけ)

  1. VBAエディタを開く(Alt + F11
  2. 「挿入 → 標準モジュール」
  3. 以下のコードをそのまま貼り付けてください👇
'---------------------------------------
' 📘 学習用:参照と値の違いデモ
'---------------------------------------

Option Explicit

'=== 値型(Value Type)のテスト ===
Sub TestValueType()
    Dim a As Long
    Dim b As Long

    ' 値の代入
    a = 10
    b = a  ' ← 値をコピー(独立)

    ' bを変更
    b = 20

    ' 結果をシートに表示
    With ThisWorkbook.Sheets("Sheet1")
        .Range("B2").Value = a
        .Range("B3").Value = b
    End With

    MsgBox "値型は“値そのもの”をコピーします。" & vbCrLf & _
           "bを変えてもaには影響しません。", vbInformation
End Sub


'=== 参照型(Reference Type)のテスト ===
Sub TestReferenceType()
    Dim r1 As Range
    Dim r2 As Range

    ' まずセルをクリア
    With ThisWorkbook.Sheets("Sheet1")
        .Range("B7:B8").ClearContents
    End With

    ' 参照を代入
    Set r1 = ThisWorkbook.Sheets("Sheet1").Range("B7")
    Set r2 = r1   ' ← 同じ場所を指す

    ' 値を設定
    r1.Value = "りんご"
    r2.Value = "バナナ"

    ' 結果を表示
    With ThisWorkbook.Sheets("Sheet1")
        .Range("B8").Value = "(r1とr2は同じセルを指している)"
    End With

    MsgBox "参照型は“同じ実体”を共有します。" & vbCrLf & _
           "r2を変更するとr1にも反映されます。", vbInformation
End Sub
VB

④ 実行の流れ(体験手順)

  1. [値型をテスト] ボタンをクリック
     → A2とA3の横(B列)に「a=10」「b=20」と表示
     → bを変えてもaには影響しないことが分かります。
  2. [参照型をテスト] ボタンをクリック
     → B7セルに「バナナ」と表示(最初はりんごだったのに上書き)
     → r1r2が同じセルを指していることがわかります。

⑤ 図解での理解補助(テキスト)

┌────────┐
│ 値型(コピー)│
└────────┘
a ─ [10]
b ─ [20]   ← 独立!

┌────────┐
│ 参照型(共有)│
└────────┘
r1 ─┐
    ├─→ B7セル(バナナ)
r2 ─┘

応用練習(理解チェック)

以下を自分で追記してみましょう。

1️⃣ Set r2 = r1 の行をコメントアウト(’で無効化)
2️⃣ 再実行すると…
r2がNothingなので、r2.Value = "バナナ"エラー91発生!
→ 「Setで参照を設定しないと使えない」ことを体験できます。


⑦ まとめ

ポイント内容
値型値そのものをコピー(独立)
参照型実体(オブジェクト)を共有(同じものを指す)
Set必須オブジェクト参照を代入するときは必ずSet
Nothingどのオブジェクトも指していない状態(エラー91の原因)

タイトルとURLをコピーしました