「代入」は“箱の中身を決める”動作
変数は「値を入れておく箱」でしたよね。
代入は、その箱の中身を「これにする」と決める動作です。
VBAでは、
「左側=右側」
という形で書きます。
変数名 = 値や式
VBこの「=」は、数学の「左右が等しい」という意味ではなく、
「右側の結果を左側の箱に入れる」という“代入の記号”です。
ここをちゃんとイメージできるかどうかで、理解の深さが変わります。
代入の基本形と流れ
一番シンプルな代入
Sub SampleBasic()
Dim count As Long
count = 10
MsgBox count
End Sub
VB流れを言葉にすると、
- count という箱(Long型)を用意する
count = 10で、「count の中身を 10 にする」- 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
VBc = 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
VBi = 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つです。
Set rng = Range("A1")
→ rng という「参照の箱」に、“A1セルというオブジェクト”を指し示す情報を入れている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
VBc = a + b の瞬間に「10 + 20」が計算されて c に入ります。
その後 a を 100 に変えても、c は自動では変わりません。
「代入は“その瞬間の結果をコピーするだけ”」
というのを、何度かコードを書きながら体で覚えていくと、
「なんでここで値が変わらないの?」という混乱が減ります。
超初心者向け「代入」の意識ポイントまとめ
代入は、VBAの中で一番シンプルで、一番たくさん出てくる動作です。
だからこそ、ここを“感覚レベル”で押さえておくと、他の文法も一気につながります。
意識してほしいのは、このあたりです。
左側は「箱の名前」、右側は「入れたい値や式」
「=」は“等しい”ではなく“右側を左側に入れる”
代入するたびに中身は上書きされるi = i + 1 は「今の i を使って、新しい i を計算している」
オブジェクトへの代入は Set を使う
