我在电子表格中有两个列表(唯一集合),我想得到两者的交集。

有一种简单的方法可以做到这一点吗?

这是一个示例我要实现的目标:

List 1  List 2  Expected result

 a       1        e
 b       2        f
 c       e      
 d       4      
 e       f      
 f       6      


Google表格示例

评论

您可以与我们共享文档并解释一下预期结果吗?

#1 楼

无需跳入GAS,标准电子表格功能可以轻松处理此问题。

请将以下内容粘贴到示例中的单元格中

=iferror(filter($A:$A, match($A:$A, B2:$B , false)), "no match")


match函数会生成两个范围内的错误的笛卡尔积,除非找到匹配项,否则它们会充满错误。找到匹配项时,它会将索引返回到第二个范围。

filter函数会丢弃所有废话,仅返回正确索引的值。

iferror有助于如果根本没有匹配项,则得到整齐的结果。

范围可以是任意长度,如$ A $ 2:$ A惯用语所示。

#2 楼

这个小脚本将比较两个范围,作为一个公式:

function COMPARE(array1, array2) {
  var array = [];  
  for(i=0; i<array1.length; i++) {
    for(j=0; j<array2.length; j++) {
      if(array1[i][0] == array2[j][0]) {
        // the extra square brackets will make it a 2D array, 
        // aligning it vertically
        array.push([array1[i][0]]);
      }
    }
  }
  return array;
}


在工作表中,您可以在单元格D2中添加以下公式:

=COMPARE(A2:A7,B2:B7)


通过工具菜单,脚本编辑器添加脚本。

评论


我欢迎普通的旧配方奶粉。我立刻想到他们。

–雅各布·扬·图恩斯特拉(Jacob Jan Tuinstra)
13年2月19日在12:36



可能应该/必须不能……。

–雅各布·扬·图恩斯特拉(Jacob Jan Tuinstra)
13年2月19日在12:48

谢谢,@雅各布!我从未真正有理由在gDocs中使用公式-感谢您为我打开了世界!

– NoamNelke
13年2月19日在19:03



#3 楼

如果您要查找两个范围的减法(范围1的元素不在范围2中),例如:

List 1  List 2  Expected result

 a       1        a
 b       2        b
 c       e        c
 d       4        d
 e       f      
 f       6    


这是一个公式您:

=iferror(filter($A:$A, iserror(match($A:$A, B2:$B , false))), "no match")


#4 楼

这个小脚本将比较两个范围,作为一个公式:

function intersect(array1, array2) {
  var array = [];  
  for(i=0; i<array1.length; i++) {
    for(j=0; j<array2.length; j++) {
      if(array1[i][0] == array2[j][0]) {
        // the extra square brackets will make it a 2D array, 
        // aligning it vertically
        array.push([array1[i][0]]);
      }
    }
  }
  return array;
}


额外:

function extersect(array1, array2) {
  var array = [];  
  var tmp = true;
  for(i=0; i<array1.length; i++) {
    for(j=0; j<array2.length; j++) {
      if(array1[i][0] == array2[j][0]) {
        // the extra square brackets will make it a 2D array, 
        // aligning it vertically
        tmp = false;
      }      
    }
    if(tmp == true) 
    {
      array.push([array1[i][0]]);
    }
    tmp = true;
  }
  return array;
}


在您的表格,您可以在单元格D2中添加以下公式:

=intersect(A2:A7,B2:B7)


通过工具菜单,脚本编辑器添加脚本。

= intersect( A2:A7,B2:B7)返回两个数组array1,array2上都存在的结果。

= extersect(A2:A7,B2:B7)返回范围B2:B7中不存在的array1的值