Цикл Sumifs vba в каждой строке

#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
  

Ответ №2:

Вы могли бы попробовать метод консолидации:

Шаги:

  1. Выберите ячейку, в которую вы хотите вставить итоговое значение (в моем сценарии ячейка D1)
  2. Перейдите к даннымИнструменты для обработки данныхКонсолидация
  3. Выберите весь диапазон (A1:B9) данных в ссылках
  4. Нажмите Добавить
  5. Нажмите OK

Результаты:

введите описание изображения здесь