Цитата |
---|
БМВ написал: функции быстрее. |
Тест. Создаём умную таблицу "Таблица1" со столбцом key с формулой =СЛУЧМЕЖДУ(1;200) и value с формулой =СЛЧИС() размножаем на 1000000 строк. Превращаем в значения. Для оценки скорости выполнения на VBA, такой код
Код |
---|
Public Sub sumIfByVBA()
Dim pLo As ListObject, resultColumn As ListColumn
Dim pDict As New Scripting.Dictionary
Dim keys, values, i As Long, t As Single
t = Timer
Set pLo = ActiveSheet.ListObjects("Таблица1")
keys = pLo.ListColumns("key").DataBodyRange.Value
values = pLo.ListColumns("value").DataBodyRange.Value
For i = 1 To UBound(keys)
pDict(keys(i, 1)) = pDict(keys(i, 1)) + values(i, 1)
Next
For i = 1 To UBound(keys)
values(i, 1) = pDict(keys(i, 1))
Next
Set resultColumn = pLo.ListColumns.Add
resultColumn.DataBodyRange.Value = values
MsgBox Timer - t
End Sub
|
У меня выполнился за 2,2 секунды. Для оценки формульного решения - новый столбец с формулой =СУММЕСЛИ([key];[@key];[value]) После 30 секунд остановил вычисление и прибил столбец
Тестировалось по Excel 2016 32bit.
P. S. Да, летом Microsoft хвалилось, что в Excel 365 подобные расчёты они стали оценивать - не выполняется ли для единого блока, и если да, то формула работает как для единого массива, но в 2016 для каждой ячейки полный набор вычислений и счастья медленного выполнения.