Як я можу звернутися до двох різних стовпців у функції COUNTIF?


11

Я постараюся пояснити все можливе. Скажімо, у мене є аркуш, який виглядає приблизно так (у цьому надуманому прикладі, скажімо, я надсилаю маркетингові електронні листи різним людям, я знаю їх вік та поштові індекси та хочу відстежувати частоту кліків у цих листах):

        A   |    B        |    C  
  1     Age |    zip code |  click?  
  2     26  |    11111    |  true  
  3     27  |    11112    |  true  
  4     28  |    11111    |  false  
  5     27  |    22222    |  false  
  6     28  |    11112    |  false  
  7     26  |    22222    |  true  

Тепер я хочу відстежувати різні статистичні дані. У цьому випадку я хочу відстежувати частоту кліків за віком та поштовим індексом. Отже, у мене така таблиця:

      E         F          G 
 1   Age  |  # sent  | # clicked
 2   26   |
 3   26   |
 4   27   |
 5   28   |

Отже, в основному в стовпчик "# відправлено" я можу помістити (наприклад, у F2):

=COUNTIF(A:A, E2)

І це призведе до отримання 2 у комірці F2, оскільки у колонці А. було два випадки "26".

Але що робити, якщо я хочу знати, скільки натиснули? Я хочу сказати щось на кшталт:

=COUNTIF(A:A == E2  AND  C:C == True, for the same row where A:A matched E2)

Я знаю, що можу додати ще один стовпчик D з такою формулою

=IF(C2, A2, "")

Що буде, але вік у стовпці D, якщо стовпець C відповідає істині. Але у мене може бути багато критеріїв, і, схоже, мені не потрібно було б додавати ще одну "підроблену" колонку для кожного стовпця критеріїв.

Чи є спосіб це зробити? Якщо ні в Документах Google, то в Excel?


Примітка. Відповідь для нових таблиць Google - тут .

Відповіді:


11

Використовуйте комбінацію ARRAYFORMULA, SUM та арифметичних операцій

Ось функція рахувати всі кліки 26-річного віку:

=ARRAYFORMULA(sum((A:A=26) * (C:C="true")))

У цій операції є 3 частини.

  • ARRAYFORMULA піклується про зациклення в зазначеному діапазоні
  • SUM управляє підрахунок всіх справжніх результатів

По суті, true перетворюється на 1, а false - на 0. Булева логіка робиться за допомогою арифметичних операцій.

Операція AND використовує множення:

  • (1 * 1) = 1 - (True && True) = Істинно
  • (1 * 0) = 0 - (True && False) = Неправильно
  • (0 * 0) = 0 - (False && False) = Неправдиво

Для операції АБО використовується комбінація функції * SIGN та доповнення:

  • знак (1 + 1) = 1 - (Правда || Істинно) = Істинно
  • знак (1 + 0) = 1 - (Правда || Неправильно) = Істинно
  • знак (0 + 0) = 0 - (Неправдивий || Хибний) = Неправдивий

Примітка: Функція знаків необхідна через те, як булеве додавання працює інакше, ніж арифметичне додавання. В основному в булевому додаванні 1 + 1 = 1, в арифметичному додаванні 1 + 1 = 2. Очевидно, арифметичне додавання зіпсує кількість підрахунків, тому вам потрібно запустити результати операцій додавання через функцію знаків. Функція знаків повертає 1, якщо значення є позитивним, 0 якщо значення 0, і -1, якщо значення негативне.

Скажімо, ви хотіли підрахувати кліки для всіх користувачів у віці від 20 до 25 років:

=ARRAYFORMULA(sum(sign((A:A=20) + (A:A=21) + (A:A=22) + (A:A=23) + (A:A=24) + (A:A=25)) * (C:C="true")))

ЗНАК тут не потрібен? bothНаприклад, жодна осередок не може бути 20 та 23, тому додавання ніколи не дасть вам значення> 1 у цьому випадку. SIGN потрібен лише в тому випадку, якщо умови не є взаємовиключними. Також не було б легше зробити цю програму від 20 до 25? =arrayformula(sum((A:A>=20)*(A:A<=25)*(C:C=TRUE)))
barry houdini

Я намагався пояснити загальне використання логіки АБО. Якщо тести не були ексклюзивними (містяться в одному стовпці), тоді функція SIGN була б необхідною. У цьому випадку це не так. Так, так, ваш приклад був би кращим підходом, але не демонструє використання АБО. Я намагався придумати спрощений підхід, щоб продемонструвати використання АБО, що відповідає питанням ОП, але я, очевидно, не дуже добре придумувати приклади з манжети. Якщо у вас є кілька кращих прикладів, я рекомендую вам відредагувати / покращити відповідь.
Еван Плейс

Вибачте, Еване, я неправильно зрозумів - це відмінний приклад.
barry houdini

ви можете уникнути = правда, так що: = ARRAYFORMULA (сума ((A: A = 26) * C: C))
тик

1
@tic Я не використовував булева правда (яка є ПРАВИЛЬНОю в електронних таблицях Google), я мав на увазі "true" рядок, який використовувався у своєму запитанні. Спробуйте, я майже впевнений, що якщо ви перевірите значення для C: C, він завжди поверне TRUE на не порожній рядок. У клітинках електронної таблиці Google дотримується правил Excel щодо JavaScript. Ласкаво просимо у світ веселого дивовижних абстракцій.
Еван Плейс

10

Відтепер нові таблиці Google підтримують COUNTIFS, які можуть безпосередньо впоратися з необхідною роботою.

=COUNTIFS(A:A, E2, C:C, "true")

Перерахуйте всі діапазони та порівняння, щоб зробити розділені комами.


4
Дякую за нагороду, що я прокручую всю дорогу вниз. Це відповідь під час роботи з новими листами google.
Крістіан Вестербек

3

У Excel я б використовував SUMPRODUCT в Excel 2003 або COUNTIFS (з "S") у Excel 2007 або новіших версіях ......., але в документах Google спробуйте це

=arrayformula(sum((A:A=E2)*(C:C=TRUE)))


3
=COUNTA( IFERROR( FILTER('Guest List'!$G:$G ; 'Guest List'!$G:$G = "Yes" ; 'Guest List'!$L:$L = "USA" ) ) )

Це було для двох стовпців - я використовую це для мого списку гостей весілля - у цьому випадку, табулюючи "Так" при надсиланні дати збереження та "США" для розташування, тож я можу розрахувати поштову доставку пізніше. Можливо, існує коротша формула, але це, здається, працює, тому я з цим не псуюся!

Щасливий підрахунок.


1

У Excel я забув би формули та використовував таблиці Pivot.

Вам може знадобитися додати один стовпець "лічильник", який можна використовувати знову і знову як змінну, яку ви підсумуєте для отримання результатів.


0

Ви можете додати масив, який ви хочете перевірити, до {}.

У наведеному нижче прикладі:

=countif({F2,H2,J2,L2,N2,P2,R2,T2,V2,W2},"TRUE")
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.