VBAで複雑なマクロを作るうえで欠かせないのが変数です。変数とは「値を一時的に保存して、後で取り出して使う箱」のようなものです。変数を使いこなすことでコードが短くなり、繰り返し処理や複数シート間のデータ移行もシンプルに書けるようになります。
この記事では、変数の基本的な使い方と、実務でよく登場する3種類の変数の役割を解説します。
変数の基本的な使い方とは?
変数は「値を入れておく箱」です。セルの値を変数に保存し、後で別のセルに書き出す、というのが最も基本的な使い方です。
data1 = Cells(1, 1).Value ' A1の値を変数に保存
Cells(1, 5).Value = data1 ' 保存した値をE1に書き出す
変数名は i・data1・sheet_name など自由に命名できます(VBAの予約語は使用不可)。用途がわかる名前をつけると後からコードを読みやすくなります。
実務でよく使う3種類の変数とは?
次のコードはシート1のA列・B列のデータをシート2にコピーするマクロです。3種類の変数が登場します。
Sheets(1).Select
ls_rw = Cells(Rows.Count, 1).End(xlUp).Row
For i = 2 To ls_rw
Sheets(1).Select
d1 = Cells(i, 1).Value
d2 = Cells(i, 2).Value
Sheets(2).Select
rw = Cells(Rows.Count, 1).End(xlUp).Row + 1
Cells(rw, 1).Value = d1
Cells(rw, 2).Value = d2
Next
① データを一時保存する変数(d1・d2)
シート1から読み取った値を一時的に保存し、シート2に書き込むために使います。シートを切り替える前に値を変数に入れておくことで、正確にデータを移行できます。
② カウンター変数(i)
For〜Next の中で行番号を動的に切り替えるために使います。2行目から最終行まで順番に変化することで、すべての行を自動処理します。
③ 最終行を保持する変数(ls_rw・rw)
最終行の行番号を変数に入れておくことで、同じ長いコードを何度も書かずに済みます。変数なしで書くと次のように長くなります。
' 変数なしの場合(読みにくい)
Cells(Cells(Rows.Count, 1).End(xlUp).Row + 1, 1).Value = d1
' 変数ありの場合(すっきり)
rw = Cells(Rows.Count, 1).End(xlUp).Row + 1
Cells(rw, 1).Value = d1
まとめ
- 変数とは値を一時的に保存して後で取り出せる箱
- データ保存用(d1・d2):シート間の転記など値を持ち越す場面で使う
- カウンター用(i):
For〜Nextで行番号を順番に変化させる - 最終行保持用(ls_rw・rw):長い行取得コードを短く書き換えられる
- 変数名は用途がわかる名前にするとコードが読みやすくなる
よくある質問
変数名に使えない文字はありますか?
スペース・記号(!・@・# など)・VBAの予約語(Cells・Range・If など)は変数名に使えません。先頭は必ず文字で始め、英数字とアンダースコアが使えます。
変数を宣言せずに使えますか?
使えますが、宣言することを推奨します。Dim 変数名 As 型 で宣言すると型の制限がかかり、意図しない値の混入やタイプミスを検出しやすくなります。
変数の値はどのタイミングでリセットされますか?
通常の Dim 変数は、そのプロシージャ(Sub)が終了するとリセットされます。値を保持し続けたい場合は Static を使います。
同じ変数を複数のSubで使うにはどうすればいいですか?
モジュールの先頭(Sub の外)で Dim を使って宣言するとモジュール内のすべての Sub から参照できます。さらに広い範囲で使いたい場合は Public を使います。
変数に入れられる値の種類(型)は何がありますか?
主なものとして、整数なら Long・Integer、文字列なら String、小数なら Double、真偽値なら Boolean、オブジェクトなら Worksheet・Workbook などがあります。何でも入れたい場合は Variant 型が使えます。
動画で学びたい方へ
「記事を読んでも、実際に自分で書けるか不安…」という方には、動画で基礎からじっくり学べる講座がおすすめです。
VBAが初めての方を前提に、つまずきやすいポイントを先回りして解説しています。サンプル動画は無料でご覧いただけます。



