Страницы: 1
RSS
Макрос вместо СУММЕСЛИ
 
Всем добрый вечер! Уважаемые знатоки, подскажите, пожалуйста, как оптимально применить суммирование из одной таблицы в другую в vba по критериям
Есть потрясающий пример оптимизации функции ВПР от Hugo http://www.planetaexcel.ru/forum/index.php?PAGE_NAME=read&FID=8&TID=31763
Возможно есть такой же аналог для суммесли? У меня сейчас задача в лист из 14 тыс строк просуммировать данные из листа ~100 тыс строк, при этом в несколько столбцов. В пример сделал 2 маленькие таблицы, для удобства.

Поиском пользовался. Кроме sumif ничего не нашел.
Изменено: qwerty64 - 02.03.2017 22:12:07
 
Цитата
qwerty64 написал: В пример сделал 2 маленькие таблицы, для удобства
Не нужно для удобства, нужно как в Правилах написано - в РЕАЛЬНЫХ форматах и расположениях данных. Что-бы в дальнейшем исключить переспрашивания, типа: 'а почему в рабочем файле не работает? '. 100К строк конечно не надо, а вот кол-во столбцов желательно. И желательно видеть желаемый РЕЗУЛЬТАТ. А то сейчас Ваши таблички конечно чертовски удобны, но малоинформативны. ЧТО Вы хотите на выходе работы макроса получить?
Согласие есть продукт при полном непротивлении сторон
 
На этом примере хотел чтобы в первую таблицу были просуммированы данные из второй. Добавил формулу в файл. Уверен, что справлюсь с адаптацией под итоговый файл, который использую в работе, поэтому пусть будет такая упрощенная модель, если Вы не против
 
Схематично:
Код
Sub tt()
    Dim a(), i&, t$

    a = [d1].CurrentRegion.Value
    With CreateObject("scripting.dictionary"): .comparemode = 1
        For i = 1 To UBound(a)
            t = a(i, 1)
            .Item(t) = .Item(t) + a(i, 2)
        Next
        a = [a1].CurrentRegion.Columns(1).Resize(, 2).Value
        For i = 1 To UBound(a)
            t = a(i, 1)
            If .exists(t) Then a(i, 2) = .Item(t)
        Next
    End With
    [a1].CurrentRegion.Columns(1).Resize(, 2).Value = a

End Sub
 
Hugo, Большое Спасибо за еще один супер прием!!)
Страницы: 1
Наверх