VBA でのクラス&コレクションの注意覚書

行データをクラスにして、それをまとめてコレクションで管理するのは便利。速度も速い。
Python でExcelを扱う方が速いと言われることがあるが、普通にCellを扱うと余計な属性を伴って処理するのでどうしても重くなる。
中身の文字データだけを処理対象にするなら、クラスで管理すれば、条件はPythonと変わらなくなるのではないかと思う。
速度だけで言えば、辞書の方がよいのかもしれないが、メソッドを用意したり、クラス&コレクションの柔軟性はありがたい。
プレーンな表であれば、SQLが便利だけど、一癖二癖ある表では使えない。
一度整理してプレーンな表を作れば、SQLが使えてよいけれど、整理する段階でクラス&コレクションが作成できたり。
作成したクラス&コレクションからプレーンな表を作成して、テーブルなりSQLなりで処理してもよいかも。

クラスを作るのはVBEの新規作成でクラスを選べばよい。
コレクションもそれでよいけど、何故か不親切にそのままでは、検索や列挙ができない。
反復処理ができないのでFor Eachが使えないのと、キー検索もItemプロパティ名が省略できないので使いにくい。

VBEでは修正できない。
一旦エクスポートしてテキストエディターで修正する。

Public Property Get Item(vntIndexKey As Variant) As clsItem
Attribute Item.VB_UserMemId = 0
  Set Item = mCol(vntIndexKey)
End Property
Public Property Get NewEnum() As IUnknown
Attribute NewEnum.VB_UserMemId = -4
Attribute NewEnum.VB_MemberFlags = "40"
    Set NewEnum = mCol.[_NewEnum]
End Property

青字の部分を追加すると、コレクションとして機能するようになる。