- ベストアンサー
VBA 複数のシートをまたいでの連想配列を作成する方法
- VBAを使用して、Excelの複数のシートにまたがって合計を取り、連想配列に格納し、別のシートに書き出す方法について教えてください。
- プロシージャーの下から6行目の箇所でエラーコード451が出る場合、どのように修正すれば良いかも教えてください。
- また、作成した連想配列のキーと値を特定のセルに書き込む方法についても教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんなカンジでしょうか。 Sub 年間集計() Dim Dic Dim i As Integer Dim j As Integer Dim sh As Worksheet Dim rng As Range Dim buf As String Dim num As Integer Dim Keys() As Variant Set Dic = CreateObject("Scripting.Dictionary") For Each sh In Worksheets For Each rng In sh.Range("J2", sh.Cells(Rows.Count, 10).End(xlUp)) buf = rng.Value num = rng.Offset(, 1).Value If Not Dic.Exists(buf) Then Dic.Add buf, num Else Dic.Item(buf) = Dic.Item(buf) + num End If Next rng Next sh j = 2 Keys = Dic.Keys With Worksheets("Sheet13") For i = 0 To Dic.Count - 1 .Cells(j, 1) = Keys(i) 'エラー箇所 .Cells(j, 2) = Dic.Item(Keys(i)) j = j + 1 Next i End With End Sub
その他の回答 (1)
- Chiquilin
- ベストアンサー率30% (94/306)
Excel2013なら連想配列なんて使わなくても データを一か所 に集めてから RemoveDuplicatesメソッドを使えばおしまい だと思います。 重複した値を削除 RemoveDuplicatesメソッド - Excel VBA他サンプル等 https://excwlvba.blogspot.jp/2013/06/removeduplicates.html
お礼
Chiquilin様 今回は、連想配列でいたかったので、連想配列のままで行きますが、 ご回答いただいた内容を勉強させて頂き、次回に活かしたいと思います。 ありがとうございました。
お礼
HohoPapa様 エラーにならずに、書き出しまで出来ました。 変数にすると出来る様になるんですね。 そこのところが理解出来ていないので、勉強します。 ありがとうございました。