Несмотря на то, что это было сделано сотни раз раньше, эй, может быть, Microsoft изменила формулы или что-то в этом роде.
Я неравнодушен к методу, предложенному Джерри и Ме, поскольку они просты, как черт и лаконичны, ноВы платите высокую цену за производительность.
Формула Тома выглядит мне некрасиво, но намного быстрее, примерно в 4 раза быстрее, чем мой первоначальный пример.Мы смогли объединить {} с формулой Тома, но чтобы заставить ее работать, нам пришлось обернуть функцию sumifs функцией sum.Это значительно замедлило формулу, но сделало ее более красивой.
z32a7ul также имел отличное решение.Мне действительно нравится использование - и я научился использовать | s для поиска текста и только этого текста.На первый взгляд я подумал, что он не будет работать с таким числом, как 2323, но он работает.
Пример макета был следующим:
A1: A5000 был заполнен LandgeBruik,
B1: B5000 был заполнен 40-ыми
C1: 5000 был заполнен 1-ыми.
Результаты:
=SUMPRODUCT((A1:A5000="LandgeBruik")*(B1:B5000={20,21,22,23,40})*C1:C5000)
19,186031 секунд прошло |59 818 073 тиков
{=SUM(IF(A1:A5000="Landgebruik",1,0)*IF(B1:B5000={20,21,22,23,40},1,0)*C1:C5000)}
26,124411 секунд прошло |81 450 506 тиков
{=SUM((A1:A5000=""Landgebruik"")*(B1:B5000={20,21,22,23,40})*C1:C5000)}
21,111835 секунд прошло |65 822 330 тиков
"=SUMIFS(C1:C5000,B1:B5000,"">=20"",B1:B5000,""<=23"",A1:A5000,""=Landgebruik"")+SUMIFS(C1:C5000,B1:B5000,""=40"",A1:A5000,""=Landgebruik"")"
6,732804 секунд прошло |20 991 490 тиков
"=SUM(SUMIFS(C1:C5000,A1:A5000,"Landgebruik",B1:B5000,{21,22,23,24,40}))"
16,954528 секунд прошло |52 860 709 тиков
"=SUMPRODUCT(--(A1:A5000=""Landgebruik""),--NOT(ISERROR(FIND(""|""&B1:B5000&""|"",""|20|21|22|23|40|""))),C1:C5000)"
11,822379 секунд прошло |36 859 729 тиков