
VBAマクロを習い始めたんだけど、変数のところでつまずいている…。
エクセル初心者でもわかるように教えて!

勉強お疲れさまです。
変数は誰もがつまずくところです。安心してください。
では今回は、「VBAマクロの変数」について、
VBAマクロ歴3年の私が、できるだけわかりやすく解説いたします。
※わかりやすさを重視しております。厳密には解釈が異なる場合がありますことをご了承ください。
変数とは
変数は、値を自由に入れ替えすることができる器のようなものです。
カップやグラスなどを思い浮かべていただくと、わかりやすいでしょうか。
水やジュースなど、いろいろな中身(値)を自由に入れ替えることができます。

変数の特徴として、器に入れることができる中身(値)は1つだけに限られます。
ジュースと麦茶など、2種類のものを入れることはできません。

麦茶とジュースが混ざってジュース麦茶になったり、後から入れた濃いジュースの味が勝ってしまうのと同じで、別々には保持できないのです。
カップを空っぽにできるのと同様に、変数も空っぽにすることができます(初期化)

【変数まとめ】
- 変数は器
- 変数は値を自由に入れ替えできる
- 変数に入れることができる値は1つのみ
- 変数は初期化(空っぽに)できる
変数の概要がわかったところで、変数を実際に使って簡単なマクロを作っていきましょう。
VBAマクロの変数の使い方
マクロで変数を使う場合、「宣言」や「代入」など、特徴的な処理があります。
まずは変数名を考えるところから解説いたします。
変数名を考えよう
日常のいろいろなものに名前があるのと同じで、変数にも名前をつける必要があります。
変数名は基本的に何でも構いませんが、以下のような条件があります。
【変数名の条件】
- 先頭が数字でないこと(「1hensu」などはダメ)
- 予約語は使えない(「if」や「for」などはダメ)
極端な話、「変数」や「●」など、漢字・ひらがな・カタカナ・記号も使えます。
しかしながら、「ン」と「ソ」など、よく似た文字を間違えると、違う変数として認識されるため、やめたほうがいいです。
半角英数字の変数名にすることをおすすめします。
変数の宣言
変数を使うには、プロシージャの最初で「宣言」をしましょう。
プロシージャについては、下記記事をご参考ください。
変数の宣言は「この名前の変数をこういう目的で使いますよ!」という報告のようなものでしょうか。
子供の頃、お母さんに「学校の授業で使うから筆ペン借りるよ!」などと報告した経験があると思います。
あんな感じだと思ってください。
変数を宣言せずに使うこともできますが、宣言をする方がわかりやすいので、必ずやりましょう。
変数は以下のように宣言します。
Dim 変数名 As 型名
「Dim」と「As」は決まり文句のようなものなので、深く考えず使ってください。
「変数名」は先ほど考えた変数の名前です。
「型名」は変数の型で、どんな中身(値)を入れるかによって、変わってきます。
中身(値)が「文字」なら「String」、「整数」なら「Integer」といった具合です。
「ティーカップ」や「シャンパングラス」みたいなものだと思ってください。
【変数の主な型名】
- String:文字
- Integer:整数
- Date:日付
- Range:セル座標
- Wookbook:ワークブック
- Wooksheet:ワークシート
- Boolean:「True(真)」or「False(偽)」
今回は、簡単でよく使用する「文字」と「整数」を例に挙げて解説を続けます。
実際の宣言は以下のようになります。
変数に文字を入れる場合
Dim name As String
※「name」は変数名、「String」は型名
変数に整数を入れる場合
Dim num As Integer
※「num」は変数名、「Integer」は型名
変数に値を入れることを「代入する」といいます。
では代入の方法を見ていきましょう。
変数に値を代入
変数名 = "値"
上記一文が、変数に値を代入した例になります。
右辺に書いた値が、左辺の変数に代入されます。
値は必ず「”(ダブルクォーテーション)」で囲ってください。
囲わないと、変数と判断されてうまく動作しません。
では実際の代入例をお見せします。
変数に文字を代入する場合
name = "Utatane"
変数に整数を代入する場合
num = 1
整数の場合の値が「”」で囲われていませんが、間違いではありません。
数値の場合は例外で、「”」を省略することができます。
型の違う値を変数に入れることはできません。
例えば、整数型として宣言した変数に文字を入れることはできません。
ティーカップにみそ汁を入れるようなものだと思ってください。変ですよね…。
では、下記のように書いた場合はどうなるのでしょうか。
num = 1
num = 2
変数に値を追加することもできませんし、足されることもありません。
ですので最終的に変数に残るのは「2」となります。
別の値を代入した場合は、上書きされると思ってください。
では計算したい場合はどうするのか…ですが、下記のように記述してください。
num = 1 + 2
これで変数「num」には「3」が代入されます。
計算に変数を使うこともできます。
num = 1
num = num + 2
num(1)+2で、最終的には「3」が「num」に代入されます。
変数の型が文字の場合、計算はできませんが、文字を連結することができます。
name = "Utatane"
name = "私の名前は" + name
「私の名前は」と「name(Utatane)」が連結されるので、
最終的に変数「name」には「私の名前はUtatane」が代入されます。
しかしながら、下記のような計算や連結は、型違いのためできません。
num = 1
name = "Utatane"
name = name + num
numはInteger、nameはStringで型違いになるため、下図のようなエラーが出て実行できません。覚えておきましょう。

これ以上は複雑になるため、今回はここまでとします。
さて、変数に値を代入しただけでは、何もしていないのと同じです。
続いては、変数に代入した値を出力する方法を見ていきましょう。
変数に入った値を出力
今回は簡単な「A1セルに変数(の値)を書き込み」する方法を紹介いたします。
これまでの復習も含めて、マクロの全コードをお見せします。
Sub 変数解説1文字()
Dim name As String
name = "Utatane"
Range("A1").Value = name
End Sub
Sub 変数解説2整数()
Dim num As Integer
num = 1
Range("A1").Value = num
End Sub
それぞれ5行目が出力のコードです。
これで変数に代入された「Utatane」や「1」がA1セルに書き込みされます。
5行目のコードは、下記記事で例に挙げたコードの右辺が変数に変わっただけです。
詳しく知りたい場合はご覧ください。
変数の初期化
カップやグラスを空っぽにするような感じで、変数も空っぽにすることができます。
それが初期化です。
変数の型が「文字」の場合は、下記のコードで初期化をすることができます。
型が文字の場合
変数名 = ""
右辺は「”」を2つ並べただけです。
これまで「”」で値を囲ってきましたが、囲う値が無い(中身が無い空っぽ)という状態になり、初期化することができます。
型が整数の場合は、0を代入することで初期化されます。
型が整数の場合
変数名 = 0
変数に関する解説は以上です。
変数を使うことで、今日の日付をセルに書き込んだり、行番号・列番号を記載することも可能です。
簡単なものから試してみてください。
【変数の使い方まとめ】
- 変数には型がある
- 変数に値を入れることを「代入」という
- 型違いの値を代入することはできない
- 値は「”」で囲う(数値は例外)
- 別の値を代入した場合は上書きされる
- 変数で数値の計算や文字の連結ができる
- 変数を初期化することで空っぽになる
最後に
VBAマクロの変数について解説いたしました。
当ブログでは、VBAマクロやPythonなど、時間を生み出すプログラミング術を公開しております。
この記事がわかりやすいと感じた方は、他の記事も読んでいってください。
最後までお読みいただき、ありがとうございました。がんばってください!