Excel VBA | 「参照と値の違い」を図で理解

Excel VBA VBA
スポンサーリンク

「エラー ’91’」を理解するには、この「参照と値の違い」をしっかりイメージできることがカギです。
ここでは 図解(テキストベース)+例題+比喩 でやさしく説明します。

1. まずは「値型」と「参照型」

VBAの変数には大きく2種類あります。

種類代表的な型代入されるもの
値型(Value Type)Integer, Long, Double, String, Boolean値そのものx = 10 / msg = "Hello"
参照型(Reference Type)Object, Range, Worksheet, Workbook“もの”への参照(ポインタ)Set r = Range("A1")

2. 図でイメージしてみよう(テキスト図解)

🧮 値型(たとえば数値)

変数 x
 ├── [10]

👉 「x は 10 という値を直接持っている」

参照型(たとえば Range)

変数 r
 ├── [→ A1セルへの矢印(参照)]
A1セル
 ├── [値: "こんにちは"]

👉 「r は A1 というセルを指している」
👉 実際の値 (“こんにちは”) はセルの中にあり、r はその場所を覚えているだけ。


3. Setを忘れるとどうなる?

Dim r As Range
r.Value = "Hello"
VB

図で表すと…

変数 r
 ├── [?]  どこも指していない(Nothing)

👉 VBAは「どのセル?」と聞いてもわからないため、
「オブジェクト変数が設定されていません(エラー91)」が出ます。


4. Set を使うと参照が設定される

Dim r As Range
Set r = Range("A1")
r.Value = "Hello"
VB

図:

変数 r
 ├── [→ A1セル]
A1セル
 ├── [値: "Hello"]

👉 これで「r は A1 を指している」ので安全に操作できます。


5. 参照をコピーするとどうなる?

例:

Dim r1 As Range
Dim r2 As Range

Set r1 = Range("A1")
Set r2 = r1
r2.Value = "OK"
VB

図で表すと:

r1 ─┐
    ├──→ A1セル
r2 ─┘

👉 r1もr2も同じセル(A1)を指している!
だから r2.Value = "OK" と書いても、r1経由で見ても同じ内容が見える。

結果:

A1セルが "OK" になる。


6. もし「値型」ならどうなる?

Dim a As Long
Dim b As Long

a = 10
b = a
b = 20
VB

図:

a ─ [10]
b ─ [20]   (aとは別の箱)

👉 値型は「中身をコピー」するだけなので、aとbは独立しています。
bを変えてもaには影響しません。


7. RangeをNothingにすると?

Set r = Nothing
VB

図:

r ├── [× 矢印消失]

👉 「r はもうどのセルも指していない状態」に戻ります。
もしその後 r.Value = 1 とすると、またエラー91になります。


8. 練習:参照の違いを体験しよう

このマクロをそのまま貼って実行してみてください。

Sub ReferenceVsValue_Demo()
    Dim r1 As Range
    Dim r2 As Range
    Dim a As Long
    Dim b As Long

    ' 参照型の例
    Set r1 = Range("B2")
    Set r2 = r1
    r1.Value = "りんご"
    r2.Value = "バナナ"

    ' 値型の例
    a = 10
    b = a
    b = 20

    MsgBox "セルB2には → " & r1.Value & vbCrLf & _
           "aの値は → " & a & vbCrLf & _
           "bの値は → " & b
End Sub
VB

結果:

  • セルB2 → 「バナナ」
  • a → 10
  • b → 20

🧩 解釈:

  • Range(参照型)は同じものを指しているので、どちらで変えても影響あり。
  • Long(値型)は別々の値を持っているので、独立している。

9. まとめ表

区分代表例代入時の動作Setが必要?影響範囲
値型Long, Double, String, Boolean値そのものをコピー❌不要独立
参照型Range, Worksheet, Objectオブジェクトの“場所”を共有✅必要同じ実体を共有

10. まとめのことば

🔸 Set は「どの“実体”を指すか」を教える合図。
🔸 エラー91 は「どこも指していない(Nothing)」ときに出る。
🔸 参照型を理解すれば、オブジェクトの扱いがグッと楽になる。

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