【結論】エクセルVBAで変数の宣言方法
Dim 〇〇〇 As ■■■
〇〇〇は変数名を書き、■■■はデータの型を指定します。
こちらの記事では、エクセルVBAの変数とデータ型について紹介しています。
変数はVBAに限らず、他のプログラミング言語で必ず出てくるものです。
変数がどういったものか。どのようにつかうのか。についてはどの言語でも共通していると言えます。
しかし、それぞれの言語で変数を使う時の文法が異なってきます。
ここではエクセルVBAにおける変数の基本的な書き方を中心に紹介します。
●エクセル(Excel)VBA初心者
●エクセル(Excel)VBAでセルに文字を入力することができる人
●エクセル(Excel)VBAを事務作業などを自動化したいと考えている人
エクセル(Excel)VBAの変数とは何か
エクセル(Excel)VBAの変数について
はじめに変数とは何?といった疑問がありますが、Wikipediaによれば以下のとおりです。
プログラミングにおける変数(へんすう、英: variable)とは、高水準言語のプログラムのソースコードにおいて、扱うデータを読み書きする記憶域 (storage) のことであり、固有の名前(識別子)によって識別される[1]。変数を用いることで、データを一定期間記憶し必要なときに利用することができる。高水準言語において、変数は記憶装置(メモリ)を抽象化する役割を果たす。
出典: フリー百科事典『ウィキペディア(Wikipedia)』
一人一人の人間が異なる名前によって区別されるように、変数も個々の名前によって区別される。これにより、プログラム上で複数のデータを容易に識別・管理することができる。変数の識別子 (identifier) のことを変数名 (variable name) という。一般に、変数が表すデータをその変数の値(あたい、英: value)という。
私にはこれで理解が難しかったので、書籍や他のネット記事を参考にした内容から多かった説明が
変数は値を入れておく箱
として例えられることが多く、中の値の読み書きや更新、破棄などの処理を自由にできる。
文章だけだと伝わりにくいので、以下イラストで紹介します。

ただし、VBAではこの箱を事前に何を代入する用の変数であるか明示的に予約しておく必要があります。
整数型や文字列型などのデータ型は後で触れますが、ここでは整数を入れる用の変数(箱)に文字列の”カレー”を代入しようとするとエラーになるという理解で大丈夫です。
Sub test()
Dim A As Integer
Dim B As String, C As String
A = 1
B = "カレー"
C = "2022年"
Debug.Print (A)
Debug.Print (B)
Debug.Print (C)
End Sub
実行結果
1
カレー
2022年
それぞれの変数に代入された値が表示される
整数型の変数に文字列を代入した例
Sub test()
Dim A As Integer
A = "カレー"
Debug.Print (A)
End Sub
Dim A As Integer
上記では、変数の宣言で「 A 」という名前で、整数型にしています。
※Dim は Dimension(寸法)の略です。
A = “カレー”
文字列である”カレー”を変数「 A 」に代入するコードを書いています。
これを実行しようとすると。
実行時エラー'13':
型が一致しません。
このようなエラーが発生します。
VBAで変数を使用するときは、事前に変数名とその変数がどの型であるかを指定する必要があり、指定のものと異なるなる値を代入しようとするとエラーが発生する点に注意が必要です。
引越の荷造りなどで、ダンボール箱に「服」「アクセサリー」「本」「おもちゃ」などのラベルづけをイメージすると理解しやすいと思います。

エクセル(Excel)VBAにおける変数の型と種類
続いて変数のデータ型と種類について説明をしていきます。
VBAでは変数の宣言で指定した型と代入する値の型が一致していないとエラーが発生します。
ここでは、この型の種類とそれぞれがどういったものかを紹介していきます。
●Intger:整数型
●Long:長整数型
●Single:単精度浮動小数点数型
●Double:倍精度浮動小数点数型
●String:文字列型
●Date:日付型
●Boolean:ブーリアン型(真偽値)
●Object:オブジェクト型
●Variant:バリアント型
変数をたくさんつかうマクロが作りたい場合は、配列をつかう方法がおすすめです。配列は変数のかたまり(ブロック)のようなものなので、たくさんのデータや値をあつかうマクロをつくる上では覚えておきたいテクニックです。
配列の基本的なつかいかたなどをは、こちらの記事を参考にしてください。
それぞれの変数のデータ型に代入できるものは以下のとおり
型の種類 | 代入可能な値 |
---|---|
Intger | -32,768~32,767の整数 |
Long | -2,147,483,648~2,147,483,647の整数 |
Single | 負の値:約-3.4×10(38乗)~-1.4×10(-45乗)正の値:約1.4×10(-45乗)~1.8×10(38乗) |
Double | 負の値:約-1.8×10(308乗)~-4.0×10(-324乗)正の値:約4.9×10(-324乗)~1.8×10(308乗) |
String | “カレー”、”東京”などの文字列 |
Date | 西暦100年1月1日~西暦9999年12月31日時刻:0:00:00 ~ 23:59:59 |
Boolean | True または Falseの真偽値 |
Object | ワークブック・ワークシート・セル範囲などのオブジェクトを代入可能 |
Variant | 万能型 |
バリアント(Variant)型は万能なので、どういったものでも代入できますが、その分メモリをたくさん使います。
なるべく準備した箱(変数)にどのような値を代入するものかを想定し、適切なデータ型を宣言することで無駄なメモリ消費を抑えたプログラムになります。
エクセル(Excel)VBAで変数をつかったマクロのつくりかた
エクセル(Excel)VBAでは変数を扱う場合に事前に宣言をする必要があります。
コードを書きこむ場所は、Sub〇〇()の直ぐ下の冒頭部分に宣言しておくことが一般的です。
エクセル(Excel)VBAで変数を宣言する
以下は、それぞれのデータ型で変数を宣言するコードとなります。
入力コード
Sub vartest()
'変数の宣言
'「Dim 〇〇 as データ型」で宣言する
'※〇〇は変数名
Dim i As Integer
Dim j As Long
Dim k As Single
Dim l As Double
Dim m As String
Dim n As Date
Dim o As Boolean
Dim p As Object
Dim q As Variant
End Sub
続いて宣言した変数に値を代入する
整数(Integer)型への代入
整数(int)型の変数iに【 1 】を代入する
入力コード
Sub vartest()
'変数の宣言
'「Dim 〇〇 as データ型」で宣言する
'※〇〇は変数名
Dim i As Integer
'変数に値を代入する
i = 1
Debug.Print (i)
End Sub
実行結果
1
小数(Single)型への代入
小数点(single)型の変数kに【 0.5 】を代入する
入力コード
Sub vartest()
'変数の宣言
'「Dim 〇〇 as データ型」で宣言する
'※〇〇は変数名
Dim k As Single
'変数に値を代入する
k = 0.5
Debug.Print (k)
End Sub
実行結果
0.5
文字列(String)型への代入
文字列(string)型の変数mに【 カレー 】を代入する
入力コード
Sub vartest()
'変数の宣言
'「Dim 〇〇 as データ型」で宣言する
'※〇〇は変数名
Dim m As String
'変数に値を代入する
m = "カレー"
Debug.Print (m)
End Sub
実行結果
カレー
日付(Date)型への代入
日付(Date)型の変数nに【 2022年10月20日 】を代入する
入力コード
Sub vartest()
'変数の宣言
'「Dim 〇〇 as データ型」で宣言する
'※〇〇は変数名
Dim n As Date
'変数に値を代入する
n = "2022年10月20日"
Debug.Print (n)
End Sub
実行結果
2022/10/20
ブーリアン型(Boolean)型への代入
ブール・ブーリアン(Boolean)型の変数oに【 True 】を代入する
※Boolean型変数の初期値はFalseとなります。
入力コード
Sub vartest()
'変数の宣言
'「Dim 〇〇 as データ型」で宣言する
'※〇〇は変数名
Dim o as Boolean
'変数に値を代入する
o = True
Debug.Print (o)
End Sub
実行結果
True
オブジェクト型(Object)型への代入
オブジェクト(Object)型の変数qに【 ワークシート(”Sheet1”)のセル範囲(A1セルからA5セル) 】を代入する


A1セルとA5セルの値をデバッグプリントで表示することで、指定のセル領域が変数に代入された確認とします。
入力コード
Sub vartest()
'変数の宣言
'「Dim 〇〇 as データ型」で宣言する
'※〇〇は変数名
Dim q As Object
'変数に値を代入する
Set q = ThisWorkbook.Worksheets("Sheet1").Range("A1:A5")
Debug.Print (q.Range("A1").Value)
Debug.Print (q.Range("A5").Value)
End Sub
実行結果
1
メッセージボックスでピカピカピカチュウ
A1セルに入力されている値「 1 」とA5セルに入力されている値「メッセージボックスでピカピカピカチュウ」が表示されていることから、指定領域が変数に代入されたことが確認できます。
変数に代入した値の更新(書き換え)
ここでは一度宣言した変数に値を代入した後で、同じ変数に改めて別の値を代入することができるかを検証してみます。
入力コード
Sub vartest() '変数の宣言 '「Dim 〇〇 as データ型」で宣言する Dim i As Integer '変数に値を代入する i = 1 Debug.Print (i) '変数の値に数値を足す Debug.Print (i + 9999) Debug.Print (i) '変数の値を書き換える(更新する) i = 9999 Debug.Print (i)
変数「 i 」には最初に「 1 」が代入されます。
Debug.Purit(i + 9999)で、合計値の10000が返ってきていますが、この場合は変数の値自体は書きかわっていないことが分かります。
しかし、その後の i = 9999 を実行することで 変数「 i 」の値は書きかえられています。
実行結果
1
10000
1
9999
エクセル(Excel)VBAで変数をつかってマクロできること
変数をつかった計算や文字列結合
ここでは変数を使って出来ることを3つ紹介します。
1.変数と数値をつかった計算
2.変数と変数をつかった計算
3.変数で文字列結合
変数と数値をつかった計算
ここでは四則演算(足し算、引き算、掛け算、割り算)と余りを求めてみます。
入力コード
Sub vartest()
'変数の宣言
'「Dim 〇〇 as データ型」で宣言する
Dim i As Integer
'変数に値を代入する
i = 100
Debug.Print (i)
'変数の値に数値を足す
Debug.Print (i + 10)
'変数の値から数値を引く
Debug.Print (i - 20)
'変数の値に数値を掛ける
Debug.Print (i * 3)
'変数の値を数値で割る
Debug.Print (i / 25)
'変数の値を数値で割った後の余りを求める
Debug.Print (i Mod 25)
End Sub
実行結果
100
110
80
300
4
0
上から順に、変数の値、足し算、引き算、掛け算、割り算と余りが出力されました。
変数と変数をつかった計算
変数と数値をつかった計算と同じく、変数どうしでも実行可能です。
入力コード
Sub vartest()
'変数の宣言
'「Dim 〇〇 as データ型」で宣言する
Dim i As Integer
'変数に値を代入する
i = 100
Debug.Print (i)
'変数どうしでも計算可能
Dim j As Integer, k As Integer, l As Integer, m As Integer
'それぞれの変数の値を代入
j = 10
k = 20
l = 3
m = 25
'変数と変数を足す
Debug.Print (i + j)
'変数から変数を引く
Debug.Print (i - k)
'変数に変数を掛ける
Debug.Print (i * l)
'変数の値を変数で割る
Debug.Print (i / m)
'変数の値を変数で割った後の余りを求める
Debug.Print (i Mod m)
End Sub
複数の変数をまとめて宣言するときの注意
変数をまとめて宣言する書き方①
Dim j As Integer, k As Integer, l As Integer, m As Integer
変数をまとめて宣言する書き方②
Dim j , k , l , m As Integer
①と②ともにエラーは発生しません。
ただし、j、k、lについてはバリアント(万能)型で宣言したことになる点が①と異なります。
(※最後の変数mのみ整数(int)型となります。)
実行結果
100
110
80
300
4
0
変数をつかった文字列結合
続いて変数を使って文字列を結合をします。変数に文字列を代入して結合することができます。
以下、入力コード①はシンプルに変数に代入した文字列をつなげてメッセージをする処理。
入力コード②はユーザー名や生年月日が入力されると誕生した曜日がメッセージで返ってくる処理です。
入力コード①
Sub vartest()
'変数iとj、k、l、mを別の行で宣言しているのは分かりやすくするためです。
Dim i As String
Dim j As String, k As String, l As String, m As String
i = "私"
j = "ピカチュウ"
k = "フシギダネ"
l = "ヒトカゲ"
m = "ゼニガメ"
Debug.Print (i & "は" & j & "も" & k & "も" & l & "も" & m & "も全部大好きです。")
実行結果
私はピカチュウもフシギダネもヒトカゲもゼニガメも全部大好きです。
ユーザーにより入力された名前や生年月日より、メッセージを返すプログラム
入力コード②
Option Explicit
Sub test()
Dim name As String
Dim input_Birthday As String
Dim Birthday As Date
name = Application.InputBox("あなたの名前を教えてください。", "名前を入力", "緋村剣心")
input_Birthday = Application.InputBox("あなたの生年月日を数字8桁で入力してください。", "生年月日を入力", "18490620", Type:=1)
If Len(input_Birthday) = 8 Then
input_Birthday = Left(input_Birthday, 4) & "/" & Mid(input_Birthday, 5, 2) & "/" & Mid(input_Birthday, 7, 2)
Birthday = CDate(input_Birthday)
WeekdayName (Weekday(input_Birthday))
ElseIf Len(input_Birthday) <> 8 Then
MsgBox "不正な入力です。" & vbCrLf & "処理を終了します。"
Exit Sub
End If
Debug.Print ("あなたの名前は" & name & "です。" _
& vbCrLf & "生年月日は" & input_Birthday & "なので" _
& vbCrLf & "誕生日は:" & WeekdayName(Weekday(input_Birthday)) & "です。")
End Sub
実行結果
イミディエイトウィンドウには以下の実行結果が出力されます。
あなたの名前は緋村剣心です。
生年月日は1849/06/20なので
誕生日は:水曜日です。
名前と生年月日を入力すると、誕生日が何曜日であったかメッセージでかえってきます。
オブジェクトを変数に代入して操作する
本記事の冒頭で変数に値やセル範囲を代入するコードを書きましたが、この変数に代入したセル範囲の変更や値の書き込み処理をするコードを紹介します。
変数に代入されているRangeオブジェクトから値を取り出す
前提条件


入力コード
Sub vartest()
'変数の宣言
'「Dim 〇〇 as データ型」で宣言する
Dim q As Object
Dim sum As Integer
'変数に値を代入する
Set q = ThisWorkbook.Worksheets("Sheet1").Range("A1:A5")
'変数qのセルに入力されている値を取り出す。
Debug.Print (q.Range("A1").Value)
Debug.Print (q.Range("A2").Value)
Debug.Print (q.Range("A3").Value)
Debug.Print (q.Range("A4").Value)
Debug.Print (q.Range("A5").Value)
'変数qのセルに入力されている値を全て足して変数sumに代入する
sum = q.Range("A1") + q.Range("A2") + q.Range("A3") + q.Range("A4")
Debug.Print (sum)
'変数qのセルA1の値を「 10 」に変更した後、値を全て足して変数sumに代入する
q.Range("A1").Value = 10
sum = q.Range("A1") + q.Range("A2") + q.Range("A3") + q.Range("A4")
Debug.Print (sum)
'変数qのセルに入力されている値をワークシート関数を使って全て加算し変数sumに代入する
sum = WorksheetFunction.sum(q.Range("A1"), q.Range("A2"), q.Range("A3"), q.Range("A4"))
Debug.Print (sum)
End Sub
実行結果
1
10
110
110
メッセージボックスでピカピカチュウ
231
240
240
実行結果の上から順にA1セルには「 1 」が記入されているので、Debug.Print (q.Range(“A1”).Value)のコードを実行した結果として「 1 」が出力されました。
同様に、A2セルからA5セルの値を出力するコードにて「 10 」、「 110 」、「メッセージボックスでピカピカチュウ」の値が返ってきています。
続いて、整数型の変数sumにA1セルからA4セルをたし算をした値を代入し、結果を出力するコードですが、結果である「 231 」が返ってきます。更にA1セルの値を「 1 」→「 10 」に更新し、たし算をした結果を出力することもできます。
また、最後の以下のコードはエクセルのワークシート関数を使うときの書き方です。
ここでは、sum関数でA1セル~A4セルの値をたし算しています。
sum = WorksheetFunction.sum(q.Range("A1"), q.Range("A2"), q.Range("A3"), q.Range("A4"))
変数に代入されているオブジェクトを書き換え(更新)
以下の表のようなエクセルシートがあるとします。
ここでは、最初にA列をオブジェクト変数に代入し、値を取り出します。その後で変数内のオブジェクトをB列に更新して値を取り出せるか確認してみます。
A列 | B列 | |
---|---|---|
1行目 | ピカチュウ | コラッタ |
2行目 | カイリュー | ズバット |
3行目 | ヤドラン | ギャロップ |
4行目 | ピジョン | サンダース |
5行目 | コダック | メノクラゲ |
入力コード
Option Explicit
Sub test2()
'繰り返し処理用の変数i、jとセル領域を代入するオブジェクト変数boxAの宣言
Dim i As Integer, j As Integer
Dim boxA As Object
'ワークシートのA1セル~A5セルを変数に代入する
Set boxA = ThisWorkbook.Worksheets("Sheet1").Range("A1:A5")
'変数boxAのA1セル~A5セルに入力された値を繰り返しで出力する
For i = 1 To 5
Debug.Print (boxA.Range("A" & i))
Next i
'ワークシートのB1セル~B5セルを変数に代入する(boxAの中身を更新する)
Set boxA = ThisWorkbook.Worksheets("Sheet1").Range("B1:B5")
'変数boxAのB1セル~B5セルに入力された値を繰り返しで出力する
For i = 1 To 5
Debug.Print (boxA.Range("A" & i))
Next i
'ワークシートのA1セル~B5セルを変数に代入する(boxAの中身を更新する)
Set boxA = ThisWorkbook.Worksheets("Sheet1").Range("A1:B5")
'boxAの中身を出力する
Debug.Print ("A列" & " | " & "B列")
Debug.Print (boxA.Range("A1") & " | " & boxA.Range("B1"))
Debug.Print (boxA.Range("A2") & " | " & boxA.Range("B2"))
Debug.Print (boxA.Range("A3") & " | " & boxA.Range("B3"))
Debug.Print (boxA.Range("A4") & " | " & boxA.Range("B4"))
Debug.Print (boxA.Range("A5") & " | " & boxA.Range("B5"))
End Sub
実行結果
ピカチュウ
カイリュー
ヤドラン
ピジョン
コダック
コラッタ
ズバット
ギャロップ
サンダース
メノクラゲ
A列 | B列
ピカチュウ | コラッタ
カイリュー | ズバット
ヤドラン | ギャロップ
ピジョン | サンダース
コダック | メノクラゲ
「エクセル(Excel)VBAの変数について」のまとめ
今回はエクセルVBAにおける変数を紹介しました。最後に今回紹介した内容をまとめます。
●変数とは何か
値を代入する箱のイメージで良い。
●変数のデータ型と種類について
整数型・小数点型・文字列型・日付型など目的に応じた種類の箱を宣言する必要がある。
宣言した型と異なる値を代入しようとするとエラーが発生する。
バリアント型は万能で使えるが、メモリ消費が多くなるので用途が明確であれば使わない。
●変数の宣言方法
「Dim 〇〇 as データ型」
例:Dim i As Integer、Dim j As Stringなど…
●変数に値を代入する方法
「〇〇 = X」で変数に値を代入する
例:i = 1、j = “ピカチュウ”など…
●変数を使ってできることを3つ
1.変数をつかった計算
2.変数をつかった文字列結合
3.オブジェクトを代入して操作
最後までお読み頂きありがとうございました。
これからVBAの学習を試みる人にこの記事が少しでもお役に立てば嬉しいです。
![]() ![]() にほんブログ村 | ![]() ![]() |
コメント