Excel 计算多行中符合条件的唯一记录
Excel Count unique records that match criteria in multiple rows
在 Excel 中,我有一份按年份列出的会员名单,以及他们是否每年付费。我正在尝试确定居住在纽约并在 2019 年和 2021 年都付款的会员人数。在下面的示例中,只有 Mike 和 Jane 符合条件。因为“AND”条件在同一列,所以找不到类似的例子。谢谢。
Member
Year
Paid Status
State
John
2018
Paid
NY
John
2019
Paid
NY
John
2020
Paid
NY
John
2021
Not Paid
NY
Mike
2018
Paid
NY
Mike
2019
Paid
NY
Mike
2020
Paid
NY
Mike
2021
Paid
NY
Mary
2018
Paid
CA
Mary
2019
Not Paid
CA
Mary
2020
Paid
CA
Mary
2021
Paid
CA
Jane
2018
Not Paid
NY
Jane
2019
Paid
NY
Jane
2020
Not Paid
NY
Jane
2021
Paid
NY
Tom
2018
Paid
CA
Tom
2019
Paid
CA
Tom
2020
Not Paid
CA
Tom
2021
Paid
CA
您可以根据付费状态添加新列Paid Code
:
=IF([@[Paid Status]]="Paid";1;0)
然后构建一个枢轴 table 使用:
Member
作为 Raws
Year
作为列
Paid Code
值的总和
那么你就有了一个新的 table,你可以在其中轻松提取你想要的指标。
使用 Office 365 中的动态公式 LET()
和 FILTER()
我们可以 return 正确的值:
=LET(mem,A2:A21,yr,B2:B21,sts,C2:C21,st,D2:D21,fst,FILTER(mem,(yr=2021)*(sts="paid")*(st="NY")),scnd,FILTER(mem,(yr=2019)*(sts="paid")*(st="NY")),COUNT(MATCH(fst,scnd,0)))
好吧,一些评论者认为它可能行不通,所以这是我的提议,单元格 I1 中有结果:
G2 单元格(算一年):
COUNTIFS(A2:A21,F2,D2:D21,F,C2:C21,G,B2:B21,H)
在单元格 H2 中(计算第二年):
COUNTIFS(A2:A21,F2,D2:D21,F,C2:C21,G,B2:B21,I)
在单元格 I2 中(并确保两者都存在):
IF(AND(G2,H2),1,0)
可以使用 unique() 生成 F 列中的姓名列表。
F8:I8中的数据可以根据需要进行数据验证以获得不同的结果。
我一直认为几个小功能比一个较长的功能更容易控制...
并且 table G2:H6 可以减少到 4 个单元格:
IF(AND(COUNTIFS(A2:A21,F2,D2:D21,F,C2:C21,G,B2:B21,H),COUNTIFS(A2:A21,F2,D2:D21,F,C2:C21,G,B2:B21,I)),1,"")
在 Excel 中,我有一份按年份列出的会员名单,以及他们是否每年付费。我正在尝试确定居住在纽约并在 2019 年和 2021 年都付款的会员人数。在下面的示例中,只有 Mike 和 Jane 符合条件。因为“AND”条件在同一列,所以找不到类似的例子。谢谢。
Member | Year | Paid Status | State |
---|---|---|---|
John | 2018 | Paid | NY |
John | 2019 | Paid | NY |
John | 2020 | Paid | NY |
John | 2021 | Not Paid | NY |
Mike | 2018 | Paid | NY |
Mike | 2019 | Paid | NY |
Mike | 2020 | Paid | NY |
Mike | 2021 | Paid | NY |
Mary | 2018 | Paid | CA |
Mary | 2019 | Not Paid | CA |
Mary | 2020 | Paid | CA |
Mary | 2021 | Paid | CA |
Jane | 2018 | Not Paid | NY |
Jane | 2019 | Paid | NY |
Jane | 2020 | Not Paid | NY |
Jane | 2021 | Paid | NY |
Tom | 2018 | Paid | CA |
Tom | 2019 | Paid | CA |
Tom | 2020 | Not Paid | CA |
Tom | 2021 | Paid | CA |
您可以根据付费状态添加新列Paid Code
:
=IF([@[Paid Status]]="Paid";1;0)
然后构建一个枢轴 table 使用:
Member
作为 RawsYear
作为列Paid Code
值的总和
那么你就有了一个新的 table,你可以在其中轻松提取你想要的指标。
使用 Office 365 中的动态公式 LET()
和 FILTER()
我们可以 return 正确的值:
=LET(mem,A2:A21,yr,B2:B21,sts,C2:C21,st,D2:D21,fst,FILTER(mem,(yr=2021)*(sts="paid")*(st="NY")),scnd,FILTER(mem,(yr=2019)*(sts="paid")*(st="NY")),COUNT(MATCH(fst,scnd,0)))
好吧,一些评论者认为它可能行不通,所以这是我的提议,单元格 I1 中有结果:
G2 单元格(算一年):
COUNTIFS(A2:A21,F2,D2:D21,F,C2:C21,G,B2:B21,H)
在单元格 H2 中(计算第二年):
COUNTIFS(A2:A21,F2,D2:D21,F,C2:C21,G,B2:B21,I)
在单元格 I2 中(并确保两者都存在):
IF(AND(G2,H2),1,0)
可以使用 unique() 生成 F 列中的姓名列表。
F8:I8中的数据可以根据需要进行数据验证以获得不同的结果。
我一直认为几个小功能比一个较长的功能更容易控制...
并且 table G2:H6 可以减少到 4 个单元格:
IF(AND(COUNTIFS(A2:A21,F2,D2:D21,F,C2:C21,G,B2:B21,H),COUNTIFS(A2:A21,F2,D2:D21,F,C2:C21,G,B2:B21,I)),1,"")