Excel VBA | 超初心者(Excel操作+マクロ体験):基本文法 – 代入

Excel VBA VBA
スポンサーリンク

「代入」は“箱の中身を決める”動作

変数は「値を入れておく箱」でしたよね。
代入は、その箱の中身を「これにする」と決める動作です。

VBAでは、
「左側=右側」
という形で書きます。

変数名 = 値や式
VB

この「=」は、数学の「左右が等しい」という意味ではなく、
「右側の結果を左側の箱に入れる」という“代入の記号”です。
ここをちゃんとイメージできるかどうかで、理解の深さが変わります。


代入の基本形と流れ

一番シンプルな代入

Sub SampleBasic()

    Dim count As Long
    count = 10

    MsgBox count

End Sub
VB

流れを言葉にすると、

  1. count という箱(Long型)を用意する
  2. count = 10 で、「count の中身を 10 にする」
  3. MsgBox で中身を表示する

というだけです。

ここで大事なのは、
「代入は“その瞬間の右側の値”を左側にコピーする」
という感覚です。

計算結果を代入する

右側には、単なる数値だけでなく「式」も書けます。

Sub SampleCalc()

    Dim a As Long
    Dim b As Long
    Dim c As Long

    a = 3
    b = 5
    c = a + b   ' ここで a + b の結果(8)が c に入る

    MsgBox c

End Sub
VB

c = a + b の瞬間に、
「今の a(3)と b(5)を足した結果(8)を、c に入れる」
という処理が行われます。

その後、a や b を変えても、c は自動では変わりません。
「代入した時点の結果がコピーされているだけ」だからです。


「=」は“比較”ではなく“代入”であることを意識する

数学の「=」との違い

数学では、
( a = b )
は「a と b は等しい」という意味です。

でも VBA では、

a = b
VB

は、「b の値を a に入れる」という意味です。
左側と右側の役割が全然違うことに注意してください。

もし「等しいかどうか」を調べたいときは、If 文の中で使います。

If a = b Then
    ' a と b が同じかどうかの判定
End If
VB

ここでは「=」は“比較”として使われています。
同じ記号でも、「文の位置と文脈」で意味が変わる、というのがポイントです。


文字列の代入と結合

文字列を代入する

Sub SampleString()

    Dim message As String
    message = "こんにちは"

    MsgBox message

End Sub
VB

数値と同じように、右側に文字列リテラル(”で囲んだ文字)を書けばOKです。

文字列同士をつないで代入する

文字列をつなぐときは「&」を使います。

Sub SampleStringConcat()

    Dim firstName As String
    Dim lastName As String
    Dim fullName As String

    firstName = "太郎"
    lastName = "山田"

    fullName = lastName & " " & firstName

    MsgBox fullName   ' 「山田 太郎」

End Sub
VB

ここでも、
「右側の式(lastName & ” ” & firstName)を評価した結果を、fullName に入れる」
という“代入の流れ”は同じです。


代入と「上書き」のイメージ

代入するたびに中身は“上書き”される

変数は「箱」なので、代入するたびに中身は上書きされます。

Sub SampleOverwrite()

    Dim x As Long

    x = 10
    x = 20

    MsgBox x   ' 20 が表示される

End Sub
VB

最初の x = 10 で中身は 10 になりますが、
次の x = 20 で、10 は消えて 20 に置き換わります。

「代入は“追加”ではなく“上書き”」
この感覚を持っておくと、値の変化を追いやすくなります。

自分自身を使った代入(カウンタの典型)

Sub SampleCounter()

    Dim i As Long

    i = 0
    i = i + 1   ' i は 1
    i = i + 1   ' i は 2
    i = i + 1   ' i は 3

    MsgBox i

End Sub
VB

i = i + 1 は、
「今の i に 1 を足した結果を、もう一度 i に入れ直す」
という意味です。

ループ処理などでよく出てくる書き方なので、
「左側と右側の i は“同じ箱”だけど、右側は“今の中身を使って計算している”」
というイメージを持っておくとスッと入ります。


オブジェクトへの代入は「Set」が必要

Range などのオブジェクト型への代入

数値や文字列とは違い、Range などの「オブジェクト」を代入するときは Set を使います。

Sub SampleObject()

    Dim rng As Range

    Set rng = Range("A1")

    rng.Value = "オブジェクト経由で代入"

End Sub
VB

ここでのポイントは2つです。

  1. Set rng = Range("A1")
    → rng という「参照の箱」に、“A1セルというオブジェクト”を指し示す情報を入れている
  2. rng.Value = "..."
    → rng が指しているセルの Value プロパティに、文字列を代入している

オブジェクト変数は「実体そのもの」ではなく「実体への参照」を持つ箱なので、
代入のときに Set が必要になります。

ここは少し難しいですが、
「値の代入」と「オブジェクト参照の代入」は別物
ということだけ、今は意識しておけば十分です。


代入でつまずきやすいポイント

型が合わない代入

Sub SampleTypeMismatch()

    Dim n As Long
    n = "ABC"   ' 型が合わない

End Sub
VB

このように、「Long に文字列を入れようとする」と、
実行時エラーや意図しない変換が起きます。

だからこそ、
「変数宣言で型を決める」
「その型に合った値だけを代入する」
という意識が大事になります。

右側の式が評価される“タイミング”

Sub SampleTiming()

    Dim a As Long
    Dim b As Long
    Dim c As Long

    a = 10
    b = 20
    c = a + b   ' ここで c は 30 になる

    a = 100     ' あとから a を変えても
    MsgBox c    ' c は 30 のまま

End Sub
VB

c = a + b の瞬間に「10 + 20」が計算されて c に入ります。
その後 a を 100 に変えても、c は自動では変わりません。

「代入は“その瞬間の結果をコピーするだけ”」
というのを、何度かコードを書きながら体で覚えていくと、
「なんでここで値が変わらないの?」という混乱が減ります。


超初心者向け「代入」の意識ポイントまとめ

代入は、VBAの中で一番シンプルで、一番たくさん出てくる動作です。
だからこそ、ここを“感覚レベル”で押さえておくと、他の文法も一気につながります。

意識してほしいのは、このあたりです。

左側は「箱の名前」、右側は「入れたい値や式」
「=」は“等しい”ではなく“右側を左側に入れる”
代入するたびに中身は上書きされる
i = i + 1 は「今の i を使って、新しい i を計算している」
オブジェクトへの代入は Set を使う

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