|
VBA初心者です。表題の件につきまして調べ・試し数日悩みまして、いよいよ解決方法がなくここで質問させてください。
以下のようなデータがあります。
Column1をキーにして、重複を除外、Column2以降(7以降も30~40程データがあります)を合計したいです。
そして我儘ですが勉強のためにdictionaly型で実装したいです。
FOR分をまわして、If Not myDic.exists(myList(i, 1)) Then でキーの重複を除外することまではできたのですが、
下記例でいうところのキー(AAAAA) × Column2 の合計値を13に計算するという部分が理解できていません。
==================
Column1 Column2 Column3 Column4 Column5 Column6 Column7
AAAAA 10.00 0.00 0.00 0.00 0.00 10.00
BBBBB 0.00 2.00 3.00 3.00 0.00 0.00
CCCCC 0.00 0.00 0.00 0.00 0.00 0.00
BBBBB 0.00 5.00 6.00 4.00 0.00 0.00
AAAAA 1.00 4.00 1.50 4.00 0.00 0.00
AAAAA 2.00 0.00 0.00 0.00 0.00 0.00
BBBBB 3.00 1.00 0.50 0.00 0.00 0.00
BBBBB 0.00 0.00 0.00 0.00 0.00 0.00
CCCCC 8.00 0.00 0.00 0.00 0.00 0.00
==================
↓
==================
Column1 Column2 Column3 Column4 Column5 Column6 Column7
AAAAA 13.00 4.00 1.50 4.00 0.00 10.00
BBBBB 3.00 8.00 9.50 7.00 0.00 0.00
CCCCC 8.00 0.00 0.00 0.00 0.00 0.00
==================
全然間違っていると思うのですが、以下に現状のソースを載せます。
Sub sample()
Dim myDic As Object
Dim myKey As Variant
Dim myItem As Variant
Dim Value As Variant
Dim myList As Variant
Dim i, u As Long
Set myDic = CreateObject("Scripting.Dictionary")
'A列,AF列のデータ全体DTを変数に格納
myList = Range("A8:AF18").Value
For i = 1 To UBound(myList, 1) 'DTのRow分くりかえす
myKey = myList(i, 1)
'Keyが空かチェック
If Not myList(i, 1) = Empty Then
If Not myDic.exists(myList(i, 1)) Then '重複チェック
'重複がない場合Itemを登録
For u = 2 To 32
myItem = myList(i, u)
Debug.Print "myItemは" & myItem & "です"
Next u
'keyを辞書登録
myDic.Add myList(i, 1), myItem
Else
'加算
For u = 2 To 32
myItem = myList(i, u) + myList(i, u)
Debug.Print "合算後myItemは" & myItem & "です"
Next u
End If
End If
Next
'重複していないリストを格納
myKey = myDic.Keys
'重複を除いたkeyの一覧を出力
For i = 0 To myDic.Count - 1
Debug.Print myKey(i)
Next
'合計を格納
'myItem = myDic.items
For i = 0 To myDic.Count - 1
Debug.Print "キーの値:" & myKey(i)
Next
'リストを出力
For i = 0 To UBound(myKey)
Cells(i + 25, 1).Value = myKey(i)
For u = 2 To 33
Cells(i + 25, u).Value = myItem(i, u)
Next u
Next
'開放
Set myDic = Nothing
End Sub
|
|