この記事では、VBA(Visual Basic for Applications)で配列を初期化および再定義する方法について、詳細に解説します。
配列の初期化とは何か
配列の初期化とは、プログラミングにおいて非常に基本的な操作の一つです。具体的には、配列に格納されているデータをリセットすることを指します。このリセットには大きく分けて2つの方法があります。
- 配列に入っている要素だけを初期化する(数値は全て0、文字列は長さ0の文字列など)
- 配列の要素と、配列に格納できる要素数をともに初期化する
それぞれの方法には特有の手法がありますので、以下で一つ一つ丁寧に説明します。
配列の初期化方法1:Eraseステートメント
Erase
ステートメントは、配列の要素を初期化するための基本的な方法です。このステートメントの使用方法は配列の種類によって異なります。
静的配列: 要素数が固定されている配列(静的配列)に対しては、Erase
を使用すると、配列の要素は0や空文字列で置き換えられます。ただし、配列の要素数自体は変更されません。
Sub Erase_StaticArray()
Dim myStaticArray(2) As Integer
myStaticArray(0) = 1
myStaticArray(1) = 2
myStaticArray(2) = 3
Erase myStaticArray
' この時点でmyStaticArrayの全要素は0になります。
End Sub
動的配列: 要素数が可変の配列(動的配列)に対しては、Erase
を使用すると、配列の要素とメモリ上の領域も一緒に解放されます。
Sub Erase_DynamicArray()
Dim myDynamicArray() As Integer
ReDim myDynamicArray(2)
myDynamicArray(0) = 1
myDynamicArray(1) = 2
myDynamicArray(2) = 3
Erase myDynamicArray
' この時点でmyDynamicArrayは解放されます。
End Sub
配列の初期化方法2:Array()ステートメント(動的配列のみ)
動的配列に対しては、Array()
ステートメントを使用して初期化することも可能です。静的配列では使用できません。
Sub Array_Sample()
Dim myArray() As Variant
myArray = Array(100, 200, 300)
MsgBox UBound(myArray) - LBound(myArray) + 1 ' 要素数は3
myArray = Array()
MsgBox UBound(myArray) - LBound(myArray) + 1 ' 要素数は0
End Sub
このプログラムでは、Array()
ステートメントを用いて動的配列myArray
を初期化しています。Array()
に何も引数を渡さないことで、配列の要素数が0になります。
配列の再定義と注意点
配列の要素数を変更する場面も多くあります。その際に使用するのがReDim
ステートメントです。ただし、このステートメントを使うと、配列の要素が全て初期化されてしまう場合があります。
ReDimステートメント
ReDim
ステートメントを使用すると、動的配列の要素数を変更できます。ただし、この操作によって配列の既存の要素は失われます。
Sub ReDim_Sample()
Dim myArray() As Variant
myArray = Array(100, 200, 300)
ReDim myArray(4)
MsgBox UBound(myArray) - LBound(myArray) + 1 ' 要素数は5
End Sub
ReDim Preserveステートメント
要素を保持したまま配列のサイズを変更する場合は、ReDim Preserve
ステートメントを使用します。
Sub ReDim_Preserve_Sample()
Dim myArray() As Variant
myArray = Array(100, 200, 300)
ReDim Preserve myArray(4)
MsgBox UBound(myArray) - LBound(myArray) + 1 ' 要素数は5
MsgBox myArray(0) ' 100が表示される
End Sub
このプログラムでは、ReDim Preserve
を用いて配列myArray
の要素数を変更しています。Preserve
キーワードがあるため、既存の要素(この場合はmyArray(0)
の100)は保持されます。
サンプルコード
サンプルコード1:静的配列の要素を初期化する
Sub InitializeStaticArray()
Dim myStaticArray(2) As Integer
myStaticArray(0) = 10
myStaticArray(1) = 20
myStaticArray(2) = 30
' Eraseステートメントで配列の要素を初期化
Erase myStaticArray
' この時点でmyStaticArrayの全要素は0になります。
End Sub
処理の流れ
Dim
ステートメントで静的配列myStaticArray
を定義します。- 配列の各要素に値(10, 20, 30)を代入します。
Erase
ステートメントを使用して配列の要素を初期化します。この操作後、配列の全要素は0になります。
サンプルコード2:動的配列の要素とメモリを初期化する
Sub InitializeDynamicArray()
Dim myDynamicArray() As Integer
ReDim myDynamicArray(2)
myDynamicArray(0) = 10
myDynamicArray(1) = 20
myDynamicArray(2) = 30
' Eraseステートメントで配列の要素とメモリを初期化
Erase myDynamicArray
' この時点でmyDynamicArrayはメモリから解放されます。
End Sub
処理の流れ
Dim
ステートメントで動的配列myDynamicArray
を定義します。ReDim
ステートメントで配列の要素数を設定します。- 配列の各要素に値(10, 20, 30)を代入します。
Erase
ステートメントを使用して配列の要素とメモリを初期化します。この操作後、配列はメモリから解放されます。
サンプルコード3:動的配列をArray()ステートメントで初期化する
Sub InitializeArrayWithArrayStatement()
Dim myArray() As Variant
myArray = Array(1, 2, 3)
' Array()ステートメントで配列を初期化
myArray = Array()
' この時点でmyArrayの要素数は0になります。
End Sub
処理の流れ
Dim
ステートメントで動的配列myArray
を定義します。Array()
ステートメントで配列の要素に値(1, 2, 3)を代入します。- 再度
Array()
ステートメントを使用して配列を初期化します。この操作後、配列の要素数は0になります。
VBA配列の初期化に関するFAQ
Q:配列の初期化とは何ですか?
A:配列の初期化とは、配列に格納されているデータをリセットする操作のことです。具体的には、数値型の配列であれば全ての要素を0に、文字列型の配列であれば全ての要素を空文字列にするなどの操作が含まれます。
Q:Erase
ステートメントとは何ですか?
A:Erase
ステートメントは、VBAで配列を初期化するための基本的な方法の一つです。このステートメントを使用すると、配列の要素が初期値にリセットされます。
Q:Erase
ステートメントで静的配列と動的配列はどう違いますか?
A:Erase
ステートメントを静的配列に使用すると、配列の要素だけが初期化されます。一方で、動的配列に使用すると、配列の要素だけでなく、配列自体もメモリから解放されます。
Q:Array()
ステートメントで配列を初期化する方法は?
A:Array()
ステートメントは、動的配列を初期化するためのもう一つの方法です。Array()
に何も引数を渡さないと、配列の要素数が0になります。
Q:ReDim
ステートメントで配列はどのように初期化されますか?
A:ReDim
ステートメントを使用すると、動的配列の要素数を変更することができます。ただし、この操作によって配列の既存の要素は失われます。
Q:ReDim Preserve
ステートメントは何ですか?
A:ReDim Preserve
ステートメントを使用すると、動的配列の要素数を変更しつつ、既存の要素を保持することができます。
Q:配列の初期化は必ず必要ですか?
A:配列の初期化が必要かどうかは、プログラムの要件に依存します。未初期化の配列を使用すると、予期せぬエラーや不具合が発生する可能性がありますので、通常は初期化が推奨されます。
Q:配列の初期化に失敗するとどうなりますか?
A:配列の初期化に失敗すると、プログラムが不安定になる可能性があります。具体的には、未初期化の配列要素を参照した場合、エラーが発生することが多いです。
Q:配列を初期化する際の一般的なエラーは何ですか?
A:配列を初期化する際によく見られるエラーには、配列が未定義である、または配列のサイズが不正であるといったものがあります。これらのエラーは、通常はコードの修正によって解消できます。
Q:配列の初期化と再定義は同じですか?
A:いいえ、配列の初期化と再定義は異なります。初期化は配列の要素をリセットする操作ですが、再定義は配列の要素数を変更する操作です。
関連動画
まとめ
VBAで配列を初期化および再定義する方法にはいくつかの手法があります。Erase
ステートメントやArray()
ステートメント、ReDim
ステートメントなど、用途に応じて適切な方法を選ぶことが重要です。この記事で紹介したテクニックをしっかりと理解し、より効率的なプログラミングを行いましょう。
Excelのショートカットキーの練習
当サイトはショートカットキーの練習を実際の動きを確認しながら練習できる機能がついています。繰り返し指を動かして練習ができるので、ゲーム感覚で遊んでいくうちに自然とショートカットキーが使えるようになれます。ショートカットキーは暗記するよりも実際に手を動かして練習していったほうが習得が早くなるので、是非当サイトをブックマークに登録し定期的に練習してみてください。下記のSTARTキーを押下すると練習を始められます。
※推奨ブラウザ Google Chrome