【问题标题】:Search a value from another tab/sheet in google sheets based on cell reference根据单元格引用从谷歌表格中的另一个选项卡/表格中搜索值
【发布时间】:2019-10-13 08:50:29
【问题描述】:

我正在尝试在 google 表格中创建一个搜索页面,其中用户在一个单元格中输入一个值,然后其他单元格根据在搜索单元格中输入的值自动填充另一个选项卡/表格中的值(s)。

我正在尝试在数组中使用VLOOKUP,但它会给出错误或N/A

我有 'sheet1' 包含来自谷歌表单的数据(从 A 到 BN 的列),我正在尝试在 'Sheet2' 中创建一个搜索页面,用户可以在其中输入例如 ID 号,以及我想从“sheet1”中获取与“sheet1”相同行上写入的 ID 号相匹配的列的值。

我已经检查过了:

还有其他的,但我不是在寻找任何脚本。

简单的公式是:

=VLOOKUP(B3,'sheet1'!A:BN,40,False)

但是因为我的列太多,我也需要获取其他值,所以我正在使用:

=ArrayFormula(IF(LEN(B3),VLOOKUP(B3,{'sheet1'!A:BN},{iferror(match("ID-number",'sheet1'!A1:BN1,0),"No match")},FALSE),""))

解释:

B3是用户输入id数值的单元格

然后...:

{'sheet1'!A:BN},{iferror(match("ID-number",'sheet1'!A1:BN1,0),"No match")}

是我正在寻找我正在寻找的价值标题的列号的地方,在这种情况下,它是 AN,这将是第 40 列,但它可以是任何其他列。

然后 ArrayFormula 是因为 sheet1 是来自 Google 表单的数据,该表单正在使用并不断增加行数。

它给了我一个#N/A 的错误,因为它在范围内(从 A 到 BN 的所有列中的选项卡 sheet1 中没有找到值(在表 2 中的 B3 中输入))

带有有效答案的示例表在 [此处]: (https://docs.google.com/spreadsheets/d/1qLcJdCn4EdV7lPOAfZ_CMak1LBkve45FL5SXyqBV3L8/edit?usp=sharing)

注意:要搜索/返回的值在工作表 1 的同一行上,当输入新的搜索时,只有行发生变化。

【问题讨论】:

  • 我做了一个示例表 [这里] (docs.google.com/spreadsheets/d/…) 它有 2 个选项卡,示例代码位于“搜索器”选项卡中,其中包含我尝试过的各种代码(包括下面 Goran 的答案) -
  • 我看到标题下有 3 行,它们的值可能相同也可能不同。在这种情况下,你想返回哪个值?都是独一无二的,所有这些?第一个?,第二个?,第三个?,最后一个?,逗号分隔?? i.stack.imgur.com/84tQp.png
  • 我在搜索结果的每个单元格中只查找 1 个值,该值对应于在上面的搜索单元格中输入的值的行。在 excel 中,公式为:=BDEXTRAER(Tabla_name[#Todo],Tabla_name[[#Encabezados],[RPE]],B3:$E$3)

标签: filter google-sheets array-formulas google-sheets-formula gs-vlookup


【解决方案1】:
=ARRAYFORMULA(
 IF(B3<>"", SUBSTITUTE(TRANSPOSE(SPLIT(TEXTJOIN(CHAR(10)&"♦"&CHAR(10)&"♦", 1, 
            VLOOKUP(B3,            data!A:E,  {1,2,3,5}, 0)), CHAR(10))), "♦", ),
 IF(C3<>"", SUBSTITUTE(TRANSPOSE(SPLIT(TEXTJOIN(CHAR(10)&"♦"&CHAR(10)&"♦", 1, 
            VLOOKUP(C3, {data!C:C, data!A:E}, {2,3,4,6}, 0)), CHAR(10))), "♦", ), 
 IF(D3<>"", SUBSTITUTE(TRANSPOSE(SPLIT(TEXTJOIN(CHAR(10)&"♦"&CHAR(10)&"♦", 1, 
            VLOOKUP(D3, {data!E:E, data!A:E}, {2,3,4,6}, 0)), CHAR(10))), "♦", ), ))))


更新:

=IFERROR(ARRAYFORMULA(
 IF(B3<>"", SUBSTITUTE(TRANSPOSE(SPLIT(TEXTJOIN(CHAR(10)&"♦"&CHAR(10)&"♦", 1, 
            VLOOKUP(B3, {data!AN:AN, data!A:BN},  {41,38,19,11,55}, 0)), CHAR(10))), "♦", ),
 IF(C3<>"", SUBSTITUTE(TRANSPOSE(SPLIT(TEXTJOIN(CHAR(10)&"♦"&CHAR(10)&"♦", 1, 
            VLOOKUP(C3, {data!AK:AK, data!A:BN}, {41,38,19,11,55}, 0)), CHAR(10))), "♦", ), 
 IF(E3<>"", SUBSTITUTE(TRANSPOSE(SPLIT(TEXTJOIN(CHAR(10)&"♦"&CHAR(10)&"♦", 1, 
            VLOOKUP(E3, {data!BJ:BJ, data!A:BN}, {41,38,19,11,55}, 0)), CHAR(10))), "♦", ), 
 IF(D3<>"", SUBSTITUTE(TRANSPOSE(SPLIT(TEXTJOIN(CHAR(10)&"♦"&CHAR(10)&"♦", 1, 
            VLOOKUP(D3, {data!R:R, data!A:BN}, {41,38,19,11,55}, 0)), CHAR(10))), "♦", ), ))))), "no match found")

【讨论】:

    【解决方案2】:

    您不能在数组公式中使用匹配。 我建议你使用类似的东西

    =ArrayFormula(IF(LEN(B3),VLOOKUP(B3,{'sheet1'!AN:AN,'sheet1'!A:BN},column('sheet1'!X:X)-column('sheet1'!A:A)+1,FALSE),""))
    

    其中 X 是结果列(根据需要更改)。

    【讨论】:

    • 此公式确实可以正确搜索值,但它需要包含来自其他搜索单元格的搜索值。我试过嵌套 or(c3), or(d3) or(E3) 但没有用。
    • or() 也不适用于 arrayformula。您需要使用嵌套的 IF 公式
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-06
    • 2016-09-14
    • 1970-01-01
    • 2013-01-10
    • 2020-02-01
    相关资源
    最近更新 更多