仅当其他两个列与特定值匹配时如何计算唯一值
How to count unique values only if two other columns match to specific values
我正在尝试计算位置和日期等于特定值时的不同 ID 值。
有一些 articles/questions 概述了一些不同的方法来做到这一点(例如 How to count unique values in Excel with two conditions),但出于某种原因 none 似乎对我有用(这可能是因为我做错了什么)。
我在excel中的table是这样设置的
+------------------+--------------+------------+
| Col A - Location | Col B - Date | Col C - ID |
+------------------+--------------+------------+
| A | Mar 2018 | 1 |
| B | Mar 2018 | 2 |
| C | Mar 2018 | 3 |
| A | Mar 2018 | 4 |
| B | Mar 2018 | |
| C | Mar 2018 | 5 |
| A | Mar 2018 | 6 |
| B | Apr 2018 | 1 |
| C | Apr 2018 | 2 |
| C | Apr 2018 | 4 |
| C | Mar 2018 | 5 |
| A | Mar 2018 | 1 |
| B | Mar 2018 | 5 |
| B | Mar 2018 | 8 |
| B | Mar 2018 | |
| C | Mar 2018 | 1 |
| B | Mar 2018 | 3 |
+------------------+--------------+------------+
我尝试了在网上找到的 4 种不同的计算方法,并进行了修改以适合我的数据:
Calc 1 (run by just hitting ENTER):
=COUNTIFS(A:A, "A",C:C,C:C,B:B, "Mar 2018")
Result = 2
Calc 2 (running by hitting CTRL + SHFT + ENTER):
=SUMPRODUCT( ( (C:C <> "") * (A:A = "A") * (B:B = "Mar 2018") ) / COUNTIFS(C:C,C:C & "",A:A, "A",B:B, "Mar 2018"))
Result = 0
Calc 3 (running by hitting CTRL + SHFT + ENTER):
=SUM(IF(FREQUENCY(IF(C:C<>"", MATCH(C:C,C:C,0)),ROW(C:C)-ROW(C2)+1),1))
Result = 0
Calc 4 (running by hitting CTRL + SHFT + ENTER):
=SUM(IF(FREQUENCY(IF((A:A="A")*(B:B="Mar 2018")*(C:C<>""),MATCH(C:C,C:C,0)),ROW(C:C)-MIN(ROW(C:C))+1),1))
Result = 0
(This one keeps giving an error message about running out of resources while trying to calculate)
我试图找到的实际结果是 'Col A - Location' 的值是 'A' 和 'Col B - Date' 的值是 'Mar 2018' 唯一 # 'Col C - ID' 应该是 3.
使用多个条件进行计数的最简单方法是使用 SUMPRODUCT:
=SUMPRODUCT(--(A1:A20="A"),--(B1:B20=DATE(2018,3,1)),--(C1:C20=3))
双重否定 (--) 将 True/False 答案转换为 1 或 0,以便和积完成其工作。
我建议您限制您的范围(即不要像 A:A 那样使用整列),因为它会减慢公式(很多)。此外,根据您的条件使用锁定的参考单元格可能更容易。如果您在第一行输入您的条件,您可以使用:
=SUMPRODUCT(--(A2:A20=$A),--(B2:B20=$B),--(C1:C20=$C))
编辑
根据 beatrixb 的说明,您需要一个辅助列来连接三列。假设你的数据从 A2 开始,你会把它放在 D2 中(如果你还没有每行的唯一标识符):
=A2&B2&C2
并在另一个单元格中使用此公式 return 基于两个条件的唯一值的数量:
=SUMPRODUCT(--(A2:A20=$A),--(B2:B20=$B),(1/COUNTIF(D2:D20,D2:D20)))
我正在尝试计算位置和日期等于特定值时的不同 ID 值。
有一些 articles/questions 概述了一些不同的方法来做到这一点(例如 How to count unique values in Excel with two conditions),但出于某种原因 none 似乎对我有用(这可能是因为我做错了什么)。
我在excel中的table是这样设置的
+------------------+--------------+------------+
| Col A - Location | Col B - Date | Col C - ID |
+------------------+--------------+------------+
| A | Mar 2018 | 1 |
| B | Mar 2018 | 2 |
| C | Mar 2018 | 3 |
| A | Mar 2018 | 4 |
| B | Mar 2018 | |
| C | Mar 2018 | 5 |
| A | Mar 2018 | 6 |
| B | Apr 2018 | 1 |
| C | Apr 2018 | 2 |
| C | Apr 2018 | 4 |
| C | Mar 2018 | 5 |
| A | Mar 2018 | 1 |
| B | Mar 2018 | 5 |
| B | Mar 2018 | 8 |
| B | Mar 2018 | |
| C | Mar 2018 | 1 |
| B | Mar 2018 | 3 |
+------------------+--------------+------------+
我尝试了在网上找到的 4 种不同的计算方法,并进行了修改以适合我的数据:
Calc 1 (run by just hitting ENTER):
=COUNTIFS(A:A, "A",C:C,C:C,B:B, "Mar 2018")
Result = 2
Calc 2 (running by hitting CTRL + SHFT + ENTER):
=SUMPRODUCT( ( (C:C <> "") * (A:A = "A") * (B:B = "Mar 2018") ) / COUNTIFS(C:C,C:C & "",A:A, "A",B:B, "Mar 2018"))
Result = 0
Calc 3 (running by hitting CTRL + SHFT + ENTER):
=SUM(IF(FREQUENCY(IF(C:C<>"", MATCH(C:C,C:C,0)),ROW(C:C)-ROW(C2)+1),1))
Result = 0
Calc 4 (running by hitting CTRL + SHFT + ENTER):
=SUM(IF(FREQUENCY(IF((A:A="A")*(B:B="Mar 2018")*(C:C<>""),MATCH(C:C,C:C,0)),ROW(C:C)-MIN(ROW(C:C))+1),1))
Result = 0
(This one keeps giving an error message about running out of resources while trying to calculate)
我试图找到的实际结果是 'Col A - Location' 的值是 'A' 和 'Col B - Date' 的值是 'Mar 2018' 唯一 # 'Col C - ID' 应该是 3.
使用多个条件进行计数的最简单方法是使用 SUMPRODUCT:
=SUMPRODUCT(--(A1:A20="A"),--(B1:B20=DATE(2018,3,1)),--(C1:C20=3))
双重否定 (--) 将 True/False 答案转换为 1 或 0,以便和积完成其工作。
我建议您限制您的范围(即不要像 A:A 那样使用整列),因为它会减慢公式(很多)。此外,根据您的条件使用锁定的参考单元格可能更容易。如果您在第一行输入您的条件,您可以使用:
=SUMPRODUCT(--(A2:A20=$A),--(B2:B20=$B),--(C1:C20=$C))
编辑
根据 beatrixb 的说明,您需要一个辅助列来连接三列。假设你的数据从 A2 开始,你会把它放在 D2 中(如果你还没有每行的唯一标识符):
=A2&B2&C2
并在另一个单元格中使用此公式 return 基于两个条件的唯一值的数量:
=SUMPRODUCT(--(A2:A20=$A),--(B2:B20=$B),(1/COUNTIF(D2:D20,D2:D20)))