#excel #vba
#excel #vba
Вопрос:
я пытаюсь выполнить макрос, который выполняет sumifs на основе одного условия, где условие задается значением первой ячейки каждой строки. Таблица 2 — это результат, который я хочу. Как это выглядит в Excel = Sumifs (Продажи; Магазин; nStore; Розничный торговец; nRetailer)
Комментарии:
1. Почему бы не использовать уже существующую функцию SUMIF?
2. Вы могли бы использовать метод консолидации.
Ответ №1:
Словарь быстро создает SUMIF и попутно создает уникальный список розничных продавцов.
Sub mySumIf()
Dim i As Long, arr As Variant, retailer As string, dict As Object
Set dict = CreateObject("scripting.dictionary")
dict.comparemode = vbTextCompare
With Worksheets("tab 1")
'collect source values into array
arr = .Range(.Cells(2, "A"), .Cells(.Rows.Count, "C").End(xlUp)).Value2
End With
retailer = UCase(Worksheets("tab 2").Cells(4, "F").Value2)
'build a dictionary with Stores as keys and Sales as Items
For i = LBound(arr, 1) To UBound(arr, 1)
If UCase(arr(i, 2)) = retailer Then
dict.iktem(arr(i, 1)) = dict.iktem(arr(i, 1)) arr(i, 3)
End If
Next i
With Worksheets("tab 2")
'put Stores and Summed Sales onto target worksheet
.Cells(6, "E").Resize(dict.Count, 1) = Application.Transpose(dict.keys)
.Cells(6, "F").Resize(dict.Count, 1) = Application.Transpose(dict.items)
End With
End Sub