dポイントプレゼントキャンペーン実施中!

Excel VBAで以下のことを行いたいのですが、どのようにすればいいでしょうか?
(どこの店でどの商品をいくつかったか?)

店名 品名 個数
A店 みかん 100
B店 みかん 120
A店 りんご 90
A店 りんご 110
A店 みかん 110
C店 ぶどう 200
    ↓
店名 品名 個数
A店 みかん 210
B店 みかん 120
A店 りんご 200
C店 ぶどう 200
 
何卒よろしくお願いいたします。

A 回答 (1件)

VBAでは、代表的なDictionary オブジェクトを使うのが流行っていますが、Excelの機能の重複の削除を使っても可能です。

どちらでも同じことですが、店名と品名をあわせてしまうことです。ただ、切離しやすいように、「,」を加えています。

'//
Sub IteminShopTotal()
 Dim Rng As Range
 Dim c As Range, i As Long
 Dim Key As Variant
 Dim myDic As Object
 Dim Start As Range
 Dim Titles As Range
 Set myDic = CreateObject("Scripting.Dictionary")
 myDic.CompareMode = vbTextCompare 'テキストコンペアモード

 'タイトル項目
 Set Titles = Range("A1:C1")
 'データの始まり
 Set Start = Range("E1")


 Set Rng = Range("A2", Cells(Rows.Count, 1).End(xlUp))

 For Each c In Rng
  Key = c.Value & "," & c.Offset(, 1).Value
  If myDic.Exists(Key) Then
   myDic(Key) = myDic(Key) + c.Offset(, 2).Value
  Else
   myDic.Add Key, c.Offset(, 2).Value
  End If
 Next c

 With Start
 Titles.Copy .Cells(1, 1)
 For i = 0 To myDic.Count - 1
  .Cells(i + 2, 1).Value = Split(myDic.keys()(i), ",")(0)
  .Cells(i + 2, 2).Value = Split(myDic.keys()(i), ",")(1)
  .Cells(i + 2, 3).Value = myDic.Item(myDic.keys()(i))
 Next
 End With
End Sub
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています