初心者向けにやさしく、例題付きで詳しく説明します。読みやすくするために「概念 → 使い方 → 実例 → 練習問題(解答付き)」の流れでまとめます。コードはそのままVBAエディタに貼って試せます。
変数って何?
変数は「データを一時的に入れておく箱」です。箱に名前をつけて(変数名)、数値や文字列、日付などを入れたり取り出したりします。プログラム内で値を覚えておくのに使います。
まずは準備:VBAを開く/マクロを実行する方法(超短縮)
- Excel を開く →
Alt + F11で VBA エディタを開く。 - 左側のプロジェクト →
ThisWorkbookやModuleを右クリックして「挿入」→「標準モジュール」。 - エディタにコードを貼って、
F5(またはツールバーの実行)でSubを実行。
(マクロ有効ブック保存は.xlsmで)
宣言(Dim)と代入(=)の基本
- 変数の宣言:
Dim 変数名
例:Dim x - 値の代入:
変数名 = 値
例:x = 10
注意:VBAでは型を指定しなければ Variant 型になります。書き方は:
Dim x As Integer ' 整数
Dim s As String ' 文字列
Dim d As Double ' 小数(倍精度)
Dim b As Boolean ' 真偽値(True/False)
VBVBAでは宣言と代入は別行にする必要があります(Dim x = 10 はNG)。
変数名のルール(簡単)
- 先頭は英字(日本語も可だが避けるのが無難)
- 空白は使えない(
my nameはNG)。代わりにmyNameやmy_name。 - 特殊文字(
!@#など)は不可。 - 意味がわかる名前をつける(例:
totalPrice,userName)。
Option Explicit を使おう(強く推奨)
モジュールの先頭に:
Option Explicit
VBと書くと、すべての変数をDimで宣言しないとエラーになります。タイプミスでバグを作らないための基本です。必ず使いましょう。
オブジェクトと Set(Range や Worksheet の扱い)
セルやシートのオブジェクトを変数に格納する場合は Set を使います:
Dim r As Range
Set r = ThisWorkbook.Sheets("Sheet1").Range("A1")
r.Value = "こんにちは"
VBSetを使わないと「型が一致しません」などのエラーになります(オブジェクト型は Set が必須)。
変数のスコープ(使える範囲)
Dim(プロシージャ内) → そのSub/Function内だけ有効(ローカル変数)Dim(モジュールの先頭)またはPrivate→ モジュール内で有効Public→ ブック全体(他のモジュール)から使える(グローバル)
例:
' モジュールの先頭
Public gTotal As Long ' どこでも使える(注意して使う)
VB実例(初心者向け・ステップごとに)
以下はそのままVBAに貼って動かせるサンプルです。コメント(')を読んでください。
例1:数値を足す(基本)
Option Explicit
Sub Example_AddNumbers()
Dim a As Integer
Dim b As Integer
Dim total As Integer
a = 7
b = 5
total = a + b
MsgBox "a + b = " & total ' 結果を表示(12)
End Sub
VB例2:文字列をつなげる(文字列操作)
Option Explicit
Sub Example_ConcatStrings()
Dim firstName As String
Dim lastName As String
Dim fullName As String
firstName = "太郎"
lastName = "山田"
fullName = lastName & " " & firstName ' & で結合
MsgBox "氏名: " & fullName ' 「山田 太郎」
End Sub
VB例3:セルに書き込む(オブジェクト+Setの例)
Option Explicit
Sub Example_WriteToCell()
Dim ws As Worksheet
Dim r As Range
Set ws = ThisWorkbook.Sheets("Sheet1")
Set r = ws.Range("A1")
r.Value = "Hello Excel"
' 直接でも書ける: ThisWorkbook.Sheets("Sheet1").Range("A2").Value = 123
End Sub
VB例4:配列(簡単)とループ(少し発展)
Option Explicit
Sub Example_ArrayAndLoop()
Dim nums(1 To 3) As Integer
Dim i As Integer
Dim sum As Integer
nums(1) = 10
nums(2) = 20
nums(3) = 30
sum = 0
For i = 1 To 3
sum = sum + nums(i)
Next i
MsgBox "合計: " & sum ' 60
End Sub
VBよくある間違い(&対処法)
- 変数名のタイプミス
→Option Explicitを使うと「変数が定義されていません」とエラーになるので早期発見可能。 - 型の不一致(String に数値を入れようとして実行時エラー)
→ 必要ならCInt()やCStr()で型変換。最初はVariantを使って試しても良いが明示的型が安全。 - オブジェクトに Set を忘れる
→Set r = ...を忘れると「型が一致しません」等のエラー。 - 宣言と代入を同じ行に書いてしまう(VBAでは不可)
→Dim xとx = 10を別行で書く。
デバッグのコツ
MsgBoxで値を表示して途中確認する:MsgBox "total=" & total- ブレークポイント(F9)やウォッチウィンドウを使う。
- Immediate ウィンドウ(Ctrl+G)で
? variableと打つと現在値が見える。
練習問題
- 問題1:変数
priceに 1200、quantityに 3 を代入してtotalに合計金額を入れ、メッセージで表示するマクロを書いてください。 - 問題2:セル
B1に「商品A」、セルC1に価格 500 があるとき、セルD1に「商品A: 500円」と書き込むマクロを書いてください(オブジェクト利用)。 - 問題3(やや発展):A列に数値が
A1〜A5に入っていると仮定して、合計を変数sumに入れてB1に書き込むマクロを書いてください(ループを使う)。
練習問題の解答(そのままコピペして動く)
Option Explicit
' 解答1
Sub Answer1()
Dim price As Long
Dim quantity As Long
Dim total As Long
price = 1200
quantity = 3
total = price * quantity
MsgBox "合計金額: " & total & " 円"
End Sub
' 解答2
Sub Answer2()
Dim ws As Worksheet
Dim product As String
Dim price As Long
Set ws = ThisWorkbook.Sheets("Sheet1")
product = ws.Range("B1").Value
price = ws.Range("C1").Value
ws.Range("D1").Value = product & ": " & price & "円"
End Sub
' 解答3
Sub Answer3()
Dim i As Integer
Dim sum As Double
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("Sheet1")
sum = 0
For i = 1 To 5
sum = sum + ws.Range("A" & i).Value
Next i
ws.Range("B1").Value = sum
End Sub
VB最後に:初心者向けベストプラクティス(要点)
- モジュールの先頭に
Option Explicitを入れる。 - 変数はできるだけ型を指定する(例:
As Integer/As String)。 - 意味のある名前をつける(
i,jはループ以外は避ける)。 - オブジェクト(Range, Worksheet)は
Setで代入する。 - 小さなサブに分けてテスト → 問題が見つかりやすい。


