結論から申し上げます。
後述するコードにおいて、
単純に引数のデータを変数に入れているだけなのに、なぜ条件分岐になっているのでしょうか。
'重複しない地域名を取得
myDic.Add Key:=myList(i, 1), Item:=myList(i, 2)
これがどうして重複していない地域名の取得になるのでしょうか。
式の意味は、「myDicに追加しろ、引数はKeyとItemだ」
という単純な内容ですよね。
デバッグしてみるとなぜか、重複していなければ、
'売上金額を加算
のプログラムコードのルートを通りません。
しかし、重複データすなわち2件目の同じデータが見つかると、
プログラムコードのルートを通ります。
なぜでしょうか。
そして、どこでどのように重複データを削除しているのでしょうか。
挙動が上手く掴めません。
(※ちなみに、条件分岐に関してはJavaのイメージが先行しています。)
【実際のプログラムコード】
以下
VBA
1 2Sub 重複データを削除し合計を合算() 3 4Dim myDic As Object 5 6Dim myKey As Variant 7 8Dim myItem As Variant 9 10Dim myList As Variant 11 12Dim i As Long 13 14 15 Set myDic = CreateObject("Scripting.Dictionary") 16 17 'A列,B列のデータを配列に格納 18 myList = Range("A2", Range("A" & Rows.Count). _ 19 End(xlUp)).Resize(, 2).Value 20 21 '連想配列にデータを格納 22 For i = 1 To UBound(myList, 1) 23 24 '地域名が空欄かチェック 25 If Not myList(i, 1) = Empty Then 26 If Not myDic.exists(myList(i, 1)) Then 27 28 '重複しない地域名を取得 29 myDic.Add Key:=myList(i, 1), Item:=myList(i, 2) 30 Else 31 32 '売上金額を加算 33 myDic(myList(i, 1)) = myDic(myList(i, 1)) + myList(i, 2) 34 End If 35 End If 36 Next 37 38 '[都道府県] 重複していないリストを格納 39 myKey = myDic.keys 40 41 '[売上] 各都道府県の合計を格納 42 myItem = myDic.items 43 44 'リストを出力 45 For i = 0 To UBound(myKey) 46 Cells(i + 2, 5).Value = myKey(i) 47 Cells(i + 2, 6).Value = myItem(i) 48 Next 49 50 '開放 51 Set myDic = Nothing 52 53End Sub```
回答2件
あなたの回答
tips
プレビュー