今回は、VBAを使う上で必須とも言える変数について、詳しい使い方を解説していきます。
まずは
- 変数とは?
- データ型とは?
といった基礎の内容から、
- 変数の宣言と定義の方法
- 変数に配列を指定する方法
- 変数のスコープについて
などの実践的な内容についても、分かりやすく解説していきたいと思います。
変数とは?
変数とは、データを一時的に保管しておくための箱のようなものです。中に文字や数字などの様々な値を代入することで、必要な場所でその値を使用することができるようになります。
まず初めに、以下のコードを見てみましょう。
【サンプルコード】
Sub sample()
Worksheets("サンプルシート1").Range(“A1”) = ”サンプル太郎”
Worksheets("サンプルシート1").Range(“B1”) = 23
Worksheets("サンプルシート1").Range(“C1”) = ”男”
End Sub
このサンプルコードでは、「サンプルシート1」と名付けたシートのセルにそれぞれ値を書き込む処理をしています。シート名を一つずつ直接打ち込んでいるので、名前が変わった際には全てのシート名を変更しなければいけません。
上のように、変更する箇所が少ない場合には手間もさほどかかりませんが、扱うデータの数が増えれば増えるほどに作業も膨大になってしまいます。
そこで、変数を使って次のように置き換えてみます。
【サンプルコード】
Sub sample2()
'シート名を変数として作成
Dim sheetName as String
sheetName = "サンプルシート1"
Worksheets(sheetName).Range("A1") = ”サンプル太郎”
Worksheets(sheetName).Range("B1") = 23
Worksheets(sheetName).Range("C1") = "男"
End Sub
シート名を変数で管理することにより、名前が変わった際に、一番上に書いた内容を変更するだけで全ての箇所に反映させることができるようになりました。
このように、同じ内容を何度も使用する場合において、変数はとても便利に利用することができます。
VBAにおけるデータ型とは?
データ型とは、変数が扱える値の種類や大きさを指定するための仕組みです。
変数を作成する際にデータ型を指定することで、メモリ上に確保する領域の場所や大きさ、確保した領域の扱い方などが決定されます。
VBAで扱う型には以下のような種類があります。
データ型(名称) | 使用メモリ | データ内容 |
Byte(バイト型) | 1バイト | 0~255までの整数 |
Integer( 整数型) | 2バイト | -32,768 ~ 32,767までの整数 |
Long(長整数型) | 4バイト | -2,147,483,648 ~ 2,147,483,647までの整数 |
Single(単精度浮動小数点数型) | 4バイト | -3.402823E38 ~ -1.401298E-45(負の値) 1.401298E-45 ~ 3.402823E38(正の値) |
Double(倍精度浮動小数点数型) | 8バイト | -1.79769313486232E308 ~ -4.94065645841247E-324(負の値) 4.94065645841247E-324 ~ 1.79769313486232E308(正の値) |
Currency (通貨型) | 8バイト | -922,337,203,685,477.5808 ~ 922,337,203,685,477.00までの数値 |
String (文字列型) | 10バイト+文字列の長さ | 最大約20億文字までの文字列 |
Date (日付型) | 8バイト | 西暦100 年1月1日~西暦9999年12月31日までの日付と時刻 |
Boolean (ブール型) | 2バイト | 真 (True) または偽 (False) |
Object (オブジェクト型 ) | 4バイト | 任意のオブジェクト |
Variant (バリアント型) | 8バイト | すべてのデータ |
数多くの種類がありますが、実際によく使われるのは下の3つです。
- Long
- Double
- String
初めのうちは、これらを覚えておけば問題はないでしょう。
変数の作成時にデータ型を指定をしなかった場合には、一覧表の一番下にあるVariant型で作成されます。どんなデータでも入れられるので、型がわからない場合などに覚えておくと便利です。
変数の宣言と定義の方法を解説
変数を作成する際には、変数名を指定して宣言をします。この時、同時にデータ型を指定して定義することができます。
基本的な構文は以下の通りです。
【基本構文】
Dim 変数名 As データ型
データ型の指定については省略が可能です。その場合は、先ほども説明したようにVariant型で作成されます。また、次のように宣言することで、複数の変数を一度に作成することもできます。
Dim 変数名1 As データ型1, 変数名2 As データ型2, ・・・
ただし、同じ型で複数の変数を指定する場合、気を付けるべき点が1つあります。
例えば、以下のように変数をまとめて宣言したとします。
Dim 変数名1, 変数名2, 変数名3 As データ型名
一見すると、3つの変数全てを同じ型で定義したように見えますが、実際にデータ型が指定されているのは変数3だけになります。変数名1と変数名2は型の指定が省略されたとみなされてしまうので、指定の仕方には注意しましょう。
また、変数名は基本的に自由に設定することができますが、いくつかの規則が存在します。
- 英数字、ひらがな、カタカナ、漢字、アンダーバーが使用可能
- 1文字目のみ、数字やアンダーバーは指定不可
- 同じスコープ内において、同名は使用不可
変数名の長さは半角で255字までです。スコープについては後ほど解説します。
変数の初期化と代入の方法を解説
変数を宣言したあと、値を初期化する場合には次のように記述します。
Dim 変数名 As データ型
変数名 = 値
あるいは、「:」(コロン)を使って1行にまとめることもできます。
Dim 変数名 As データ型:変数名 = 値
変数を宣言した後に初期値を設定しなかった場合は、数値型であれば0(ゼロ)、Boolean型であればFalse(偽)といったように、暗黙的に初期値が指定されます。
初期化を行った後も、以下のように同じ方法で代入することで値の変更が可能です。
変数名 = 値
変数がObject型の場合については、Setステートメントを使って初期化、代入する必要があります。
Dim オブジェクト名 As Object
Set オブジェクト名 = オブジェクト
ここまで解説した内容を、サンプルコードを踏まえて確認してみましょう。
Sub sampleTest()
'変数の宣言と定義
Dim num As Integer, str As String, dt As Date
'変数を初期化
num = 1
str = "回目の表示"
dt = Now
MsgBox dt & vbCrLf & num & str
'代入して値を変更
num = 2
dt = Now
MsgBox dt & vbCrLf & num & str
End Sub
【実行結果】
【一回目の表示】
【二回目の表示】
初めに変数をそれぞれ宣言・定義し、初期化してから表示しています。
その後に、代入して値を変更した結果を再度表示しました。変更した部分の表記が実際に変わっているのが分かるかと思います。
変数に配列を指定する方法を解説
変数には、単独の値だけでなく配列を指定することもできます。
配列を指定する際には、下記のように変数名の後ろに「()」を付けて宣言します。
Dim 配列名() As 要素のデータ型
「()」内に数値を指定すると、配列内の要素数を指定することができます。
Dim 配列名(要素数) As 要素のデータ型
配列内の要素は基本的に、0番目、1番目・・・と0から順番に数えられていきます。
上で指定した数は、「(要素数)個の値を入れられる配列」ではなく「(要素数)番目まで値が入れられる配列」という意味になるので、実際には指定した要素数+1の数が配列内に入ります。
こちらもサンプルコードで確認してみましょう。
【サンプルコード】
Sub sampleArray()
' 配列の宣言と定義
Dim arr(3) As Integer
' 配列の要素の初期化
Dim num As Integer
Dim str As String
For num = 0 To 3
arr(num) = num
str = str & arr(num) & vbCrLf
Next num
MsgBox str, vbInformation
End Sub
まず最初に、Integer型の配列arrを宣言・定義しています。()内に3を指定したので、実際に入る要素数は4つです。
次に、For文を使用して4つの要素をそれぞれ初期化しています。「変数名(要素番号) = 値」と書くことで、指定した順番の箇所の値を変更することができます。
配列内の要素は0から順番に数えられるので、For文のカウント数も0から始まり3で終わるように指定しています。
変数のスコープについて解説
変数は、一度宣言しておくことで何度でも利用することができますが、使える場所には限りがあります。こうした、変数が使用できる有効範囲のことをスコープといいます。
例えば、これまで解説してきたサンプルコードでは、変数の宣言はすべてSubプロシージャ内(Sub〜End Subの中)で行ってきました。この場合、変数のスコープは宣言したプロシージャ内のみとなり、他のSubプロシージャ内では使用することができません。このような変数をプロシージャレベル変数といいます。
一方で、SubまたはFunctionプロシージャより先に変数を宣言することで、モジュール全体で変数が使用できるようになります。このような変数をモジュールレベル変数といいます。
【モジュールレベル変数の記述例】
Dim モジュールレベル変数名 As データ型
Sub sample1()
〜
End Sub
Sub sample2()
〜
End Sub
プロシージャレベル変数と同様に、モジュールレベル変数のスコープも宣言したモジュール内のみとなり、他のモジュールで使用することはできません。
特定のモジュールやプロシージャに限らず、プロジェクト全体で変数を使用したい場合には、Publicステートメントを使って宣言します。この変数をパブリック変数といいます。
【パブリック変数の記述例】
Public パブリック変数名 As データ型
Sub sample1()
〜
End Sub
Sub sample2()
〜
End Sub
様々なモジュールやプロシージャで変数を共有して使えることは便利な面も多いですが、使用できる範囲が広ければ広いほど、予期せず変数の値が書き換えられてしまうなどの危険性も高まります。
どうしても必要な場面を除いて、変数はなるべく狭いスコープで使用することをおすすめします。
まとめ
ここまで変数について詳しく解説してきましたが、いかがでしたでしょうか?
VBAに限らず、プログラミングをする上で変数は重要な要素となってきます。基本や使い方についてしっかりと押さえ、作業を効率化させていきましょう!
関連記事
- VBAとは
- Excelで覚えておくべき17の基本関数と目的別逆引き一覧
- オートフィルターの設定・解除方法
- メッセージボックスの設定方法
- セルの値を取得・上書きするValueプロパティの使い方を解説
- 【Excel VBA】Functionの使い方を解説(宣言・引数、戻り値の指定、応用法)
VBAの勉強方法は?
書籍やインターネットで学習する方法があります。昨今では、YouTubeなどの動画サイトやエンジニアのコミュニティサイトなども充実していて多くの情報が手に入ります。
そして、より効率的に知識・スキルを習得するには、知識をつけながら実際に手を動かしてみるなど、インプットとアウトプットを繰り返していくことが重要です。特に独学の場合は、有識者に質問ができたりフィードバックをもらえるような環境があると、理解度が深まるでしょう。
ただ、VBAに限らず、ITスキルを身につける際、どうしても課題にぶつかってしまうことはありますよね。特に独学だと、わからない部分をプロに質問できる機会を確保しにくく、モチベーションが続きにくいという側面があります。独学でモチベーションを維持する自信がない人にはプログラミングスクールという手もあります。費用は掛かりますが、その分スキルを身につけやすいです。しっかりと知識・スキルを習得して実践に活かしたいという人はプログラミングスクールがおすすめです。
プログラミングスクールならテックマニアがおすすめ!
ITスキル需要の高まりとともにプログラミングスクールも増えました。しかし、どのスクールに通うべきか迷ってしまう人もいるでしょう。そんな方にはテックマニアをおすすめします!これまで多くのITエンジニアを育成・輩出してきたテックマニアでもプログラミングスクールを開講しています。
<テックマニアの特徴>
・たしかな育成実績と親身な教育 ~セカンドキャリアを全力支援~
・講師が現役エンジニア ~“本当”の開発ノウハウを直に学べる~
・専属講師が学習を徹底サポート ~「わからない」を徹底解決~
・実務ベースでスキルを習得 ~実践的な凝縮カリキュラム~
このような特徴を持つテックマニアはITエンジニアのスタートラインとして最適です。
話を聞きたい・詳しく知りたいという方はこちらからお気軽にお問い合わせください。