INDEX
ReDimの概要
動的配列管理 VBAの予約語 | ||
ReDim 概要 ReDim は、VBAの動的配列のサイズを変更するために使用されます。通常、配列のサイズは宣言時に固定されますが、ReDim を使うと実行時に変更できます。 わかりやすく説明 ReDim は、「この配列、あとからサイズを変えられるようにするよ!」という命令です。配列の要素数が実行時に決まる場合に便利です。 |
||
|
ReDimの基本的な使い方
ReDim を使って、実行時に配列のサイズを変更する基本的な例です。
Sub BasicReDimExample()
Dim numbers() As Integer ' 動的配列の宣言
ReDim numbers(1 To 5) ' 実行時にサイズを決定
' 配列にデータを代入
Dim i As Integer
For i = 1 To 5
numbers(i) = i * 10
Next i
' 結果を表示
For i = 1 To 5
Debug.Print numbers(i)
Next i
End Sub
解説:
- 動的配列として
Dim numbers()
を宣言。 ReDim numbers(1 To 5)
でサイズを設定。- 実行時にサイズを変更できるため、柔軟なデータ管理が可能。
ReDim Preserve でデータを保持する
ReDim Preserve を使うと、配列のサイズ変更時に既存データを保持できます。
Sub PreserveExample()
Dim numbers() As Integer
Dim i As Integer
' 最初のサイズを設定
ReDim numbers(1 To 3)
For i = 1 To 3
numbers(i) = i * 10
Next i
' サイズを拡張(既存データを保持)
ReDim Preserve numbers(1 To 5)
numbers(4) = 40
numbers(5) = 50
' 結果を表示
For i = 1 To 5
Debug.Print numbers(i)
Next i
End Sub
解説:
ReDim Preserve
を使うと、既存データを保持しながら配列のサイズを変更できる。- 新しい要素(4番目と5番目)を追加してデータを拡張可能。
ExcelでのReDimの活用例(セル範囲のデータを配列に格納)
Excelのワークシートデータを可変長の配列に格納し、処理する例です。
Sub StoreExcelData()
Dim arr() As String
Dim lastRow As Integer, i As Integer
' 最終行を取得
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
' 配列のサイズを可変に設定
ReDim arr(1 To lastRow)
' A列のデータを配列に格納
For i = 1 To lastRow
arr(i) = Cells(i, 1).Value
Next i
' 結果をデバッグウィンドウに表示
For i = 1 To lastRow
Debug.Print arr(i)
Next i
End Sub
解説:
- 最終行を取得し、その行数に応じた配列を作成。
- ワークシートのデータを動的配列に格納し、効率的に処理できる。
多次元配列のReDim Preserveの制限
多次元配列では、ReDim Preserve を使用する場合、最後の次元のみ 変更可能です。
Sub MultiDimPreserve()
Dim arr() As Integer
Dim i As Integer, j As Integer
' 2次元配列を初期化
ReDim arr(1 To 2, 1 To 3)
' データを格納
For i = 1 To 2
For j = 1 To 3
arr(i, j) = i * j
Next j
Next i
' 最後の次元のみ変更可能
ReDim Preserve arr(1 To 2, 1 To 5)
End Sub
解説:
- 多次元配列では、
ReDim Preserve
を使う場合、最後の次元しか変更できない。 ReDim Preserve arr(1 To 3, 1 To 3)
のように最初の次元を変更しようとするとエラーになる。
エラーを回避する方法
ReDim の使用時にエラーが発生しないように、適切なエラーハンドリングを追加します。
Sub SafeReDim()
Dim arr() As Integer
On Error Resume Next
' 初期化
ReDim arr(1 To 5)
' サイズ変更
ReDim Preserve arr(1 To 10)
If Err.Number <> 0 Then
MsgBox "エラー発生: " & Err.Description, vbExclamation, "エラー"
Err.Clear
End If
End Sub
解説:
- エラーが発生した場合、メッセージを表示し、処理を継続できるようにする。
- エラーハンドリングを追加することで、安全に ReDim を使用可能。
ReDimの注意事項
- ReDim は動的配列にのみ使用可能: 静的配列には適用できない。
- ReDim Preserve は最も内側の次元のみ変更可能: 多次元配列のサイズ変更には注意が必要。
- ReDim を繰り返すとパフォーマンスが低下: 配列のコピー処理が発生するため、大量データの場合は注意が必要。
よくある質問
- Q: ReDim を静的配列に使えますか?
- A: いいえ。ReDim は動的配列にのみ使用できます。
- Q: ReDim Preserve ですべての次元を変更できますか?
- A: いいえ。最も内側の次元(最後の次元)のみ変更できます。
- Q: 配列のデータを保持せずにサイズ変更できますか?
- A: はい。単に
ReDim
を使えば、データを保持せずにサイズ変更できます。 - Q: 配列のサイズ変更を繰り返すと動作が遅くなりますか?
- A: はい。
ReDim Preserve
は新しい配列を作成してデータをコピーするため、頻繁なサイズ変更はパフォーマンスに影響します。
まとめ
- ReDim は、VBAの動的配列のサイズを実行時に変更するために使用される。
ReDim
は新しい配列を作成するため、既存データは消える。ReDim Preserve
を使うとデータを保持しながら配列のサイズを変更できるが、最も内側の次元のみ変更可能。- 頻繁にサイズ変更を行うと処理速度が低下するため、大量データの処理では注意が必要。