有一种简单的方法可以做到这一点吗?
这是一个示例我要实现的目标:
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的值
评论
您可以与我们共享文档并解释一下预期结果吗?