この記事では、VBA(Visual Basic for Applications)で使用されるReDim
ステートメントについて、基本から応用まで徹底的に解説します。ReDim
は、動的配列の要素数を柔軟に変更するための非常に重要なステートメントです。この記事を最後まで読むことで、ReDim
の使い方を理解し、より効率的なプログラミングができるようになるでしょう。
ReDimステートメントの基本
ReDimの重要性と役割
ReDim
ステートメントは、動的配列の要素数を変更するために使用されます。静的配列とは異なり、動的配列では要素数をプログラムが実行されている最中にも変更することが可能です。これは、データの量が実行時に変わるような場合に非常に便利です。
基本的な書き方と構文
ReDim
の基本的な書き方は以下の通りです。
ReDim [Preserve] 配列名(添字) [As 型]
Preserve
:このキーワードを使用すると、要素数を変更しても配列の既存の値が保持されます。配列名
:要素数を変更する配列の名前です。添字
:新しい要素数を指定します。As 型
:オプションで、新しいデータ型を指定できます。
Preserveキーワードの詳細
Preserve
キーワードを使用すると、要素数を変更しても配列の既存の値が保持されます。ただし、Preserve
を使用する場合、変更できるのは配列の最後の次元の要素数のみです。
初期化される値について
配列変数がReDim
で初期化される際には、データ型に応じて以下のような値に初期化されます。
- 数値変数:0
- 可変長文字列:空文字列(“”)
- 固定長文字列:vbNullChar(文字コード0)
- ブール変数:False
- バリアント型変数:Empty値
ReDimの応用テクニック
要素数と次元数の変更
ReDim
を使用すると、次元も要素数も変更することができます。具体的な例は以下の通りです。
' 2次元配列を1次元配列に変更
ReDim MyArray(10, 10)
ReDim MyArray(10)
Preserveの制限と注意点
Preserve
を使用する場合、最後の次元以外のサイズを変更するとエラーが発生します。例えば、以下のようなコードはエラーになります。
ReDim Preserve MyArray(11, 10)
Variant型での特例
Variant
型の変数を配列として使用する場合、添字の下限も変更可能です。
Dim myArray 'Variant変数
ReDim myArray(0 To 10, 0 To 10)
ReDim Preserve myArray(0 To 10, 1 To 11)
サンプルプログラムと使用例
基本的な使用例
以下は、ReDim
とPreserve
を使用した基本的なサンプルプログラムです。
Sub ReDimBasicSample()
Dim MyArray() As Integer
ReDim MyArray(1 To 5)
Dim i As Integer
For i = 1 To 5
MyArray(i) = i * 10
Next i
' 要素数を変更(Preserveを使用)
ReDim Preserve MyArray(1 To 10)
For i = 6 To 10
MyArray(i) = i * 10
Next i
' 結果を出力
For i = 1 To 10
Debug.Print MyArray(i)
Next i
End Sub
複数次元配列での使用例
ReDim
は複数次元配列にも使用できます。以下はその例です。
Sub ReDimMultiDimensionSample()
Dim MyArray() As Integer
ReDim MyArray(1 To 5, 1 To 5)
Dim i As Integer, j As Integer
For i = 1 To 5
For j = 1 To 5
MyArray(i, j) = i * j
Next j
Next i
' 要素数を変更(Preserveを使用)
ReDim Preserve MyArray(1 To 5, 1 To 10)
For i = 1 To 5
For j = 6 To 10
MyArray(i, j) = i * j
Next j
Next i
' 結果を出力
For i = 1 To 5
For j = 1 To 10
Debug.Print MyArray(i, j)
Next j
Next i
End Sub
ReDimに関するFAQ
Q:ReDimとは何ですか?
A:ReDim(Re-Dimension)は、VBA(Visual Basic for Applications)で使用されるステートメントの一つです。このステートメントは、動的配列の要素数を変更するために使用されます。静的配列とは異なり、動的配列では要素数をプログラムが実行されている最中にも変更することが可能です。
Q:Preserveキーワードは何ですか?
A:Preserve
キーワードは、ReDim
ステートメントと一緒に使用することで、配列の要素数を変更しても既存のデータを保持することができます。ただし、このキーワードを使用する場合、配列の最後の次元の要素数のみを変更することができます。
Q:ReDimで次元数を変更できますか?
A:はい、ReDim
を使用すると、配列の次元数も変更することが可能です。ただし、Preserve
キーワードを使用している場合、次元数を変更することはできません。
Q:ReDimでデータ型を変更できますか?
A:いいえ、ReDim
ステートメントではデータ型を変更することはできません。データ型を変更する必要がある場合は、新しい配列を作成してデータをコピーする必要があります。
Q:ReDimはどのデータ型に使用できますか?
A:ReDim
は数値、文字列、ブール値、オブジェクト、Variantなど、ほとんどのデータ型に使用することができます。ただし、固定長の文字列やユーザー定義型には使用できません。
Q:ReDimでエラーが出る場合の対処法は?
A:ReDim
でよく発生するエラーには、次元数の不一致やPreserve
キーワードの誤用などがあります。エラーメッセージをよく読み、コードを修正することが重要です。
Q:ReDimとDimの違いは何ですか?
A:Dim
は変数や配列を宣言する際に使用されますが、ReDim
は既に宣言された動的配列の要素数を変更するために使用されます。Dim
で宣言した後、ReDim
で要素数を変更することが一般的です。
Q:ReDimはループの中で使用できますか?
A:はい、ReDim
はループの中で使用することができます。ただし、ループの中で頻繁にReDim
を使用すると、パフォーマンスに影響を与える可能性があります。
Q:ReDimで配列を縮小するとどうなりますか?
A:ReDim
で配列を縮小すると、超過した要素は切り捨てられます。Preserve
キーワードを使用している場合でも、縮小した部分のデータは失われます。
関連動画
まとめ
この記事では、ReDim
ステートメントの基本から応用までを解説しました。ReDim
は、動的配列を効率よく扱うために必要なステートメントです。特にPreserve
キーワードの使用方法や、Variant
型での特例など、理解しておくと非常に便利です。この知識を活かして、より高度なVBAプログラミングに挑戦してみてください。
Excelのショートカットキーの練習
当サイトはショートカットキーの練習を実際の動きを確認しながら練習できる機能がついています。繰り返し指を動かして練習ができるので、ゲーム感覚で遊んでいくうちに自然とショートカットキーが使えるようになれます。ショートカットキーは暗記するよりも実際に手を動かして練習していったほうが習得が早くなるので、是非当サイトをブックマークに登録し定期的に練習してみてください。下記のSTARTキーを押下すると練習を始められます。
※推奨ブラウザ Google Chrome