コレクション、配列の操作

にメンテナンス済み

コレクションと配列の違い

まず、コレクションと配列の違いを簡単に説明します。

コレクションとは

コレクションは、異なるデータ型の要素を含めることができるオブジェクトの集まりです。インデックスを用いて要素にアクセスでき、要素の追加や削除が容易です。

配列とは

配列は、同じデータ型の要素を含む固定サイズのデータ構造です。要素にアクセスするためにインデックスを使用し、サイズは固定となります。

コレクションを 1 件ずつ処理する

コレクションを 1 件ずつ処理するための一般的な方法として、For Each...Nextループを使用します。

Dim item As Variant
Dim myCollection As Collection
Set myCollection = New Collection

' コレクションにアイテムを追加
myCollection.Add "Item1"
myCollection.Add "Item2"
myCollection.Add "Item3"

' 1件ずつ処理
For Each item In myCollection
    Debug.Print item
Next item

For Each...Next の利点

  • 簡潔で読みやすい: コードが簡潔で、追加や削除も容易です。
  • エラーが少ない: コレクションのサイズや範囲外エラーを気にする必要がありません。

配列を 1 件ずつ処理する

配列を 1 件ずつ処理するには、For...Nextループを使用します。

Dim i As Integer
Dim myArray(2) As String

' 配列に値を設定
myArray(0) = "Element1"
myArray(1) = "Element2"
myArray(2) = "Element3"

' 1件ずつ処理
For i = LBound(myArray) To UBound(myArray)
    Debug.Print myArray(i)
Next i

For...Next の利点

  • 柔軟性: インデックスを使用することによって、特定の要素へのアクセスが容易です。
  • コントロール: ループの範囲を指定することで、特定の範囲のみを処理することができます。

特定の条件で要素を処理する

要素を処理する際に特定の条件を設定することも可能です。例えば、コレクションの中で特定の文字列を持つ要素だけを処理したい場合です。

Dim item As Variant
For Each item In myCollection
    If item Like "Item*" Then
        Debug.Print "Processing: " & item
    End If
Next item
条件付き処理

条件付き処理を行うことで、より効率的にデータをフィルタリングし、必要なデータだけを処理することができます。

配列やコレクション操作の応用

配列やコレクションを活用することで、VBA プログラムはより強力かつ柔軟になります。ここでは、いくつかの応用例を紹介します。

コレクションを使った重複排除

コレクションは、同じキーを持つ要素を追加しようとするとエラーが発生するため、重複排除に利用できます。

Dim uniqueCollection As Collection
Set uniqueCollection = New Collection

On Error Resume Next ' エラーを無視
uniqueCollection.Add "Item1", "Item1"
uniqueCollection.Add "Item2", "Item2"
uniqueCollection.Add "Item1", "Item1" ' 重複のため追加されない
On Error GoTo 0 ' エラーハンドリングを元に戻す

For Each item In uniqueCollection
    Debug.Print item
Next item

配列の動的サイズ変更

VBA では、ReDimキーワードを使って配列のサイズを動的に変更できます。

Dim dynamicArray() As Integer
ReDim dynamicArray(0 To 2)

dynamicArray(0) = 10
dynamicArray(1) = 20
dynamicArray(2) = 30

' サイズを変更して要素を追加
ReDim Preserve dynamicArray(0 To 3)
dynamicArray(3) = 40

For i = LBound(dynamicArray) To UBound(dynamicArray)
    Debug.Print dynamicArray(i)
Next i
ReDim Preserve の注意点

ReDim Preserveを使用すると、配列の先頭からの要素が保持されますが、2次元以上の配列で使用する場合は最後のディメンションのみサイズを変更できます。

まとめ

VBA でコレクションや配列を 1 件ずつ処理する方法は、For Each...NextFor...Nextループを使うことで簡単に実現できます。これらの方法を使うことで、データセットを効率的に操作し、複雑なデータ処理を行うことができます。コレクションや配列の操作をマスターすることで、VBA スクリプトの可能性を大いに広げることができるでしょう。

#VBA #Excel #コレクション #配列 #ループ