VBA変数の宣言と割り当て

前の2つのチュートリアルでは、VBAでの変数の宣言と割り当てまたは基本ステートメントについて簡単に説明しました。 変数の宣言と割り当ては通常、VBAプロシージャの開始または最も基本的な部分です。 VBAの開発過程では、適切な宣言方式と正しい割り当てのプロシージャが、正確で効率的なコードを作成するための基盤となります。

このチュートリアルでは、VBAの宣言と基本的な構文を説明し、複数のデータ型の割り当て方法を説明します。 この記事を勉強した後、基本的なVBAコードを書いてみましょう。

変数の宣言とは何ですか?

VBA変数の記事で変数はデータを格納するVBAコード構造であることを説明しました。コードでは、変数が表される値は変数名によって取得されます。変数の宣言は、VBAに変数の名前と格納された値のデータ型を伝えることです。

VBA変数の宣言には4種類の変数があります。それらは次のとおりです。

  • 基本型の変数。基本型の変数は、数値、テキスト、日付などの単一のデータを格納する変数です。
  • バリアント型の変数。バリアント型の変数とはVariant型の変数のことです。Variant型変数は、プログラムの実行中に割り当てられた値に従って自動的に指定されます。
  • 文字列。文字列には多くの変数が含まれています。
  • オブジェクト。オブジェクトにはプロパティとメソッドが含まれています。

宣言ステートメントの基本構文

4種類の変数の宣言方法は大体同じです。 構文は次のとおりです。

基本型の変数

'文法
Dim [変数名] As [データ型]
'実例
Dim name As String
Dim age As Integer
Dim height As Double
Dim birthday As Date

バリアント型の変数

Variant型の変数を宣言する時に、データ型を無視すると、デフォルトの場合はVariant型になるため、次の2つの方法は同じです。

'文法
Dim [変数名] As Variant
Dim [変数名]
'実例
Dim message As Variant
Dim message

文字列

'文法
'固定の文字数を宣言する
Dim [変数名](開始位置 to 終了位置) As [データ型]
'動的な文字列を宣言する
Dim [変数名]() As [データ型]
'実例
'10個の文字列型要素が含む文字列を宣言する
Dim names(1 to 10) As String
'長さが未知の文字列を宣言する
Dim names() As String

文字列の宣言と割り当てについては、文字列の章で詳しく説明します。

オブジェクト

オブジェクトを宣言する時、一般的には2つの方法があります。 1つは事前バインディングです。つまり、オブジェクトの形式を最初に指定します。もう1つは遅延バインディングです。つまり、宣言する時にオブジェクト型を指定せず、オブジェクト型は後で指定します。

'文法
'事前バインディング宣言の構文
Dim [変数名] As [オブジェクト型]
'遅延バインディング宣言の構文
Dim [変数名] As Object
'実例
Dim sh As Worksheet
Dim car As Object

オブジェクトの宣言と割り当てについては、オブジェクトの章で詳しく説明します。

どこで宣言ステートメントを書きますか?

変数を宣言するということは、変数を使用する前に、変数の名前とデータ型をVBAに伝えることを意味します。そのため、変数の宣言ステートメントは、変数を使用するステートメントの前に記述する必要があります。

間違う書き方

宣言ステートメントの前に変数を使用すると、VBAは「変数が定義されていません」というエラーを報告します。

正確な書き方

Dim name As String
name = "本田"

同じ形式の変数を複数で宣言する方法

上記の部分を勉強すると、同じ形式の変数に対して複数の宣言ステートメントを作成する場合、次のように作成する可能性があります。

'二つの整数型、i、j変数を宣言します
Dim i,j As Integer

上記の書き方について、文法が正しいために、エラーが報告しませんが、このような書き方で変数を宣言すると、Integer型はただ2番目のj変数のデータ型とします。1番目の変数、つまりi変数のデータ型はInteger型ではなく、Variant型です。

そのため、VBAで宣言ステートメントを組み合わせることができません。 正しい宣言のやり方は次のとおりです。

'1つの書き方は2行に分けて書きます
Dim i As Integer
Dim j As Integer
'もう一つの書き方は、「:」記号を使用して、1行の範囲で書きます
Dim i As Integer : Dim j As Integer

変数の宣言は必須ですか?

正確に言うと、VBAで変数の宣言は必須ではありません。つまり、変数を宣言せずに実行してもエラーはありません。

ただし、変数を宣言しないことは悪習であり、エラーもよく発生します。これは前のチュートリアルで変数の宣言が必須であるかどうかことに言及されていない理由です。

変数を宣言しないことの典型的な欠点は次のとおりです。

  • データ型は自動的にバリアント型に設定されます。効率が低いです。
  • 変数名が間違っても、エラーは表示されません。
  • VBAコードの自動補完機能は使用できません。
  • データ型が一致しない場合、エラーは表示されません。

上記の理由に基づいて、変数を使用するたびに、変数名とデータ型を宣言することを強くお勧めします。

VBAには、変数の宣言を強制するオプションがあります。つまり、モジュールの上部に次のステートメントを入力します。

Option Explicit

モジュールに上記のステートメントが記述される場合、変数を宣言せずに変数を直接使用すると、VBAは「変数が定義されていません」というエラーを表示します。これはコードのチェックに対して便利です。

VBAエディターの変数宣言オプションを設定する場合、手動で記述しなく、各モジュールにOption Explicitステートメントを自動的に挿入できます。 設定方法は以下のとおりです。

「VBAエディター」で「ツール」-「オプション」順にクリックし、オプションメニューで「変数の宣言を強制する」をチェックします。

基本型変数の割り当て

基本型変数は、数値、テキスト、日付などの単一の値を格納する変数です。

VBAで、基本型変数に値を割り当てるには、Letキーワードから始めます。 この割り当て操作は、”=”の左側の変数を”=”の右側のデータが表す値に指定します。後のコードでは、変数は指定されたデータを表します。

実際の開発過程では、基本型変数に値を割り当てる時に、Letキーワードを無視して、変数の先頭に直接割り当てステートメントを書き込むことができます。

基本型の変数を割り当てるための構文は次のとおりです。

'文法、両方の書き方は同じです
Let [変数名] = [データ]
[変数名] = [データ]
'実例
Dim name As String
Let name = "本田"
Dim age As Integer
Let age = 30
Dim birthday As Date
Let birthday = #2000-1-1#

割り当てステートメントで、”=”の右側は、他の変数、関数、及び複雑な条件式が含まれます。 条件式によって返される値の形式が変数型と一致している場合には値が正常に割り当てられます。

Dim birthday As Date
Dim age As Integer
birthday = #2000-1-1#
age = Year(Now) - Year(birthday)

特殊な場合は、”=”の右側が変数の自体です。この書き方は、主に反復構造で使用されます。

Dim i As Integer
Do While i < 10 Msgbox i i = i + 1 Loop '返す値 => 0,1,2,3,4,5,6,7,8,9

バリアント型の変数の割り当て

バリアント型は通用型であることがわかっているため、割り当ては簡単で、形式の必須要件はありません。バリアント型の変数が一回目の割り当てられた後、他のデータ型を引き続き割り当てることができます。

'変数を宣言します(両方は同じです)
Dim message As Variant
Dim message
'割り当て
message = "Hello World"
message = 1234567890
message = #2018-12-1#

バリアント型変数は通用型で便利ですが、多くの欠点もあることを強調しておきます。そのため、実際の開発過程では、バリアント型を使用するばかりではなく、正確な形式の変数を使用することをお勧めします。

文字列型の変数の割り当て

文字列は、同じ形式の要素を複数で格納できるデータ型です。 通常、宣言する時にデータの長さを指定します。 文字列に値を割り当てるときに、通常、各要素の番号が使用されます。

文字列に値を割り当ての基本構文は次のとおりです。

[文字列名](要素番号) = [データ]

次には実例を見てください。

'文字列を宣言します。
Dim arr(1 to 5) As String
'文字列に値を割り当て
arr(1) = "本田"
arr(2) = "渡辺"
arr(3) = "染谷"

上記は、文字列の基本的な割り当て方法です。文字列の宣言と割り当て方法については、「文字列」の章で詳しく説明します。

オブジェクト型の変数の割り当て

VBAでは、オブジェクトはプログラムの要素であり、基本型のデータとは異なり、複数のプロパティとメソッドが含まれています。 例えば、Excelのワークブックワークシートセル、チャートなどはすべてオブジェクトです。

Let(無視可能)キーワードを使用する基本型変数とは異なり、オブジェクト型変数を割り当てる場合、オブジェクトはSetキーワードを使用しなければならないです。Setキーワードは無視できません。

オブジェクト型の変数の基本的な割り当て方法は次のとおりです。

Set [変数名] = [オブジェクト型のデータ]

次には実際の使い方を見てください。

'ワークシート型のオブジェクトを宣言します
Dim sheet As Worksheet
'「売上報告」という名前のワークシートをシート変数に割り当てます
Set sheet = Worksheets("売上報告")

オブジェクトには複数のプロパティを含めることができるため、VBAは複数のプロパティに同時に値を割り当てる簡単な方法を提供します。 具体的な方法は、With +オブジェクトとEnd Withキーワードの間にオブジェクトの複数のプロパティ割り当てステートメントを記述することです。

Dim sheet As Worksheet
Set sheet = Worksheets("売上報告")
With sheet
.Name = "古い売り上げ"
.Visible = False
End With

オブジェクトの宣言と割り当て方法については、オブジェクトの章で詳しく説明します。

まとめ

上記は、VBAでの最も基本的な変数の宣言と割り当ての方法です。変数の宣言と割り当てはコードの開始であり、マスターする必要があります。

さまざまな変数型、宣言、および割り当て方法を簡単に説明しました。上記の解説を加えて、さまざまな変数型には独自の特性があります。変数型の特性については、今後のチュートリアルで詳しく説明します。

変数の宣言と割り当てについては、他のいつかのポイントがあります。例えば、関連するエラーやローカル変数とグローバル変数など、この部分は次のチュートリアルで個別に詳しく説明します。

コメントを残す

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