dictionaryでの集計
A------B--------【F】---【G】----(H)-----I------(J)---------(O)
1 名前 住所・・・金額 個数 種別(1) 数値 種別(2)・・・・種別(3)
2
3
4~~~~データ始まり~~~~
5
6
上図のようなデータがあり、種別(1)・(2)・(3)をKeyにして
dictionaryで、F列とG列の合計値を求めたいのですが、
エラーばかりでうまくいきません。
インデックスが有効範囲にありません
というエラーがちょこちょこ起こります。
Option Explicit
Sub syukei()
Dim dic As Object, i As Long, j As Long, n As Integer, data As String, tbl, x
Set dic = CreateObject("scripting.dictionary")
Application.ScreenUpdating = False
With Sheets("Sheet1")
tbl = .Range("a4").Resize(.Range("a" & Rows.Count).End(xlUp).Row, 15)
ReDim x(1 To UBound(tbl, 1), 1 To 15)
For i = 1 To UBound(tbl, 1)
If Not IsEmpty(tbl(i, 8)) Then
data = tbl(i, 8) & "," & tbl(i, 15)
If Not dic.exists(data) Then
j = j + 1
For n = 1 To 15
x(j, n) = tbl(i, n)
Next n
dic(data) = j
Else
x(dic(data), 6) = x(dic(data), 6) + tbl(i, 6)
x(dic(data), 7) = x(dic(data), 7) + tbl(i, 7)
End If
End If
Next i
.Range("D134").Resize(, 5) = Split("種別 区分 金額合計 個数合計")
.Range("D135").Resize(j, 5) = x
End With
Set dic = Nothing
Application.ScreenUpdating = True
End Sub
このようなコードを書きましたが data = tbl(i, 8) & "," & tbl(i, 15)
のところで、型が一致しませんというエラーになります。
.Range("D134").Resize(, 5)に貼り付けようとしています。
種別(2)をkeyに設定するコードを書いていないのは、
種別(2)は、A・B・C・Xとあり、keyごとで分けるのではなく
Xか、それ以外かに分けたいので悩んでいます。
いつも頼ってばっかりで申し訳ありませんが、教えてください。
お願いします。
お礼
回答ありがとうございます。 Debug.Print TypeName(Items)ではVariant Debug.Print TypeName(Items(k))ではRangeと表示されました。 そこで、a As Rangeとしたら、エラーでした。 なぜ、エラーになるのでしょうか? a As VariantはOKでした。