КОЛИЧЕСТВО / COUNTIFS с текстом, содержащим символы и ИЛИ логику, не работает должным образом

#google-sheets #google-sheets-formula

#google-sheets #google-sheets-формула

Вопрос:

У меня есть следующий пример столбца в таблицах Google, и я пытаюсь посмотреть, сколько людей (в столбце B у меня есть имена) — будут исключены, если я выберу определенные дни:

      A
-----------
s, m
m, w
s, m
  

Итак, в принципе, если я выберу день f (пятница) или t (вт) — все люди не смогут присутствовать
Если я выберу день f или w — только один человек сможет присутствовать.

Следуя приведенному ниже примеру из документов, скобки {} предполагают, что они подходят OR , но результаты вообще не имеют смысла

  • f или t =COUNTIF(A1:A3, {"*f*", "*t*"}) — возвращает 0
  • m или s =COUNTIF(A1:A3, {"*m*", "*s*"}) — возвращает 3
  • w или s =COUNTIF(A1:A3, {"*w*", "*s*"}) — по какой-то причине возвращает 1 (против 3)
  • но если я переверну порядок — s или w =COUNTIF(A1:A3, {"*s*", "*w*"}) — по какой-то причине верну 2 (?!)

Что происходит?

Глядя на https://www.got-it.ai/solutions/excel-chat/excel-tutorial/countifs/countifs-with-multiple-criteria-and-or-logic

в нем говорится count items which have the month January or March (ИЛИ {"January", "March"} )

 Count Items with Multiple Criteria and Or Logic
In our example, we want to count items which have the month January or March and Product ID 1001 or 1002.

The formula looks like:

=SUM(COUNTIFS(B3:B13, {"1001", "1002"}, C3:C13, {"January", "March"}))

The parameter criteria_range1 is B3:B13 and the criteria1 is the array  {“1001”, “1002”}. The parameter criteria_range2 is C3:C13 and the criteria2 is {“January”, “March”}. The result of this COUNTIFS function is 2 numbers, which are number parameters of the SUM function.
  

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

1. Примечание, пожалуйста, выберите Excel или Google Sheets в своих тегах, а не оба, поскольку они работают по-разному.

Ответ №1:

это совсем не так странно. С {} вы создаете массив значений. Поскольку у вас, вероятно, нет Excel O365, вы увидите неявное пересечение возвращаемого массива или, другими словами, первое значение.

В вашем примере =COUNTIF(A1:A3, {"*w*", "*s*"}) результирующий массив {1,2} поскольку *w* существует только один и *s* два раза. Таким образом, неявное пересечение этого массива показывает вам только 1 . Если вы поменяете критерии местами, очевидно, вы увидите 2 .

В этом случае вы обычно используете SUM(COUNTIF(A1:A3, {"*w*", "*s*"})) для возврата 3 . Но будьте осторожны, что при этом вернется 5 for SUM(COUNTIF(A1:A3, {"*m*", "*s*"})) , поскольку результирующий массив будет {3,2} . Итак, в случае значений, разделенных запятыми, я бы выбрал немного другой подход.

Если вы используете электронные таблицы Google, возможно, что-то вроде:

 =IFERROR(QUERY(A:A,"Select Count(A) where A like '%s%' or A like '%x%' label Count(A) ''"),0)
  

делает то, что вы хотите?

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

1. Я не против использовать другой подход — что вы имели в виду? (Я перепробовал много вещей, пока не написал этот вопрос)

2. @RickyLevi, я обновил свой ответ возможным решением.

3. странно, если я приведу: =COUNTA(QUERY(A:A,"Select A where A like '%f%' or A like '%x%'")) (значения, которые не существуют) — результат равен 1 (?)

4. @RickyLevi, я вижу, что я сделал не так. Он возвращает ошибку, которая подсчитывается с помощью COUNTA. На этот раз давайте добавим количество в фактический запрос и завершим его IFERROR . =)