【VBA】配列を初期化して再定義する方法|基本と応用テクニック

この記事では、VBA(Visual Basic for Applications)で配列を初期化および再定義する方法について、詳細に解説します。

目次

配列の初期化とは何か

配列の初期化とは、プログラミングにおいて非常に基本的な操作の一つです。具体的には、配列に格納されているデータをリセットすることを指します。このリセットには大きく分けて2つの方法があります。

  1. 配列に入っている要素だけを初期化する(数値は全て0、文字列は長さ0の文字列など)
  2. 配列の要素と、配列に格納できる要素数をともに初期化する

それぞれの方法には特有の手法がありますので、以下で一つ一つ丁寧に説明します。

配列の初期化方法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

処理の流れ

  1. Dimステートメントで静的配列myStaticArrayを定義します。
  2. 配列の各要素に値(10, 20, 30)を代入します。
  3. 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

処理の流れ

  1. Dimステートメントで動的配列myDynamicArrayを定義します。
  2. ReDimステートメントで配列の要素数を設定します。
  3. 配列の各要素に値(10, 20, 30)を代入します。
  4. Eraseステートメントを使用して配列の要素とメモリを初期化します。この操作後、配列はメモリから解放されます。

サンプルコード3:動的配列をArray()ステートメントで初期化する

Sub InitializeArrayWithArrayStatement()
    Dim myArray() As Variant
    myArray = Array(1, 2, 3)
    
    ' Array()ステートメントで配列を初期化
    myArray = Array()
    
    ' この時点でmyArrayの要素数は0になります。
End Sub

処理の流れ

  1. Dimステートメントで動的配列myArrayを定義します。
  2. Array()ステートメントで配列の要素に値(1, 2, 3)を代入します。
  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キーを押下すると練習を始められます。

下のスタートボタンを押して練習モードに入ります。
STARTSTOP
※入力モード切り替え ctrl + shift + alt + space
PRE
NEXT
現在の問題をリストから除外
除外したリストをリセット
現在の除外状況のURL取得
コピー
ガイドモード
リピートモード

※推奨ブラウザ Google Chrome

PUSH ENTER
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次