Несколько Indirects с именованным диапазоном - PullRequest
0 голосов
/ 24 января 2020

Я пытаюсь написать формулу, используя SUMPRODUCT, SUMIF, INDIRECT и именованный диапазон. Моя формула:

=SUMPRODUCT(SUMIF(INDIRECT("'"&INDIRECT("EightiesNames")&"'!G8:HI8"),$A$2,INDEX(INDIRECT("'"&INDIRECT("EightiesNames")&"'!G9:HI300"),MATCH($A$1,INDIRECT("'"&INDIRECT("EightiesNames")&"'!E9:E300"),0),0)))

Формула проходит через каждый рабочий лист в именованном диапазоне и ищет оба столбца (ища $ A $ 2 в G8: HI8. Обратите внимание, что $ A $ 2 может встречаться несколько раз). раз в одном листе) и строк (ища $ A $ 1 до E9: E300) перед суммированием всех возвращаемых значений с помощью SUMIF / SUMPRODUCT.

Формула была основана на упрощенной версии ниже, но с SUMPRODUCT и INDIRECT. слой, позволяющий ему выполнять одну и ту же функцию на нескольких вкладках.

=SUMIF(G8:HI8, $A$2, INDEX(G9:HI300, MATCH($A$1, E9:E300,0), 0))

Более подробное описание рабочей книги см. ниже.

Рабочие таблицы:

Sheet1 - содержит именованный диапазон в ячейках B2: B7 {Name1, Name2, Name3, Name4, Name5, Name6}. Именованный диапазон называется « EightiesNames »

Name1 - где находится формула. Формула ссылается на рабочие листы Имя1, Имя2, Имя3, Имя4, Имя5, Имя6 , в основном на все таблицы в указанном диапазоне.

Существует три вхождения "INDIRECT("'"&INDIRECT("EightiesNames")" - после SUMIF, один после ИНДЕКСА и после МАТЧА. Первое вхождение двух НЕПРЯМОГО работает так, как я хочу (когда я оцениваю формулу). Он расширяет INDIRECT("EightiesNames") в массив {"Name1"; "Name2"; "Name3"; "Name4"; "Name5"; "Name6"} . Затем формула переходит в диапазон "'! G8: HI8" после каждого "Имени" - "'Name1'!G8:HI8";...;"'Name6'!G8:HI8". Однако для INDIRECT, которые появляются после INDEX и MATCH, он не возвращает массив, подобный первому. На моем компьютере он возвращает « Name2 » (возвращает « Name1 » на друга моего друга), не уверен, почему он отличается и почему он возвращает эти значения вместо всего массива.

Я не совсем уверен, как это исправить, поскольку три НЕПРАВИЛЬНЫЕ формулы идентичны, но не дают одинакового результата. Я также знаю, что НЕПРАВИЛЬНЫЕ формулы занимают много вычислительной мощности, поэтому я с удовольствием воспользуюсь альтернативами. Любая помощь / понимание будет принята с благодарностью! Спасибо!

1 Ответ

0 голосов
/ 25 января 2020

Хотя решение с одной формулой возможно, оно будет очень сложным, неэффективным и совсем не надежным. По этой причине я хотел бы предложить вам использовать обычную формулу SUMIF для каждого рабочего листа, где она будет помещаться в одну и ту же ячейку для каждого из ваших рабочих листов, скажем, B1, а затем вы можете просто использовать SUM, чтобы получить общее количество, для пример =SUM('Sheet1:Sheet5'!B1).

Однако, если вы хотите попробовать решение с одной формулой, попробуйте следующую формулу, которую необходимо подтвердить, нажав CONTROL + SHIFT + ENTER.

Обратите внимание, что я предположил, что G8: HI8 и E9: E300 для каждой из ваших таблиц содержат текстовые значения. Если G8: HI8 содержит числовые значения, заменить ...

T(OFFSET(INDIRECT("'"&EightiesNames&"'!G8:HI8"),,COLUMN(INDIRECT("G8:HI8"))-7,,1))=$A$2

на

N(OFFSET(INDIRECT("'"&EightiesNames&"'!G8:HI8"),,COLUMN(INDIRECT("G8:HI8"))-7,,1))=$A$2

Также, если E9: E300 содержит числовые значения, заменить ...

T(OFFSET(INDIRECT("'"&TRANSPOSE(EightiesNames)&"'!E9:E300"),ROW(INDIRECT("9:300"))-9,0,1))=$A$1

с

N(OFFSET(INDIRECT("'"&TRANSPOSE(EightiesNames)&"'!E9:E300"),ROW(INDIRECT("9:300"))-9,0,1))=$A$1

Вот формула ...

=SUM(IF(T(OFFSET(INDIRECT("'"&EightiesNames&"'!G8:HI8"),,COLUMN(INDIRECT("G8:HI8"))-7,,1))=$A$2,N(OFFSET(INDIRECT("'"&EightiesNames&"'!G9:HI9"),TRANSPOSE(MMULT(TRANSPOSE(ROW(INDIRECT("9:300")))^0,IF(T(OFFSET(INDIRECT("'"&TRANSPOSE(EightiesNames)&"'!E9:E300"),ROW(INDIRECT("9:300"))-9,0,1))=$A$1,ROW(INDIRECT("9:300"))-9,0))),COLUMN(INDIRECT("G9:HI9"))-7,,1)),0))

Надеюсь, это поможет!

...