- ベストアンサー
一気にdictionaryで飛び飛びの複数列をkeyとして集計し別BOOKに縦横並び替えしたい
- 元BOOKの内容をセットごとに集計し、先BOOKに縦横並び替えて書き出したいです。
- コードごとにセットの要素を縦方向に並び替え、合算された数量と単価、分類を追加したいです。
- コードごとの並び替えには分類を基準に優先順位を持たせたいです。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
アクティブシートの結果をSheet2に書き出します。 ただし並び替えや重複するコードの削除はしてません。 Sub try() Dim myDic As Object Dim r As Range Dim st As String Dim i As Integer Dim v As Variant Set myDic = CreateObject("Scripting.Dictionary") For Each r In Range("H2", Cells(Rows.Count, "H").End(xlUp)) For i = 0 To 8 Step 4 If r.Offset(, i).Value = "" Then Exit For v = Array(Range("A" & r.Row).Value, r.Offset(, i + 1).Value, _ r.Offset(, i + 2).Value, r.Offset(, i + 3).Value) st = Join(v, "_") If Not myDic.Exists(st) Then myDic(st) = Array(v(0), r.Offset(, i).Value, v(1), v(2), _ r.Offset(, i).Value * v(2), v(3)) Else myDic(st) = Array(v(0), r.Offset(, i).Value + myDic(st)(1), v(1), v(2), _ myDic(st)(4) + r.Offset(, i).Value * v(2), v(3)) End If Next Next With Worksheets("Sheet2") .Range("A1:F1").Value = Array("コード", "数", "単位", "単価", "計", "分類") .Range("A2").Resize(myDic.Count, 6).Value = Application.Transpose(Application.Transpose(myDic.Items)) End With Set myDic = Nothing Erase v End Sub ご参考程度に。
お礼
n-junさん。有難うございます。昨年9月にも助けて頂きました。重ねて御礼申し上げます。北朝鮮からのエアメール(もうすぐ私の誕生日でしたので、素敵な贈り物?)が気になってまして、返事遅れました。 For i = 0 To 8 Step 4 と .Range("A2").Resize(myDic.Count, 6).Value = Application.Transpose(Application.Transpose(myDic.Items)) この辺りに考えが及んでませんでした。また、横方向の合算は必要はないのですが、あっても助かることのみなので、助かりました。 後は並び替えでソートできますので、完璧です。 もしかするとこの後、コード名ごとのシートに分けつつ色々作業との段階でまたつまづくかも知れません。その際は、もし御手隙でしたら よろしくお願いします。ありがとうございました。yokokama46