Смотрите ниже для переписывания.

Пожалуйста, обратитесь к данным ниже для вопроса. Самая верхняя буква ABC - это столбцы, а крайние левые цифры от 1 до 15 - строки. Остальные клетки.

           A       B        C
      1    1       A       100
      2    1       B       200
      3    1       C       300
      4    1       D       400
      5    1       E       500
      6    2       Z       100
      7    2       B       200
      8    2       C       300
      9    2       D       400
     10    2       Y       500
     11    3       K       100
     12    3       B       200
     13    3       C       300
     14    3       D       400
     15    3       J       500

Я хочу суммировать числа # в столбце C, используя в качестве критериев столбцы A и B: суммировать числа столбца C только в том случае, если столбец A равен 1 и его компоненты столбца B (A, B, C, D, E) столбца A = 1 также в столбце A = 2 и столбце A = 3 (выделено жирным шрифтом; B, C, D).

Например:

Желаемый результат для столбца A = 1 должен быть 900 (B+C+D), поскольку только столбцы B, C, D также включены для столбца A = 2 и столбца A = 3.

A (ячейка B1), E (ячейка B5) для столбца A = 1 исключены, поскольку они не дублируются для столбца A = 2 и столбца A = 3 ".

Я думал об использовании Array Formula (CSE) и SUMPRODUCT для создания своего рода правила COUNTIF, но потерял себя в формировании правильной логики.


Предлагается переписать:

Пожалуйста, обратитесь к данным ниже для вопроса.  Самые верхние значения A , B , C и Desired Result - это просто имена столбцов, а крайние левые числа от 1 до 24 - номера строк.  Остальные ячейки с данными.  Данные на самом деле не отформатированы (полужирный и курсив); форматирование ниже предназначено только для выделения ячеек, которые обсуждаются в тексте.
Примечание. Значения в столбце B уникальны для их первой буквы; нет записей Aardvark , Butterfly или Caterpillar .

       A       B         C          Desired Result
 1    17    Antelope   101                502
 2    17    Badger     201
 3    17    Cougar     301
 4    17    Dingo      401
 5    17    Elephant   501
 6    42    Zebra      102                504
 7    42    Badger     202
 8    42    Cougar     302
 9    42    Dingo      402
10    42    Yak        502
11    83    Koala      103                506
12    83    Badger     203
13    83    Cougar     303
14    83    Fox        403
15    83    Jaguar     503
16    83    Llama      603
17    83    Moose      703
18    83    Ocelot     803
19    83    Panther    903
20    95    Tiger      104                708
21    95    Dingo      204
22    95    Cougar     304
23    95    Badger     404
24    95    Weasel     504

Это только начало намного большей таблицы.  Столбец A содержит список неуникальных значений (чисел), а рабочий лист сортируется по столбцу A (или, по крайней мере, сгруппированы), поэтому все 17 сек находятся в последовательных строках, все 42 сек вместе и т.д. В реальном файле в столбце A имеется более четырех различных значений.

Группы различных значений в столбце A являются ключом к этой проблеме.  Один из способов взглянуть на это состоит в том, что несколько значений в столбце B присутствуют в каждой группе значений столбца A  Они выделены жирным шрифтом (не курсивом) в данных выше:Badger (в ячейках B2 , B7 , B12 и B23) и Cougar (в ячейках B3 , B8 , B13 и B22). 

Теперь для каждого уникального значения столбца A я хочу получить сумму значений в столбце C которые находятся в одной строке со значением столбца B , выделенным жирным шрифтом; то есть значение B которое встречается в каждой группе.

Например:

Желаемый вывод для первой группы, в которой столбец A = 17, равен 502 (показан в ячейке D1), поскольку строки 2 и 3 являются строками в "Группе 17", которые содержат Badger и Cougar , а C2+C3 - 502. Аналогично, D6 = C7+C8 , D11 = C12+C13 и D20 = C23+C22 .

Если бы ячейка B14 была изменена с Fox на Dingo , то она была бы такой же, как B4 , B9 и B21 (все в настоящее время показаны курсивом).  Следовательно, они станут жирными, и поэтому значения C4 , C9 , C14 и C21 войдут в суммы, что приведет к значениям столбца D 903, 906, 909 и 912.

Я думал об использовании формулы массива (CSE) и SUMPRODUCT для создания своего рода правила COUNTIF , но потерял себя в формировании правильной логики.

4 ответа4

2

Предполагая, что значения столбца B должны появляться только в одной другой группе, будет работать следующее:

Вот окончательная формула в одну строку в виде формулы массива (CSE). Поместите его в любую ячейку и не забудьте нажать Ctrl + Shift + Enter, чтобы разместить его:

= СУММ (ЕСЛИ (ЕСЛИОШИБКА (MATCH (ЕСЛИ (А1: А15 = 1, В1: В15, "Х ~ Х"), ЕСЛИ (А1: А15 <> 1, В1: В15, ""), 0), 0)> 0, С1: С15))

Позвольте мне сломать это:

[1] IF(A1:A15 = 1, B1:B15, «X ~ X») Возвращает массив значений B только для строк A = 1, в противном случае возвращает нежелательные (поясню).

[2] IF(A1:A15 <> 1, B1:B15, "") Возвращает массив значений B только для строк A <> 1, в противном случае пустым.

[3] Они находятся внутри MATCH([1], [2], FALSE). Для каждой из [1] строк это ищет это значение в [2], если бы [1] возвратил пустое значение вместо нежелательной, то мы бы тоже закончили поиск пробелов, и мы этого не хотим.

[4] Затем он вкладывается в IFERROR() для устранения ошибок.

[5] Который находится внутри IF() для возврата массива значений C, которые не были ошибочными в [4].

[6] СУММА добавляет все это вместе, и мы сделали!

1

Единственный метод, который будет работать (если я полностью понимаю проблему), это написать пользовательскую функцию в VBA.

Причина в том, что вам нужно будет определить количество групп и проверить, существует ли что-то в каждой группе. Если бы была функция Excel, которая возвращала уникальные значения в диапазоне, то, возможно, у вас все в порядке. Но поскольку его нет, вы не можете определить общие черты между всеми группами.

Обратите внимание, что вы МОЖЕТЕ подсчитать количество уникальных значений в столбце, но это было бы полезно, только если значение столбца B появлялось только один раз на группу.

Вот несколько ресурсов, которые помогут вам начать работу с пользовательскими функциями в VBA:

https://support.office.com/en-us/article/Create-Custom-Functions-in-Excel-2007-2f06c10b-3622-40d6-a1b2-b6748ae8231f

http://www.ozgrid.com/VBA/Functions.htm

1

Я сам не смог придумать формулу в одну строку. Я, однако, придумал двухэтапный процесс, который мог бы стать искрой для одного лайнера, поэтому я опубликую его.

  • Заполните ячейку D2 и вниз =AND(A1=1,AND(COUNTIFS($A$1:$A$15,1,$B$1:$B$15,B1)>=1,COUNTIFS($A$1:$A$15,2,$B$1:$B$15,B1)>=1,COUNTIFS($A$1:$A$15,3,$B$1:$B$15,B1)>=1))
  • Заполните ячейку D16 (или любую пустую ячейку) значением =SUMPRODUCT(C1:C15*D1:D15)

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

1

@Snoopen

Спасибо! Это сработало!!

На веб-сайте постоянно говорится, что мне нужно больше репутации, чтобы добавлять комментарии непосредственно к вашему сообщению, но ваша Ultimate One Line Formula сработала. Спасибо вам большое!

@Clif

Спасибо, что поделились своими находками и действительно помогли!

Очень ценю помощь каждого!

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .