Excel VBA | 変数の宣言と値の代入

Excel VBA VBA
スポンサーリンク

初心者向けにやさしく、例題付きで詳しく説明します。読みやすくするために「概念 → 使い方 → 実例 → 練習問題(解答付き)」の流れでまとめます。コードはそのままVBAエディタに貼って試せます。

変数って何?

変数は「データを一時的に入れておく箱」です。箱に名前をつけて(変数名)、数値や文字列、日付などを入れたり取り出したりします。プログラム内で値を覚えておくのに使います。

まずは準備:VBAを開く/マクロを実行する方法(超短縮)

  1. Excel を開く → Alt + F11 で VBA エディタを開く。
  2. 左側のプロジェクト → ThisWorkbookModule を右クリックして「挿入」→「標準モジュール」。
  3. エディタにコードを貼って、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)
VB

VBAでは宣言と代入は別行にする必要があります(Dim x = 10 はNG)。

変数名のルール(簡単)

  • 先頭は英字(日本語も可だが避けるのが無難)
  • 空白は使えない(my name はNG)。代わりに myNamemy_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 = "こんにちは"
VB

Setを使わないと「型が一致しません」などのエラーになります(オブジェクト型は 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

よくある間違い(&対処法)

  1. 変数名のタイプミス
    Option Explicit を使うと「変数が定義されていません」とエラーになるので早期発見可能。
  2. 型の不一致(String に数値を入れようとして実行時エラー)
    → 必要なら CInt()CStr() で型変換。最初はVariantを使って試しても良いが明示的型が安全。
  3. オブジェクトに Set を忘れる
    Set r = ... を忘れると「型が一致しません」等のエラー。
  4. 宣言と代入を同じ行に書いてしまう(VBAでは不可)
    Dim xx = 10 を別行で書く。

デバッグのコツ

  • MsgBox で値を表示して途中確認する: MsgBox "total=" & total
  • ブレークポイント(F9)やウォッチウィンドウを使う。
  • Immediate ウィンドウ(Ctrl+G)で ? variable と打つと現在値が見える。

練習問題

  1. 問題1:変数 price に 1200、quantity に 3 を代入して total に合計金額を入れ、メッセージで表示するマクロを書いてください。
  2. 問題2:セル B1 に「商品A」、セル C1 に価格 500 があるとき、セル D1 に「商品A: 500円」と書き込むマクロを書いてください(オブジェクト利用)。
  3. 問題3(やや発展):A列に数値が A1A5 に入っていると仮定して、合計を変数 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

最後に:初心者向けベストプラクティス(要点)

  1. モジュールの先頭に Option Explicit を入れる。
  2. 変数はできるだけ型を指定する(例:As Integer / As String)。
  3. 意味のある名前をつける(i, j はループ以外は避ける)。
  4. オブジェクト(Range, Worksheet)は Set で代入する。
  5. 小さなサブに分けてテスト → 問題が見つかりやすい。
タイトルとURLをコピーしました