Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 查找、匹配和连接_Google Apps Script_Google Sheets_Concatenation_Lookup_Formulas - Fatal编程技术网

Google apps script 查找、匹配和连接

Google apps script 查找、匹配和连接,google-apps-script,google-sheets,concatenation,lookup,formulas,Google Apps Script,Google Sheets,Concatenation,Lookup,Formulas,我需要一个公式/函数来连接一列和多行的单元格值。匹配条件将应用于其他列。以下是我必须做的示例: Islington | "Bunhill" | EC2M Islington | "Bunhill" | EC2Y Islington | "Bunhill" | N1 Barnet | "Burnt Oak" | HA8 Barnet | "Burnt Oak" | NW7 Barnet | "Burnt Oak" | NW9 最终结果需要如下

我需要一个公式/函数来连接一列和多行的单元格值。匹配条件将应用于其他列。以下是我必须做的示例:

Islington | "Bunhill"   | EC2M  
Islington | "Bunhill"   | EC2Y  
Islington | "Bunhill"   | N1  
Barnet    | "Burnt Oak" | HA8  
Barnet    | "Burnt Oak" | NW7  
Barnet    | "Burnt Oak" | NW9  
最终结果需要如下所示:

Islington | "Bunhill"   | EC2M, EC2Y, N1  
Barnet    | "Burnt Oak" | HA8, NW7, NW9 

基本上,我需要删除第二列中的所有重复项,但保存第三列中与每个重复项配对的数据,并将其连接到一个单元格中。

如果不经常需要,则无需脚本即可实现。假设EC2M在C2中,D1为空,您的数据在D2中排序:

=if(B1=B2,D1&", "&C2,C2) 
在E2中,两个公式都被复制下来以适应:

=B2=B3 

选择all、Ctrl+c、Edit、Paste special、Paste values only over the top和filter以选择和删除列中为TRUE的行。

您可以使用函数完成一系列步骤。从UNIQUE函数开始。将其放在一个单元格中,以便列出B列的所有唯一值:

=UNIQUE(B:B)
获取列B中的所有唯一值。

UNIQUE函数的结果如下所示:

现在您已经拥有了列B中的所有唯一值,可以使用FILTER函数检索与该唯一值匹配的所有行

=FILTER(D1:D6, B1:B6=A8)
FILTER函数列出了列中的所有结果,但是可以使用CONCATENATE函数来避免这种情况

过滤功能的结果:

连接的结果:

您需要调整FILTER函数,使其现在使用D列,而不是C列

=CONCATENATE(FILTER(D1:D6, B1:B6=A8))
这解决了获取多行数据的问题,但现在值之间没有分隔符

要解决此问题,可以创建第四列,其中包含一个在末尾添加逗号的函数:

结尾处有一个额外的逗号存在问题,您可以使用LEFT函数消除该问题:


与连接相比,TEXTJOIN有两个优点:1个可自定义分隔符,2个可跳过空格

例如:

AA | BB | CC | | EE

=TEXTJOIN,,TRUE,A1:E1

将生产:AA、BB、CC、EE


跳过空白DD并在每一个术语之间添加逗号,除了最后的

,您可以添加一个用户定义的菜单,当您选择菜单项时,该菜单运行程序。代码是用JavaScript编写的,您需要使用循环。您想保存还是删除原始数据?你需要为这个解决方案学习一些编程。邦希尔会永远和伊斯灵顿匹配吗?所有其他的可能性都是一样的吗?第一栏对比赛真的无关紧要吗?这会影响处理的方式。我需要保存原始数据。我根本没有使用谷歌电子表格的经验,除了与Excel匹配的部分。我是一名学生,有在C++/C和Java上编程的经验。我希望有一个更快的解决方案,无需阅读所有谷歌电子表格脚本文档即可编写javascript代码。是的,Bunhill将始终匹配,很抱歉,我复制了比需要更多的列。公式=ifB1=B2,D1&C2,C2出于某种原因不起作用。下一件事是,如果我把公式粘贴到第二行,它会变成这样的东西。在这种情况下,D2中的值将与C3连接。基本上,它会在每一行上进行连接,并且不会添加所有行,只添加第一行和第二行。我需要将C列中与B中相同重复值匹配的所有值连接到一个单元格中。然后继续处理B列中其他不同的重复值,并在C列中连接它们各自的值,如示例结果所示。对不起,我刚刚测试了它,我现在明白了您的想法。它可能真的有用。我需要在我的原始电子表格上测试它。顺便说一句,关于如何删除第一个单元格,我现在遇到的问题是-当它到达B列中的最后一个重复单元格时,因为if会检查它是否与下一个单元格相同,它只显示最后一个单元格的值,没有与其余单元格连接。我在原始电子表格上翻译该公式时犯了一个错误我修好了,效果很好,非常感谢!或者,=加入,过滤器C$1:C$6,B$1:B$6=A8谢谢你的回答!这很有帮助。