-
∨目次
- 変数を宣言する
- 値を代入する
- 値を取得する
- オブジェクトを代入する
- 変数のスコープ
- 変数の宣言を強制する
VBA 変数
はじめに
Excel VBA マクロの変数の使い方を紹介します。
変数の型を決めたらそれに合った値を代入して、いつでも取得できます。値を保存するイメージです。
初期化や初期値を設定する方法も紹介します。
-
目次
- 変数を宣言する
- 値を代入する
- 値を取得する
- オブジェクトを代入する
- 変数のスコープ
- 変数の宣言を強制する
変数を宣言する
Dim 変数名 As 型名のように入力します。Dim が変数を宣言するキーワードです。宣言とは変数を作成することです。
Dim 変数 As String
Dim tips As Integer
通常は関数の中に変数を宣言します。そうすると、その関数だけで使用できます。別の関数からは参照できません。
Sub 実行1()
Dim 変数 As String
End Sub
Sub 実行2()
Dim 変数 As String ' 実行1 の変数とは別の変数です
End Sub
関数の外に宣言する方法については下記の「変数のスコープ」をご覧ください。
変数はとてもよく使います。値を直接入力するのではなく、一旦変数に入れてから使用するのが一般的です。
- 変数の名前に使用できない文字があります。詳しくは「名前付け規則」をご覧ください。
値を代入する
変数に値を入れることを「代入」すると言います。
変数名 = 値のように入力します。
Dim tips As Integer
tips = 10 ' tips は 10 になる
変数の値は何度も変更できます。このため「変数」と言います。
Dim tips As Integer
tips = 10 ' tips は 10 になる
tips = 20 ' tips は 20 になる
- 値を変更できない変数のことを「定数」と言います。詳しくは「定数」をご覧ください。
変数の初期化
変数の宣言と初期化を 1 行ではできません。2 行に分ける必要があります。
Dim 変数 As Integer = 10 ' これはできません。
Dim 変数 As Integer ' 2 行に分ける必要がある
変数 = 10
変数の型
変数の型によって代入できる値が決まっています。数値や文字列や日付など、代入する値によって変数の型を決めます。
数値を扱うなら Integer を使用します。Integer は数値専用で、それ以外の文字列などは代入できません。文字列を代入するとエラーになります。
Dim 数値型 As Integer
数値型 = 10 ' 数値なので代入できる
数値型 = "あいう" ' 文字なのでエラー
文字列を扱うなら String を使用します。
Dim 文字列型 As String
文字列型 = "あいう"
文字列型 = "10" ' 数字の 10 なので文字列にも代入できる
このように変数に設定する値によって、型を決める必要があります。
- 型について詳しくは「データ型」をご覧ください。
スポンサーリンク
値を取得する
変数の値を取得するには変数名のように、そのまま変数名を入力します。値を入力するところに変数名を入力すると、その変数の値が使用されます。
Dim tips As Integer
tips = 10
Dim found As Integer
found = tips
' found = 10 と同じ
関数の引数に変数の値を渡すときも同様に関数名(変数名)のように入力します。
Dim tips As Integer
tips = 10
Debug.Print(tips)
' Debug.Print(10) と同じ
変数に値を設定する前の初期値は、Integer などの数値型では 0、String では空文字になっています。ただし値を設定する前に取得するのはバグです。必ず変数を宣言した直後に値を設定するようにします。
オブジェクトを代入する
型の中には Object 型 (参照型) というものがあります。Sheet1 などのワークシートのように、クラスで作成されたものがオブジェクトです。
Set 変数名 = 値のように、オブジェクト型を代入するには頭に Set を付ける必要があります。
Dim 変数1 As Object
Set 変数1 = Range("A1") ' Object 型は Set を付けて代入する
Dim 変数2 As Object
変数2 = Range("A1") ' エラー、Set がない
Set を忘れると「エラー 91 オブジェクト変数または With ブロック変数が設定されていません。」が発生するので注意します。
オブジェクトを扱うときの特徴としてオブジェクト.関数やオブジェクト.プロパティのように入力します。そういうものを変数に代入するときは Set を付けるのを忘れないようにします。
変数のスコープ
関数の中に宣言した変数は、その関数でしか使えません。その関数を抜けると変数の値は消えます。
他の関数から変数を参照するには、関数の外にPrivate 変数名 As 型名のように Private で宣言します。シートや標準モジュールに変数を宣言するので、それが無くならない限り変数の値は消えません。
Private プライベート変数 As Integer
Sub 実行()
Call サブ ' 1
Call サブ ' 2
End Sub
Sub サブ()
プライベート変数 = プライベート変数 + 1
Debug.Print(プライベート変数)
End Sub
別ファイルから変数を参照するにはPublic 変数名 As 型名のように Public で宣言します。
ファイル名.変数名のように、変数の前にそのファイル名を入力して参照できます。標準モジュールの変数は、ファイル名を付けなくても参照できます。
Sheet1 のコード
Public パブリックシート変数 As Integer
Sub 実行サブ()
Module1.パブリック標準変数 = 10 ' 標準モジュールの変数を参照する
パブリック標準変数 = 10 ' 標準モジュールの変数は、変数名だけでも参照できる
End Sub
標準モジュール1 のコード
Public パブリック標準変数 As Integer
Sub 実行モジュール()
Sheet1.パブリックシート変数 = 10 ' Sheet1 の変数を参照する
End Sub
- 詳しくは「スコープ」をご覧ください。
変数の宣言を強制する
変数は宣言しなくても使えます。ただし入力ミスで tips が tlps になっていても気づかないで実行されるのでバグの原因になります。
Dim tips As Integer
tips = 10
tlps = 20 ' tlps になっていても気づかずに実行されてしまう
tips = 30
VBA の初期設定では変数を宣言しなくても使える状態です。必ず変数の宣言を強制するのをオススメします。
VBE の [ツール] から [オプション] をクリックします。

[変数の宣言を強制する] をチェックして [OK] をクリックします。

この後に新しいコードを表示すると、コードの先頭にOption Explicitが追加されます。この一行があると、このファイルのコードで変数の宣言が強制されます。既存のコードに勝手に追加されたりはしないので、そのときは手入力します。
Option Explicitの一行を削除すると強制されなくなります。上記の設定はこの一行を追加する設定です。

宣言していない変数を使用していると、実行時に「エラー 変数が定義されていません。」が発生してわかるようになります。

スポンサーリンク