INDEX
Preserveの概要
動的配列 VBAの予約語 | ||
Preserve 概要 Preserve は、VBAで動的配列のサイズを変更する際に、既存のデータを保持するために使用されます。 わかりやすく説明 Preserve は、「配列のサイズを変えるけど、今入っているデータは消さないで!」という命令です。通常、配列のサイズを変更するとデータは消えますが、Preserve を使うとそのまま保持できます。 |
||
|
Preserveの基本的な使い方
Preserve を使って、配列のデータを保持しながらサイズを変更する基本的な例です。
Sub PreserveExample()
Dim arr() As Integer
Dim i As Integer
' 配列の初期化(3要素)
ReDim arr(1 To 3)
For i = 1 To 3
arr(i) = i * 10
Next i
' 配列サイズを変更(5要素に拡張)
ReDim Preserve arr(1 To 5)
arr(4) = 40
arr(5) = 50
' 結果を表示
For i = 1 To 5
Debug.Print arr(i)
Next i
End Sub
解説:
- 最初に 3 要素の配列を作成し、データを格納。
ReDim Preserve arr(1 To 5)
で 5 要素に拡張し、既存データを保持。- 4番目と5番目の要素に新しい値を追加。
ExcelでのPreserveの活用例(動的配列でセルデータを格納)
Excelのセルデータを動的配列に格納し、後からデータを追加する例です。
Sub StoreCellValues()
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
' 配列を拡張して新しいデータを追加
ReDim Preserve arr(1 To lastRow + 1)
arr(lastRow + 1) = "追加データ"
' A列に再度書き戻す
For i = 1 To UBound(arr)
Cells(i, 2).Value = arr(i)
Next i
End Sub
解説:
- A列のデータを動的配列に格納。
ReDim Preserve
で配列サイズを拡張し、新しいデータを追加。- B列に拡張後のデータを書き戻す。
多次元配列でのPreserveの制限
Preserve を使う場合、多次元配列では最も内側の次元のみサイズ変更が可能です。
Sub MultiDimPreserve()
Dim arr() As Integer
Dim i As Integer, j As Integer
' 2次元配列(1次元目は変更不可)
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
' 次元1を変更しようとするとエラーになる
' ReDim Preserve arr(1 To 3, 1 To 3) ' ←エラー
' 次元2の拡張のみ可能
ReDim Preserve arr(1 To 2, 1 To 5)
End Sub
解説:
- 2次元配列を作成し、データを格納。
ReDim Preserve arr(1 To 3, 1 To 3)
はエラー(最も内側の次元以外は変更不可)。ReDim Preserve arr(1 To 2, 1 To 5)
のように、最後の次元のみ変更可能。
エラーを回避する方法
Preserve を使う際に、適切なサイズ変更をしないとエラーが発生するため、エラーハンドリングを追加します。
Sub SafePreserve()
Dim arr() As Integer
Dim i As Integer
On Error Resume Next
ReDim Preserve arr(1 To 5)
If Err.Number <> 0 Then
MsgBox "エラー発生: " & Err.Description, vbExclamation, "エラー"
Err.Clear
Else
MsgBox "配列を正常に拡張しました。"
End If
End Sub
解説:
On Error Resume Next
でエラーを無視し、発生時にメッセージを表示。- 適切なエラーハンドリングで処理が止まらないようにする。
Preserveの注意事項
- Preserve は最後の次元のみ変更可能: 多次元配列では最も内側の次元以外は変更できない。
- サイズ変更すると処理速度が低下する: Preserve は新しい配列を作成し、データをコピーするため、大きな配列で頻繁に使用するとパフォーマンスが低下する。
- データを保持する際の順番に注意: Preserve でサイズを縮小すると、削られた部分のデータは消える。
よくある質問
- Q: Preserve なしで ReDim を使うとどうなりますか?
- A: 既存の配列のデータはすべて失われ、新しい配列が作成されます。
- Q: 配列のサイズを小さくすることはできますか?
- A: はい。ただし、縮小された範囲のデータは消去されます。
- Q: 多次元配列の最初の次元を変更できますか?
- A: いいえ。Preserve では最後の次元(最も右の次元)のみ変更できます。
- Q: 配列のサイズ変更を繰り返すと動作が遅くなりますか?
- A: はい。Preserve は新しい配列を作成し、データをコピーするため、大量のデータで頻繁に変更すると処理速度が低下します。
まとめ
- Preserve を使うと、配列のサイズ変更時に既存データを保持できる。
- 最も内側の次元のみ変更可能。
- サイズ変更を頻繁に行うと処理速度が低下するため注意が必要。
- データ保持が必要な場合に適切に活用する。