Или состояние в графствах?

У меня есть таблица, в которой я хочу подсчитать записи одного свойства данных в другой таблице в зависимости от других свойств (столбцов данных).

Итак, у меня есть сводная таблица в виде сетки, например:

  =countifs(data type, "="&ColTags, data color, "="&ColTags, ...)

Где ColTags - это теги заголовков столбцов в итоговой сетке.

Теперь я хочу добавить к этому возможность суммировать только определенные строки в данных, а не все (в основном фильтр). Поэтому я добавил в countifs такие критерии, как:

   data city, "="&CityTag

где CityTag ссылается на ячейку, в которой пользователь может (необязательно) ввести город для фильтрации сводных записей. Я поставил "*" в эту ячейку по умолчанию, и это не имеет желаемого эффекта (как и ожидалось), и если я поставлю там название города "Техас", то будет правильно отображаться сводка только для этого города. Браво.

Это позволяет простым способом иметь возможность фильтрации (выбора) пользователя в сводной таблице для любого города или ни одного.

Это работает, за исключением числовых записей в таблице данных.

Для них сделать то же самое, но ввести число в ячейку выбора (PriceTag) не удастся. То есть в основном: «6 = *» не работает. Но если я использую оператор арифметического сравнения,

 data Price, ">="&PriceTag

оно работает. Но простой ввод подстановочного знака «*», похоже, не работает с числовыми записями, он может только сравнивать фактические значения.

Например;

 countif( A1,"="&A2)

for:  A1   A2
      abc   *    ->  1
      abc   x    ->  0
      abc  abc   ->  1

но

   6    *    ->  0    ??
   6    5    ->  0
   6    6    ->  1

Кажется, что Excel пытается автоматически распознавать и вводить числа и по-разному обрабатывать сравнения подстановочных знаков, и, следовательно, нет соответствия для «*» для чисел?

Я попытался обойти это, фактически поместив условие (а не только значение) в ячейку тега выбора, например:

countif( ... data Price, PriceTag  )

а затем в ячейку Tag фактически помещаем:

"<100"    or such...

Опять же, это хорошо работает, но я не могу найти какое-либо значение, которое можно было бы вставить, например, метасимвол «*» для текста. Я мог бы использовать огромное число в качестве числового значения по умолчанию, но это не работает ни для чего с пустым полем цены (которое у меня есть), что отличает его от значения по умолчанию без операции.

Попытка "= *" в качестве операции не работает, поскольку, похоже, требуется провести числовое сравнение.

Учитывая это, мне интересно, как можно обойтись без условий «или» для функции countifs, которая теперь принимает только серию условий AND. Чтобы иметь какое-то условие, которое говорит эквивалентно:

(PriceTag="*")||(data price, PriceTag)

Один из подходов - встроить countifs в оператор if;

   =if( PriceTag="*", Long-Countifs-without-Price, Long-countifs-with-price)

но это заметно беспорядочно, и, поскольку я хочу разрешить два таких числового выбора, даже хуже.

Какие-нибудь хорошие идиомы Excel для этого? Или мне просто нужно преобразовать в sumProduct с условиями (+, *)? Пытаясь сделать это, термин:

   ...*(data city=CityTag)

(Где CityTag - ячейка, содержащая: *) оценивается как:

   { ...list of city names...} = "*" 

что дает результат:

 { False, False, ... }

Я ожидал {True, True, ...} как я получил с результатом sumifs, поэтому у меня все еще нет хорошего решения.


person guthrie    schedule 06.10.2014    source источник
comment
Для цены (неотрицательное целое число) используйте ›= 0 вместо *. * не работает для числовых данных.   -  person Fumu 7    schedule 06.10.2014
comment
Спасибо - как я уже отмечал выше, я пробовал это, но это не удается для пустых полей цены (которые есть в моих данных). Возможно, мне просто придется просмотреть и очистить недостающие данные о ценах (преобразовать в 0).   -  person guthrie    schedule 06.10.2014


Ответы (2)


Чтобы числа и пустые ячейки были помечены звездочкой, вложите IF () с константами в СЧЁТЕСЛИ / СЧЁТЕСЛИМН и суммируйте возвращаемые значения, как это,

=SUM(COUNTIF(A1,IF(A2="*",{"","<1e99"},A2)))

Это работает только как формула массива и должно быть завершено с помощью Ctrl + Shift + Delete. Если вы работаете с оператором ИЛИ текстовых значений (например, названиями городов), используя прямое сравнение, оно работает как стандартная формула.

=SUM(COUNTIF(A1,{"abc","def",""}))

Это не работает, если поместить ={"abc","def",""} в ячейку и использовать ссылку на ячейку в качестве параметра критерия.

person Community    schedule 06.10.2014

  • Знаки = не нужны
  • Для записи по умолчанию в PriceTag используйте вместо этого ‹> x, где x - любой нечисловой символ.

    = СЧЁТЕСЛИМН (тип данных, ColTags, цвет данных, ColTags, цена данных, PriceTag)

person Ron Rosenfeld    schedule 06.10.2014