事務屋さんの備忘録

主にプログラミングのことを書いていきます。メモというか備忘録的な感じで。プログラミングといっても、私はプロのエンジニアでも本職のプログラマーでもありません。単なる事務職をやってるサラリーマンで、空いた時間にちょこちょこっとプログラミングしてる程度です。よってこのブログに記載したことが誤っていたり、もっとよい方法がある場合もあると思います。その場合には、ご指摘いただけると嬉しいです。また、このブログを読んで役に立った、なんて方がいらっしゃったら幸いですね。

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

f:id:freefly3104:20180118221648j:plain