【问题标题】:Excel: checking 2 lists to see if they contain values, and counting the number of times that they are paired with each otherExcel:检查 2 个列表以查看它们是否包含值,并计算它们相互配对的次数
【发布时间】:2020-11-16 07:10:54
【问题描述】:

我有 2 列,它们的值是相互配对的(col1 是 A:A,col2 是 B:B):

col1          | col2
Harry Potter  | Voldemort
Harry Potter  | Draco Malfoy
Michael Corner| Draco Malfoy
Ernie Mac     | Hannah Abbot

我想检查 col1 以查看列表 1 中是否存在此名称:

List1:
Harry Potter
Dumbledore
Ginny Weasley
Godric Gryffindor

我还想检查 col 2 以查看此名称是否存在于 List 2 中:

List2:
Salazar Slytherin
Draco Malfoy
Voldemort
Severus Snape
Vincent Crabbe

然后我想要 List1 中存在的 Col1 名称与 List2 中存在的 Col2 名称配对的次数。

这是我目前的尝试:

=arrayformula(sumproduct(if(isblank(A:A),0,1), if(isblank(B:B),0,1), if(A:A=List1,1,0), if(B:B=List2,1,0)))

但它不起作用。我怀疑 if(A:A=List1,1,0) 和 if (B:B=List2,1,0) 有问题。

基本上,我需要 col1 作为返回

1
1
0
0

col2 返回为

1
1
1
0

所以我可以总结它们。 最初,我尝试 countif col1 名称存在于 List1 中,但 countif 返回一个数字而不是数组,只是将 col1 计为 2。

【问题讨论】:

    标签: arrays excel list array-formulas exists


    【解决方案1】:

    对于第一部分,我建议使用 VLOOKUP。使用 IF 和 ISNA 函数转换为 1/0。

    1. 创建两个新列,LU1 和 LU2
    2. 在 LU1 中,使用 vlookup 搜索 list1 中的每个 col1 条目
    3. 在 LU2 中,使用 vlookup 搜索 list2 中的每个 col2 条目

    对于第二部分,创建另一列并比较 LU1 和 LU2 中的条目以找出哪些条目的值都为 1。然后只需将此列相加即可得出最终计数。

    【讨论】:

    • 有没有办法在不创建新列的情况下做到这一点?我的列表只是示例,实际上我必须浏览很多大小不一的列表,我不想为每个配对创建新列
    【解决方案2】:
    =SUMPRODUCT(
    MMULT(--(TRANSPOSE(List2)=B:B),INDEX(1+0*MUNIT(COUNTA(List2)),0,1)),
    MMULT(--(TRANSPOSE(List1)=A:A),INDEX(1+0*MUNIT(COUNTA(List1)),0,1)))
    

    这是一个用 Alt-Shift-Enter 输入的数组公式。

    令人惊讶的是,高中数组代数居然派上了用场。通过使用 COUNTA 来获取数组的大小进行了改进。

    在 Google 表格中也能正常工作。

    【讨论】:

    • 问题是我的列表大小只是一个例子;实际列表更大,我实际上有 20 个列表要查看。所以我不能使用像 MUNIT(5),0,1 这样的固定尺寸
    • @user3606790 - 只需使用 COUNTA 而不是固定值来获取数组的大小。我已经更新了公式。
    • =arrayformula(sumproduct( mmult(--(transpose(List1)=A:A, index(1+0*munit(rows(List1)),0,1))), mmult(--(transpose(List2)=B:B, index(1+0*munit(rows(List2)),0,1))))) 这会返回一个公式解析错误
    • @user3606790 - 这是一个用 Alt-Shift-Enter 输入的数组公式。
    • =arrayformula(sumproduct( mmult(--(transpose(List1)=A:A, index(1+0*munit(counta(List1)),0,1))), mmult(--(transpose(List2)=B:B, index(1+0*munit(counta(List2)),0,1))))) 也得到公式解析错误 =\
    猜你喜欢
    • 2023-03-12
    • 2011-03-05
    • 2021-10-18
    • 1970-01-01
    • 2015-05-25
    • 1970-01-01
    • 1970-01-01
    • 2022-01-15
    • 2011-04-20
    相关资源
    最近更新 更多