VBAを使い始めると、最初にぶつかるのが「変数」という概念です。
「変数って何?」「どう書けばいいの?」と感じる方も多いですよね。簡単なマクロなら変数なしでも動きますが、少し規模が大きくなると変数の知識が欠かせません。
この記事では、VBA変数の基本から宣言方法、データ型の選び方、命名ルールまでまとめて解説します。コピペで動くコード例もあるので、実際に手を動かしながら読み進めてみてください。
VBAの変数とは
変数は「名前付きの箱」
変数とは、データを一時的に入れておける「名前付きの箱」です。
たとえば「りんご」という文字列を保管したい場合、fruit という名前の箱を用意して、そこに「りんご」を入れます。数値の100を保管したいなら、totalCount という名前の箱に100を入れるイメージです。
この「箱の名前」のことを変数名と呼びます。変数名は自分で好きに決められますが、いくつかルールがあります(後ほど詳しく解説します)。
変数を使うメリット
「わざわざ箱に入れなくても、直接値を書けばいいのでは?」と思うかもしれません。
変数を使う最大のメリットは、修正が一箇所で済むことです。具体的なコード例で確認しましょう。
変数を使わないコードでは、同じ値が複数の場所に散らばります。
Sub SampleWithoutVariable()
MsgBox "りんごを食べることで、りんご特有の味わいが広がります。"
MsgBox "想像するだけで食欲をそそられるりんごですが、" & vbCrLf & _
"私はりんごが大好きです。"
End Sub
この文章の「りんご」を「オレンジ」に変えたい場合、すべての「りんご」を1つずつ書き換える必要があります。
一方、変数を使ったコードなら修正は1箇所だけです。
Sub SampleWithVariable()
Dim fruit As String '果物名を格納する変数
fruit = "りんご"
MsgBox fruit & "を食べることで、" & fruit & "特有の味わいが広がります。"
MsgBox "想像するだけで食欲をそそられる" & fruit & "ですが、" & vbCrLf & _
"私は" & fruit & "が大好きです。"
End Sub
fruit = "りんご" の部分を fruit = "オレンジ" に変えるだけで、すべてのメッセージが一括で変わります。
このように、変数を使うと以下のメリットがあります。
- 修正が1箇所で済む: 同じ値を何度も書き換える手間がなくなる
- コードが読みやすくなる: 変数名から「何のデータか」がわかる
- 計算結果を再利用できる: 一度計算した結果を変数に入れておけば、何度でも使い回せる
- バグを減らせる: 値の書き間違いや修正漏れを防止できる
変数名の命名ルール
守るべき4つのルール
変数名は自由に決められますが、以下の4つのルールは必ず守ってください。ルールに違反するとエラーになります。
| No. | ルール | OK例 | NG例 |
|---|---|---|---|
| 1 | 使える文字は英数字・日本語・アンダーバー(_)のみ | userName | user-name(ハイフン不可) |
| 2 | 先頭に数字・アンダーバーは使えない | count1 | 1count(数字始まり不可) |
| 3 | 同じスコープ内で同じ変数名は使えない | — | — |
| 4 | 半角255文字以内 | — | — |
スペースや記号(- ! @ など)は使えません。また、VBAの予約語(Sub、Dim、If など)も変数名にはできません。
実務で使える命名パターン
ルールを守るだけなら簡単ですが、実務では「後から見てもわかりやすい名前」を付けることが大切です。
よく使われる命名パターンを紹介します。
| パターン | 例 | 説明 |
|---|---|---|
| キャメルケース | userName, totalAmount | 単語の区切りを大文字にする。VBAで最も一般的 |
| 用途 + 型 | strFileName, lngRowCount | 先頭にデータ型の略称を付ける(ハンガリアン記法) |
| 日本語 | 合計金額, 対象シート | 日本語でそのまま命名 |
チームで運用するマクロの場合は、命名規則を統一しておくと引き継ぎがスムーズになります。個人利用なら、自分が読み返してすぐにわかる名前であれば問題ありません。
日本語の変数名は使える?
結論から言うと、個人で使う分には問題ありません。
過去のExcelバージョンでは日本語の変数名が原因でエラーが出ることもありましたが、現在のExcel(2019 / 2021 / Microsoft 365)では解消されています。
ただし、以下の点は意識しておきましょう。
- 海外のVBAサンプルコードと混在すると読みにくくなる
- 将来的に他のプログラミング言語に移行する際、日本語変数名の習慣がネックになる可能性がある
- 全角・半角の入力ミスでエラーになるケースがある
実務で迷ったら、英語のキャメルケース(userName のような書き方)がおすすめです。VBAの公式ドキュメントやサンプルコードのほとんどが英語で書かれているため、学習効率も上がります。
データ型の一覧と選び方
よく使うデータ型一覧
変数に入れるデータの種類を指定するのが「データ型」です。箱のサイズや形を決めるようなイメージで考えてください。
VBAで業務によく使うデータ型を以下の表にまとめました。
| データ型 | 名称 | 格納できるデータ | 使用例 |
|---|---|---|---|
String | 文字列型 | テキスト(最大約20億文字) | ファイル名、シート名、セルの値 |
Long | 長整数型 | -2,147,483,648 ~ 2,147,483,647 | 行番号、カウンター、個数 |
Double | 倍精度浮動小数点数型 | 小数を含む数値 | 金額計算、割合、平均値 |
Boolean | ブール型 | True または False | 条件フラグ、ON/OFF判定 |
Date | 日付型 | 日付と時刻 | 開始日、期限、タイムスタンプ |
Variant | バリアント型 | すべてのデータ | セルの値(型が不定の場合) |
Object | オブジェクト型 | ワークブック、シート等 | シートやセル範囲の操作 |
NOTE
Integer(整数型)もありますが、扱える範囲が -32,768 ~ 32,767 と狭いため、整数にはLongを使うのが現在の主流です。VBAの内部処理でもIntegerはLongに変換されるため、最初からLongを選んで問題ありません。
データ型を省略するとどうなる?
データ型を指定しない場合、自動的に Variant 型になります。
Dim myValue '← データ型を省略すると Variant 型になる
Variant 型はどんなデータでも入れられるので便利に思えますが、次のデメリットがあります。
- メモリを多く消費する: 他のデータ型の数倍のメモリを使う
- 処理速度が遅くなる: データ型の判定が毎回発生する
- 型の不一致によるバグが起きやすい: 数値のつもりが文字列として扱われることがある
入れるデータが決まっているなら、必ずデータ型を指定しましょう。迷ったときの選び方は次の通りです。
- 文字を入れる →
String - 整数を入れる →
Long - 小数を入れる →
Double - 日付を入れる →
Date - True/Falseを入れる →
Boolean - セルの値で型が不定 →
Variant
変数の宣言方法(Dim文の書き方)
基本の宣言
変数を使うには、最初に「宣言」が必要です。宣言とは「この名前で、この型の箱を用意します」とVBAに伝えることです。
Dim 文を使って次のように書きます。
Dim 変数名 As データ型
具体例を見てみましょう。
Dim userName As String '文字列を入れる変数
Dim rowCount As Long '整数を入れる変数
Dim taxRate As Double '小数を入れる変数
Dim startDate As Date '日付を入れる変数
Dim isFinished As Boolean 'True/Falseを入れる変数
Dim、変数名、As、データ型の間は、それぞれ半角スペースで区切ります。スペースがないとエラーになるので注意してください。
値の代入
宣言した変数にデータを入れることを「代入」と言います。=(イコール)を使って次のように書きます。
Dim userName As String
userName = "田中太郎"
Dim rowCount As Long
rowCount = 100
Dim taxRate As Double
taxRate = 0.1
文字列を代入する場合は、値をダブルクォーテーション(")で囲みます。数値や True / False にはダブルクォーテーションは不要です。
WARNING
オブジェクト型(
Worksheet、Rangeなど)に代入する場合はSet文を使います。Setを付け忘れると実行時エラーになります。vba
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("Sheet1") 'Setが必要
複数の変数をまとめて宣言
同じデータ型の変数が複数ある場合、1行にまとめたくなるかもしれません。ただし、VBAでは次の書き方に注意が必要です。
'NG: aとbはVariant型になってしまう
Dim a, b, c As Long
'OK: すべてLong型で宣言される
Dim a As Long, b As Long, c As Long
カンマで区切っても、As Long は最後の変数にしか適用されません。すべての変数にデータ型を明示するのが正しい書き方です。
変数を使った実践コード
ここまでの知識を使って、実務で役立つコードを書いてみましょう。
基本コード: セルの値を変数で操作する
Sub BasicVariableExample()
Dim productName As String '商品名
Dim unitPrice As Long '単価
Dim quantity As Long '数量
Dim totalPrice As Long '合計金額
'変数にセルの値を代入
productName = Range("A2").Value
unitPrice = Range("B2").Value
quantity = Range("C2").Value
'計算結果を変数に格納
totalPrice = unitPrice * quantity
'結果をセルに書き出す
Range("D2").Value = totalPrice
MsgBox productName & "の合計金額は " & totalPrice & " 円です。"
End Sub
このコードの流れを整理します。
- 4つの変数を宣言(商品名・単価・数量・合計金額)
- セルA2~C2の値を変数に代入
- 単価 x 数量の計算結果を
totalPriceに格納 - 結果をセルD2に書き出し、メッセージボックスで表示
変数を使うことで「何のデータを操作しているか」がコードを読むだけでわかります。
応用コード: 複数行を一括処理する
Sub CalculateAllRows()
Dim lastRow As Long '最終行
Dim i As Long 'ループカウンター
Dim unitPrice As Long '単価
Dim quantity As Long '数量
'最終行を取得
lastRow = Cells(Rows.Count, "A").End(xlUp).Row
'データ行をループ処理(2行目から)
For i = 2 To lastRow
unitPrice = Cells(i, 2).Value 'B列: 単価
quantity = Cells(i, 3).Value 'C列: 数量
'合計金額をD列に出力
Cells(i, 4).Value = unitPrice * quantity
Next i
MsgBox "計算が完了しました。対象: " & (lastRow - 1) & " 件"
End Sub
このコードでは、For文で変数 i を使ってデータの行数分だけ処理を繰り返しています。ループ処理は変数の代表的な活用場面です。
For文の詳しい使い方は、以下の記事で解説しています。
VBA For~Next文の使い方|繰り返し処理の基本から実務パターンまで解説
Option Explicitで変数宣言を強制する
VBAには、宣言していない変数を使うとエラーにしてくれる便利な機能があります。それが Option Explicit です。
モジュールの先頭に次の1行を追加するだけで有効になります。
Option Explicit
Sub MySample()
Dim userName As String
userName = "田中"
'userNameのスペルミス → コンパイルエラーで教えてくれる
MsgBox userNme '← "a"が抜けているが、Option Explicitがあればエラーになる
End Sub
Option Explicit がない場合、userNme は新しい空の変数として自動作成されてしまいます。エラーにならないため、原因の特定に時間がかかるバグの温床になります。
VBEのオプション設定で「変数の宣言を強制する」にチェックを入れると、新しいモジュールに自動で Option Explicit が挿入されます。特別な理由がない限り、有効にしておくことを強くおすすめします。
Option Explicitの設定手順や実践的な使い方は、以下の記事で詳しく解説しています。
【VBA】Option Explicitで変数の宣言を強制する方法|設定と使い方を解説
まとめ
VBA変数の基本を振り返りましょう。
- 変数とは: データを一時的に入れておく「名前付きの箱」
- 宣言方法:
Dim 変数名 As データ型で書く - 命名ルール: 英数字・日本語・アンダーバーのみ、先頭に数字は不可、255文字以内
- データ型: 文字は
String、整数はLong、小数はDoubleが基本 - Variant型の注意: 便利だが、メモリ消費やバグの原因になりやすい
- Option Explicit: 変数宣言の強制を有効にしてバグを未然に防ぐ
変数は最初のうちは面倒に感じるかもしれませんが、コードが増えるほど威力を発揮します。まずはよく使う値を変数に入れて使い回すことから始めてみてください。
VBAの基礎をもっと学びたい方は、以下の記事もあわせてご覧ください。
