СЧЁТЕСЛИ на основе нескольких критериев, объединенных в одну ячейку

Первый постер, давний читатель!

Мне нужна помощь с формулой стиля COUNTIF. У меня есть таблица, которая содержит около 100 строк в день, и мне нужно подсчитать появление определенных критериев в таблице на сводном листе. Проблема в том, что COUNTIF должен подсчитывать элементы на основе нескольких возможных значений, объединенных в одну ячейку. Ниже приведен пример того, что я ищу:

Criteria
1.) A,B,C,D
2.) 1,2,3,4

Items A B D 1 2 7

Мне нужно, чтобы результат критерия 1 был равен 3, а результат критерия 2 был равен 2.

Что было бы моим лучшим вариантом в этом сценарии? Я попытался создать функцию в vba для разграничения ячеек и, возможно, попытаться включить ее в СЧЁТЕСЛИ/СУММПРОИЗВ. См. код, который я использую ниже:

Функция EXPLODE(str As String, необязательный разделитель As Variant) As Variant EXPLODE = Split(str, delimiter) End Function

Любой совет будет принят с благодарностью!


person Ben Creamer    schedule 02.07.2014    source источник


Ответы (2)


Или, если вас интересует чисто формульное решение, с вашими Items в A1:A6, Age в D1:D6 и вашей первой строкой, разделенной запятыми ( например A,B,C,D) в B1:

In C1:

=СУММПРОИЗВ(СЧЁТЕСЛИМН($A$1:$A$6,ОТРЕЗАТЬ(СРЕДН(ПОДСТАВИТЬ(B1,",",ПОВТОР(" ",ДЛСТР(B1))),ДЛСТР(B1)*(СТРОКА(ДВССЫЛ("1: "&1+ДЛСТР(B1)-ДЛСТР(ПОДСТАВИТЬ(B1,",",""))))-1)+1,ДЛСТР(B1))),$D$1:$D$6,">3") )

Скопируйте, если требуется, чтобы получить аналогичные результаты для строк в B2, B3 и т. д.

С Уважением

person XOR LX    schedule 02.07.2014
comment
Ах, извините. Перечитывая ваш пост, я понимаю, что на самом деле вам могут быть нужны точные совпадения в вашем диапазоне, а не частичные. Если в столбце Item есть запись, например. 1BZ0, моя текущая формула будет считать это совпадением для B. Дайте мне знать, так ли это на самом деле, и я изменю формулу. Конечно, если, как в приведенном вами примере, все записи состоят из одного символа, то это не проблема... - person XOR LX; 02.07.2014
comment
Это сработало! Именно то, что я хотел. Спасибо за вашу помощь. - person Ben Creamer; 02.07.2014
comment
* Мои критерии будут значительно больше, чем отдельные буквы, так что это не должно быть проблемой. Еще раз спасибо! - person Ben Creamer; 02.07.2014
comment
Не за что, но я немного запутался. То есть вы на самом деле не хотите проводить ТОЧНЫЕ матчи? Если вам ДЕЙСТВИТЕЛЬНО нужны точные совпадения, то эта формула вполне может дать неправильные результаты, как в примере, который я привел в своем последнем комментарии. - person XOR LX; 02.07.2014
comment
Критерии в моем примере были очень простыми по сравнению с тем, что я на самом деле буду вводить. Моими критериями будут имена учетных записей, длина которых может составлять 20 символов. Если он ищет частичные совпадения, я не думаю, что он сможет найти что-либо, кроме точных совпадений. Правильно ли я предполагаю это? - person Ben Creamer; 02.07.2014
comment
Я бы не знал, не видя ваших данных, но если бы у вас были, например. строка критериев A123, B456, C789 и поиск в диапазоне, содержащем (в отдельных ячейках) A123 и B456C789, вы получите ответ 3, а не 2, как вы могли бы надеяться. Вы видите, что я имею в виду? Я могу с радостью изменить формулу, чтобы она применялась к точным совпадениям, только если вы хотите. - person XOR LX; 02.07.2014
comment
Более того, если частичное совпадение на самом деле не является ТРЕБОВАНИЕМ, то формулу можно сделать значительно более эффективной, не в последнюю очередь потому, что ее больше не нужно будет вводить в виде массива. - person XOR LX; 02.07.2014
comment
Было бы здорово, если бы вы могли. Частичное совпадение не будет требованием формулы. Также мне в конечном итоге нужно будет добавить дополнительные критерии, основанные на другом столбце, изменит ли это формулу каким-либо образом? - person Ben Creamer; 02.07.2014
comment
Я внес поправку в пост. Обратите внимание, что это больше не формула массива (по крайней мере, в том смысле, что она не требует ввода с помощью CTRL+SHIFT+ENTER). Вы можете проверить? Однако не уверен, что вы подразумеваете под критериями добавления на основе другого столбца. Можете ли вы привести пример того, что вы имеете в виду? - person XOR LX; 02.07.2014
comment
Я протестировал его, и, похоже, он подсчитывает, сколько критериев находится в таблице, а не сколько раз каждый из критериев появляется в общей сложности. Также извиняюсь за плохое объяснение, я хочу иметь возможность добавить еще один критерий в какой-то момент. В настоящее время мне нужно только подсчитать элементы в таблице, которые соответствуют критериям 1,2,3,4, но если в какой-то момент мне может понадобиться подсчитать элементы, которые не только соответствуют 1,2,3,4, но и где элемент например, значение ›3. Извините, если я плохо объясняю это. - person Ben Creamer; 02.07.2014
comment
Извинения. Я неправильно понял, что вы хотели. У меня есть несколько измененных решений, хотя каждое из них, в свою очередь, зависит от ваших фактических типов данных. Вы говорите: Моими критериями будут имена учетных записей, которые могут состоять из 20 символов, поэтому я предполагаю, что этот формат также применим к именам предметов? Если да, можете ли вы подтвердить, что НИ ОДНО из этих названий предметов не является числовым? Я немного запутался здесь, так как ваш последний критерий включает числовое сравнение (›3), хотя, если эти записи Item имеют форму, которую вы описали выше (т.е. 20-символьные строки), то я не совсем понимаю это сравнение. - person XOR LX; 02.07.2014
comment
Извините, плохой пример, мой тип данных обычно будет текстовым или буквенно-цифровым. Мои добавленные критерии будут основаны на другом столбце. Например, каждая строка имеет два поля: столбец «Элементы», как указано выше, и еще один столбец с именем «Возраст», который будет иметь числовой тип данных. Если бы я должен был считать на основе моих критериев A, B, C, D для предметов, мог бы я также включить критерий, чтобы сказать, что учитываются только предметы, значение возраста которых больше 3? Извините, что отнимаю у вас так много времени. - person Ben Creamer; 02.07.2014
comment
Нисколько. Я исправил в соответствии с вашими запросами, предполагая, что данные возраста находятся в D1: D6, а все остальное, как указано ранее. Опять же, это НЕ формула массива. Дайте мне знать, если это то, что вам нужно. - person XOR LX; 02.07.2014
comment
Это идеально! Именно то, что мне было нужно. Большое спасибо! - person Ben Creamer; 02.07.2014
comment
Пожалуйста! Ваше здоровье. - person XOR LX; 02.07.2014

Вы можете использовать COUNTIFS в сочетании с функцией Split Развернуть.

Итак, ваша функция может возвращать массив, который можно разместить в нескольких ячейках, используя Ctrl-Shift-Return, а затем функцию

=COUNTIFS(*ItemRange*, *Criteria1_fromSplit*, *ItemRange*, *Criteria2_fromSplit*....)

Таким образом, вы можете разделить ячейку, скажем, на 5-10 значений в зависимости от того, сколько конкатенаций вы ожидаете максимально, и построить функцию COUNTIFS.

person hnk    schedule 02.07.2014
comment
Большое спасибо за ваш быстрый ответ! Один или два вопроса: потребуется ли сначала разделить объединенную ячейку на несколько отдельных ячеек, прежде чем использовать их в качестве критериев? А также как мне сослаться на массив, созданный функцией EXPLODE? - person Ben Creamer; 02.07.2014
comment
В вашей функции EXPLODE создайте массив Variant размерностей (row, col), где row = количество результатов разделения, а col = 1. Т.е. запустите цикл и заполните это OutputArray(i,1) = SplitResultVariable(i), а затем в последней строке функции поставьте EXPLODE = OutputArray. Таким образом, когда вы выделяете строки, скажем, B1:B10, вводите = EXPLODE(...) и делаете Ctrl-Shift-Return, вы получаете вывод массива. - person hnk; 02.07.2014
comment
вы не можете ссылаться на полный массив, созданный EXPLODE, вам придется оценить, что вы хотите максимум 10 критериев, а затем разделить его на 10 ячеек и использовать каждое из этих значений в качестве отдельных критериев. Таким образом, ваша строка может быть разделена на 4 подстроки, и пусть будет так, используются только первые 4 из них и т. д. - person hnk; 02.07.2014
comment
Хорошо, отлично, я попробую. На данный момент у меня есть только 11 возможных критериев, но я не могу гарантировать, что это не увеличится в будущем. Спасибо за вашу помощь! - person Ben Creamer; 02.07.2014
comment
Круто, вы можете добавить дополнительные критерии, на всякий случай :) И если это было полезно, вы можете отметить это как ответ. спасибо - person hnk; 02.07.2014