25 September, 2020

Excel VBAプログラミングチュートリアル:変数宣言、定義、操作

Excel VBAで様々な変数を宣言、初期化、操作する方法は次のとおりです。

普通、プログラミングでは、変数は使用する前に宣言と定義を実行する必要があります。コンピューターに変数を使用することを分かるように宣言を実行します。定義は変数の内容を特定の値として指定することです。 Excel VBAにもこれらの手順があります。次には例を挙げます。

変数の宣言と初期化

Excel VBAの変数宣言では、2つのキーワードDimとAsを使用して、それぞれ変数名とデータ型を指定します。次は整数型の変数xを宣言する例です。

Dim x As Integer

これより変数xが作成されますが、現時点では変数にはデータが何も格納されていません。変数の初期値を設定する場合は、変数を定義する必要があります。変数を定義するための構文は単純で、ただイコール記号を使用します。

x = 5

これより、変数xを5に指定されます。後はこの変数を使えます。

Range("A1").Value = x

次には浮動小数点型の例です。

Dim x As Double
x = 5.5
MsgBox "value is " & x

ブール型:

Dim x As Boolean
x = True
MsgBox "value is " & x

文字列型:

Dim x As String
x = "Florian"
MsgBox "My name is " & x

Excel VBAには様々な変数があります。すべての変数の型を知りたい場合は、MSDNホームページをご覧ください。

バリアント型:

上記で紹介した変数は普通の型であり、VBAの特別なバリアント型変数はデータを格納できます。Variantと呼ばれ、使用方法は他の変数型と似ています。

Dim x As Variant
x = "Florian"
MsgBox "My name is " & x
x = 123
MsgBox "The value is " & x

バリアント型変数に宣言されると、何でも格納できます。

変数を宣言時に型を指定しない場合は、VBAがバリアント型にプリセットされるため、書き方が異なるが、結果は同じです。

Dim x As Variant
Dim x 'は Variantにプリセットされます。

バリアント型の変数は、通常、Excelセルからユーザーが入力したデータを読み取るために使用できます。ユーザーが入力したデータは違うため、任意の型である可能性が高いです。そのため、バリアント型で格納する方がいいです。

Variantはすごく便利ですが、デメリットと言えば、マクロの実行性能はうまくないです。一般的に必要がなければ、固定の変数型を使用してください。

宣言されていない変数

Excel VBAでは、ユーザーが変数宣言を省略できるため、変数を宣言せずに直接定義できます。

MyVar = 35

宣言されていない変数はバリアント型にプリセットされます。

変数を宣言せずに使用できるとすごく便利ですが、変数をはっきり宣言すると、マクロがうまく実行できます。入力ミスを避けるため、プログラムを記述する時に変数宣言をちゃんとしてください。 プログラムの作成時に宣言なしで誤って変数を使用しない、または変数を宣言したが、入力ミスが発生する場合は、コードの先頭に次のコードを追加できます。

Option Explicit ' 変数の宣言を強制する
Sub Hello()
Dim MyVar As Integer
MyVar = 10
MyInt = 10 ' 未宣言
End Sub

これより、変数が未宣言の場合はエラーメッセージが表示されます。

変数が未宣言エラー

変数の適用範囲

一般的なSubプロシージャで宣言した変数の適用範囲はSubプロシージャに限り、区域変数です。

Sub Hello1()
Dim MyVar As Integer
MyVar = 12
MsgBox MyVar
End Sub

Sub Hello2()
Dim MyVar As Integer
MyVar = 34
MsgBox MyVar
End Sub
区域変数

変数をモジュール全体のプロシージャで使用する場合は、プロシージャの外部で変数を宣言でき、モジュールレベルの変数を作成します。

Dim MyVar As Integer

Sub Hello1()
  MyVar = 12
  MsgBox MyVar
End Sub

Sub Hello2()
  MsgBox MyVar
End Sub

これより、Hello1を実行した後、Hello2を実行すると、Hello1に設定されているそのMyVar変数の値がHello1に設定されている12です。

モジュールレベルの変数

プログラムが複雑な場合に、複数のモジュールが存在する可能性があります。通常、モジュールレベルの変数は属するモジュールのみアクセスできます。他のモジュールにもアクセスできるために、変数をパブリック変数(public)として宣言する必要があります。やり方はDimをPublicに変更すればいいです。 例えば、プログラムにModule1とModule2の2つのモジュールがあり、MyVar変数をModule1で宣言し、Module2でも使用できるようにすると、Module1は次のようになります。

Public MyVar As Integer

Sub Hello1()
MyVar = 12
MsgBox MyVar
End Sub

Module2 は:

Sub Hello2()
MsgBox MyVar
End Sub

定数

変数の内容をプログラムの実行中に固定し、誤って変更しないようにするには、この固定変数をConstに追加して、定数を宣言します。次に例を示します。

Const MyInteger As Integer = 42

これより、整数のMyIntegerは定数になり、変更できません。

各種類の変数を定数として宣言することができ、使用方法は似てます。

Const myDate As Date = #2/2/2020#
Const myDay As String = "Sunday"

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です