Excel VBA で 動的配列とクラスを使う
メモ。
クラスモジュール OrderClass
Option Explicit Private lngOrderCount As Long '注文本数 Private strOrderNo As String '発注番号 ' クラスのプロパティ(取得用) Public Property Get OrderNo() As String OrderNo = strOrderNo End Property ' クラスのプロパティ(変更用) Public Property Let OrderNo(ByVal vNewValue As String) strOrderNo = vNewValue End Property ' クラスのプロパティ(取得用) Public Property Get OrderCount() As Long OrderCount = lngOrderCount End Property ' クラスのプロパティ(変更用) Public Property Let OrderCount(ByVal vNewValue As Long) lngOrderCount = lngOrderCount + vNewValue End Property
標準モジュール
Sub Test1() Dim order() As OrderClass Dim lngLastRow As Long Dim i As Long Dim intCnt As Integer lngLastRow = Cells(Rows.Count, 1).End(xlUp).Row '最終セル位置を取得 For i = 2 To lngLastRow If Cells(i, 1) <> Cells(i - 1, 1) Then '発注番号が変わるなら intCnt = intCnt + 1 ReDim Preserve order(intCnt) Set order(intCnt) = New OrderClass 'インスタンス生成 order(intCnt).OrderNo = Cells(i, 1) '発注番号のセット End If order(intCnt).OrderCount = Cells(i, 2) '発注本数をセット Next For i = 1 To intCnt Cells(i + 1, 4) = order(i).OrderNo '発注番号書き出し Cells(i + 1, 5) = order(i).OrderCount 'その発注番号の注文本数合計を書き出し Set order(i) = Nothing 'インスタンス破棄 Next MsgBox "完了!" End End Sub