| 
    
     |  | かな? 
 集計データがSheet1に有リ、列見出しが有るとします
 結果をSheet2に出力します
 
 Option Explicit
 
 Public Sub AddUp()
 
 '集計列数を設定
 Const clngCol As Long = 3
 'データ列数を設定
 Const clngData As Long = 2
 
 Dim i As Long
 Dim lngRow As Long
 Dim rngListTop As Range
 Dim dicIndex As Object
 Dim vntResult() As Variant
 Dim vntData As Variant
 Dim lngIndex As Long
 Dim lngNumb As Long
 
 'A列の列見出しの位置を基準とする
 Set rngListTop = Worksheets("Sheet1").Cells(1, "A")
 
 '基準位置に就いて
 With rngListTop
 'データ行数を取得
 lngRow = .Offset(65536 - .Row).End(xlUp).Row - .Row
 End With
 
 'Dictionaryオブジェクトを取得
 Set dicIndex = CreateObject("Scripting.Dictionary")
 
 'Dictionaryに就いて
 With dicIndex
 '列位置の初期値
 lngNumb = 1
 'データ行全てに繰り返す
 For i = 1 To lngRow
 '列見だしが無い場合
 '    For i = 0 To lngRow
 'A列以降のセルの値を配列に取得
 With rngListTop
 vntData = .Offset(i).Resize(, clngData).Value
 End With
 'DictionaryにKey名が有った場合
 If .Exists(vntData(1, 1)) Then
 '結果配列の列位置を取得
 lngIndex = .Item(vntData(1, 1))
 'Keyの有る行の個数列にデータの個数を加算
 vntResult(2, lngIndex) _
 = vntResult(2, lngIndex) + 1
 'Keyの有る行のB列の値を加算
 vntResult(3, lngIndex) _
 = vntResult(3, lngIndex) + vntData(1, 2)
 '担当名が無い場合
 Else
 'DictionaryにKey名と列位置(配列の)を追加
 .Add vntData(1, 1), lngNumb
 '結果用配列を拡張
 ReDim Preserve vntResult(1 To clngCol, 1 To lngNumb)
 '果用配列に、値を代入
 vntResult(1, lngNumb) = vntData(1, 1)
 vntResult(2, lngNumb) = 1
 vntResult(3, lngNumb) = vntData(1, 2)
 '列位置を更新
 lngNumb = lngNumb + 1
 End If
 Next i
 End With
 
 'Dictionaryを破棄
 Set dicIndex = Nothing
 
 '結果をSheet2に出力
 With Worksheets("Sheet2").Cells(1, "A")
 .Resize(UBound(vntResult, 2), _
 UBound(vntResult, 1)).Value _
 = Application.Transpose(vntResult)
 End With
 
 Set rngListTop = Nothing
 
 Beep
 MsgBox "処理が完了しました"
 
 End Sub
 
 |  |