【Excel VBA 】簡単なイテレータ(iterator)もどき

自分なりの解釈で、あまり無理をしない簡単なデザインパターンイテレータ(iterator)もどき

基本的な機能はcollectionオブジェクトを使っているので、

コード量を少ないことと、出力時に”For Each”がつかえるメリットがある。 

— CAggregate.cls(データクラスを集約管理し出力するクラス)

Dim m_collection As VBA.Collection ‘このオブジェクトがキモ

Private Sub Class_Initialize()
    Set m_collection = New VBA.Collection
End Sub

Private Sub Class_Terminate()

End Sub

Public Sub add(iterator As CIterator)
    Call m_collection.add(iterator)
End Sub

Public Property Get iterator() As Collection
    Set iterator = m_collection
End Property

— CIterator.cls(反復演算子(といっても実態はデータを格納しているクラス)

Public name As String
Public age As Integer

Private Sub Class_Initialize()

End Sub

Private Sub Class_Terminate()

End Sub

— MainForTest.bas(使い方の例)

Sub iteratorTest()

    Dim aggregate As CAggregate
    Set aggregate = New CAggregate
       
    ‘インプット情報
    Dim iterator As CIterator
    Set iterator = New CIterator
    iterator.name = "太朗"
    iterator.age = 10
    Call aggregate.add(iterator)
    Set iterator = Nothing
   
    Set iterator = New CIterator
    iterator.name = "花子"
    iterator.age = 12
    Call aggregate.add(iterator)
    Set iterator = Nothing

    Set iterator = New CIterator
    iterator.name = "hoge"
    iterator.age = 30
    Call aggregate.add(iterator)
    Set iterator = Nothing
   
    ‘アウトプット For Each で出力
    Dim chkIterator As CIterator
    For Each chkIterator In aggregate.iterator
        Debug.Print chkIterator.name & chkIterator.age
    Next chkIterator

 

End Sub

「iterator.zip」をダウンロード

コメント

タイトルとURLをコピーしました