Использование КОСВЕННОГО ввода с вводом массива

#excel #excel-formula #office365

#excel #excel-формула #office365

Вопрос:

Я пытаюсь помочь студенту с действительно простой формулой, и у меня возникают проблемы с пониманием контекста решения.

Мы начинаем с небольшого списка значений в столбцах A и B и другого списка адресов в столбце C, которые указывают на значения в столбце A или B:

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

Цель состоит в том, чтобы получить элементы в столбце A или B в порядке, указанном в столбце C.

Ее первой попыткой было использовать:

 =INDIRECT(C1:C5)
  

Поскольку мы используем Excel 365, это привело к динамическому распределению #VALUE! ошибок. Я объяснил, что это связано INDIRECT() с тем, что функция worksheet не может принимать ввод массива, и если мы используем строковый ввод, например =INDIRECT("C1:C5") , все, что мы получаем, это указатели адресов, а не сами значения.

Я предложил =IF(ROWS($1:1)<=COUNTA(C:C),INDIRECT(C1),"") и скопировал вниз вручную. Она ушла и вернулась позже, чтобы сказать мне, что они нашли способ заставить INDIRECT() работать с вводом массива:

 =SUMIF(INDIRECT(C1:C5),"<>")
  

что ДЕЙСТВИТЕЛЬНО работает! Чего мы не понимаем, так это:

  1. Почему включение нерабочей формулы в SUMIF() заставляет ее работать
  2. Почему SUMIF() возвращается массив, а не одно значение

Любые пояснения или ссылки будут оценены.

Комментарии:

1. Он всегда возвращал массив. Я знаю, что вы сделали что-то похожее на =SUMPRODUCT(COUNTIF(A:A,{"Sally","George"})) COUNTIF возврат массива из двух элементов. Один — количество Sally , а другой George SUMPRODUCT — их суммы. Ваш SUMIF ничем не отличается. Они принимают массив в качестве критерия, а не диапазон. SUMIF просто видит первый как критерий, так и диапазон сумм, когда нет третьей записи. Что касается того, почему он работает с суммами / графами. Я понятия не имею, но я использовал это много раз во многих ответах. Я думаю, даже на один из ваших вопросов о суперпользователе.

2. да: superuser.com/questions/1547676 /…

3. Интересно то, что вплоть до того, что sumif возвращает массив, он показывает массив ошибок, если вы пройдете.

4. @ScottCraner Поведение SUMIF() с INDIRECT() внутренней частью полностью отличается от поведения SUMIF() , если оно относится к внешнему диапазону ячеек ……… Я просто этого не понимаю.

5. Не вникая в код, я тоже этого не делаю. Но это отличная петля, которую я часто использую.