【问题标题】:Google Sheets loop VLOOKUP and concatenate resultsGoogle 表格循环 VLOOKUP 并连接结果
【发布时间】:2021-11-06 07:49:51
【问题描述】:

我想遍历列中的值列表(即:Value1|Value2|Value3),使用这些值来 VLOOKUP 列,然后将连接的值返回到单元格中。

工作表示例:BUSINESSES.csv

ID Business Name Services Tags (Expected Outcome)
6259 22Handy Business Test1|Test2
6260 AAFMAA Wealth Business|Financial Management Test1|Test2|Finances|Accounting|Budgeting

请注意,“TAGS”列是空的。这是我要返回结果(并输入公式)的地方。

目标是获取每个“服务”并查看以下单独的工作表示例:

示例:SERVICES.csv

Service Name Tags to add
Financial Management Finances|Accounting|Budgeting
Business Test|Test2

所以如果一个企业有一个“企业”的服务,那么它应该返回“Test1|Test2”

如果企业拥有“Business|Financial Management”服务,那么它应该返回“Test1|Test2|Finances|Accounting|Budgeting”,因为它正在从分配给该企业的两个服务中提取标签。

我尝试了 INDEXVLOOKUPFILTERREGEXMATCH 的不同组合,但无济于事。

类似:=INDEX( FILTER( Services!A2:A, IF( REGEXMATCH( Services!A2:A, C2,))))......

【问题讨论】:

  • 您是否尝试过 TextJoin 或 Join 与您的过滤器?
  • @ScottCraner 我没有。我对FILTER 的经验不够,而且我一直遇到行/列不匹配错误。一旦完成所有循环,JOIN/TEXTJOIN 将非常适合编写最终输出
  • 你有没有包含空格的标签?
  • @player0 是的,有些标签包含空格。不过,如果这样可以更轻松地创建公式,我可以将空格查找/替换为破折号或下划线

标签: google-sheets google-sheets-formula vlookup flatten google-query-language


【解决方案1】:

尝试:

=ARRAYFORMULA(SUBSTITUTE(SUBSTITUTE(TRIM(FLATTEN(QUERY(TRANSPOSE(IFNA(VLOOKUP(
 IF(IFERROR(SPLIT(C2:C, "|"))="",, SPLIT(C2:C, "|")), 
 {G:G, SUBSTITUTE(H:H, " ", "×")}, 2, 0))),,9^9))), " ", "|"), "×", " "))

【讨论】:

  • 难以置信!我暂时使用=textjoin("|",true,filter(Services!$C2:$C, REGEXMATCH(Services!$A$2:$A, C2) )) 来解决这个问题——但它并不完美(主要是因为没有考虑到“整个单词”。但你的公式是完美的。它显示值大约需要 45 秒,因为工作表是如此巨大的,但它的工作。非常感谢你,我的男人!
猜你喜欢
  • 2020-05-13
  • 2020-09-09
  • 1970-01-01
  • 2012-11-15
  • 1970-01-01
  • 2019-07-20
  • 1970-01-01
  • 2018-07-22
  • 1970-01-01
相关资源
最近更新 更多