ArrayFormula в листах Google SUM, если значения соответствуют критериям - PullRequest
0 голосов
/ 17 марта 2020

Хорошо, так что я застрял на этом некоторое время, пытаясь создать формулу массива, которая будет делать следующее:

Давайте представим, что данные, с которыми я работаю, выглядят так:

         SHEET 1                                     SHEET 2
   |   A  |   B  |   C  |   D   |  E   | F        |   A   |   B  |
 1 |  Up  | Down | Down |   Up  | Down |        1 |  Red  | $50  |
 2 |  Red | Green| White| Black | Blue |        2 | Green | $100 |
 3 |  $50 | $200 | $15  | Hidden|      |        3 | White | $10  |
 4 |      | $200 |      | Hidden| $100 |        4 | Black | $70  |
 5 |  $50 | $200 | $15  | Hidden|      |        5 | Blue  | $100 |

Используя эти данные, мне нужна формула в столбце F (которую я могу скопировать и вставить для последующих ячеек в столбце).

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

Таким образом, формула должна выглядеть примерно так (это будет опубликовано в столбце F Листа 1). Кроме того, необходимо проверить, если $A$1:$E$1="Up" (игнорировать все, что не "Вверх"), если этот массив = "вверх", а затем проверить, чтобы убедиться, $A3:$E3>$0 (я намерен исключить пустые значения и "скрытые" значения), затем, если эти 2 критерия выполнены, затем вернуть соответствующее значение из $A$2:$E$2 и использовать его в качестве ключа поиска в формуле поиска (HLookup, Vlookup, offset + match и т. д. c). Так, например, Формула в F3 будет соответствовать этим двум критериям (которые будут A2 [красный], а затем суммировать все совпадающие значения - в этом случае будет только 1 совпадающее значение, но обычно будет 3 -5).

Попытка 1:

=ArrayFormula(SUM(OFFSET('Sheet 2'!$B$1,MATCH(IF(AND($A$1:$E$1="Up",$A3:$E3>"$0"),$A$2:$E$2,""),'Sheet 2'!$A$1:$A$5,0),0)))

Попытка 2:

=ArrayFormula(SUM(IF(AND($A$1:$E$1="Up",$A3:$E3>"$0"),OFFSET('Sheet 2'!$B$1,MATCH($A$2:$E$2,'Sheet 2'!$A$1:$A$5,0),0),"")))

Мои попытки первой попытки создать массив для ключа поиска соответствия, который использует операторы IF для определения результатов, которые будут использоваться в условии соответствия (в приведенном выше примере единственным результатом будет «Красный», но на реальном листе это может быть массив типа "Red, Blue, Yellow").

Моя вторая попытка сначала попытаться определить, какие ячейки мы используем (на основе условий IF), затем, если ячейка соответствует IF, мы сместим конкретную ячейку .

Замеченные мною ошибки заключаются в том, что совпадение не похоже на мой массив в ключе поиска. Первая попытка приводит к ошибке, говорящей, что она не может найти " в диапазоне. (Думаю, я не понимаю, почему он искал это ...?). Вторая попытка кажется неудачной, потому что она использует ВЕСЬ диапазон ($ A $ 2: $ E $ 2), а не только ячейки, которые соответствуют критериям.

Я пробовал такие вещи, как: VLookUp, HLookUp, LookUp (но это не отсортированный список). Я попробовал какую-то другую странную тактику, но, похоже, не дает мне того, что мне нужно.

Пока что лучшее, что я придумал, это: =ArrayFormula(SUM(IF($A$1:$E$1="Up",IF($A3:$E3>"$0",0,OFFSET('Sheet 2'!$B$1,MATCH($A2:$E2,'Sheet 2'!$A$1:$A$5,0),0)),0)))

В моем листе, он нашел 3 ячейки, которые соответствуют критериям, но вместо добавления значения ячейки 1, значения ячейки 2 и значения ячейки 3 он просто добавил значение ячейки 1 3 раза. Таким образом, кажется, что он использовал только $A2 (первый параметр в диапазоне для ключа поиска совпадения) и повторил его для каждой подходящей ячейки.

Я также попытался включить функцию фильтра (вместо IF), чтобы исключить ячейки, для которых значение «up» не установлено ($A$1:$E$1).

1 Ответ

1 голос
/ 17 марта 2020

Использовать SUMPRODUCT:

=SUMPRODUCT(($A$1:$E$1="Up")*(VLOOKUP($A$2:$E$2,'Sheet 2'!$A$1:$B$5,2,FALSE))*($A3:$E3>0)*(ISNUMBER($A3:$E3)))
...