Google sheets 搜索多个列并返回顶部单元格值
我有一个Google sheets 搜索多个列并返回顶部单元格值,google-sheets,array-formulas,google-sheets-formula,google-sheets-query,gs-vlookup,Google Sheets,Array Formulas,Google Sheets Formula,Google Sheets Query,Gs Vlookup,我有一个索引公式,它将从一行的第一个单元格中获取一个值,搜索另一个工作表的多个列以查找匹配项,并在找到匹配项时返回相应的标题行值 问题是,我必须手动复制此公式,以便将其应用于每一行。但更重要的是,如果我编辑公式或创建新行,我需要确保我将该编辑应用于每一行。我更希望在列的顶部有一个适用于下面所有单元格的公式 =INDEX(subTaskCategories!$C$1:$J$1,MAX(IF(subTaskCategories!$C$2:$J=A2,COLUMN(subTaskCategories!
索引
公式,它将从一行的第一个单元格中获取一个值,搜索另一个工作表的多个列以查找匹配项,并在找到匹配项时返回相应的标题行值
问题是,我必须手动复制此公式,以便将其应用于每一行。但更重要的是,如果我编辑公式或创建新行,我需要确保我将该编辑应用于每一行。我更希望在列的顶部有一个适用于下面所有单元格的公式
=INDEX(subTaskCategories!$C$1:$J$1,MAX(IF(subTaskCategories!$C$2:$J=A2,COLUMN(subTaskCategories!$C$2:$J)-COLUMN(A2)-1)))
除了索引
之外,还有什么替代方法可以搜索多个列并在找到匹配项时返回标题,该匹配项也可以包装在数组公式中
在subTaskData中!C2粘贴在B2单元格中:
=ARRAYFORMULA(IFERROR(VLOOKUP(REGEXEXTRACT(C2:C, "^~ (.*) ~$"),
TRIM(SPLIT(TRANSPOSE(SPLIT(QUERY(TRANSPOSE(
QUERY(TRANSPOSE(IF(INDIRECT("taskCategories!C2:"&ADDRESS(ROWS(taskCategories!A1:A),
COLUMNS(taskCategories!A1:AA1), 4))<>"", "♥"&INDIRECT("taskCategories!C2:"&
ADDRESS(ROWS(taskCategories!A1:A), COLUMNS(taskCategories!A1:AA1), 4))&"♦"&
INDIRECT("taskCategories!C1:"&ADDRESS(1, COLUMNS(taskCategories!A1:AA1), 4)), ))
, , 999^99)), , 999^99), "♥")), "♦")), 2, 0)))
=ARRAYFORMULA(IFERROR(VLOOKUP(A2:A, TRIM(SPLIT(TRANSPOSE(SPLIT(QUERY(TRANSPOSE(
QUERY(TRANSPOSE(IF(INDIRECT("subtaskCategories!C2:"&ADDRESS(ROWS(subTaskCategories!A1:A),
COLUMNS(subTaskCategories!A1:AA1), 4))<>"", "♥"&INDIRECT("subtaskCategories!C2:"&
ADDRESS(ROWS(subTaskCategories!A1:A), COLUMNS(subTaskCategories!A1:AA1), 4))&"♦"&
INDIRECT("subtaskCategories!C1:"&ADDRESS(1, COLUMNS(subTaskCategories!A1:AA1), 4)), ))
, , 999^99)), , 999^99), "♥")), "♦")), 2, 0)))
=ArrayFor公式,
例如:转置(
查询(转置)(IF(间接)(“taskCategories!C2:”)和地址(行(taskCategories!A1:A),
列(taskCategories!A1:AA1),4))“”,”♥"&间接(“任务类别!C2:”&
地址(行(taskCategories!A1:A)、列(taskCategories!A1:AA1)、4)和“♦"&
间接(“taskCategories!C1:”&地址(1,列(taskCategories!A1:AA1),4)),)
, 999^99)), 999^99), "♥")), "♦")), 2, 0)))
粘贴到C2单元格中:
=ARRAYFORMULA(IFERROR(VLOOKUP(REGEXEXTRACT(C2:C, "^~ (.*) ~$"),
TRIM(SPLIT(TRANSPOSE(SPLIT(QUERY(TRANSPOSE(
QUERY(TRANSPOSE(IF(INDIRECT("taskCategories!C2:"&ADDRESS(ROWS(taskCategories!A1:A),
COLUMNS(taskCategories!A1:AA1), 4))<>"", "♥"&INDIRECT("taskCategories!C2:"&
ADDRESS(ROWS(taskCategories!A1:A), COLUMNS(taskCategories!A1:AA1), 4))&"♦"&
INDIRECT("taskCategories!C1:"&ADDRESS(1, COLUMNS(taskCategories!A1:AA1), 4)), ))
, , 999^99)), , 999^99), "♥")), "♦")), 2, 0)))
=ARRAYFORMULA(IFERROR(VLOOKUP(A2:A, TRIM(SPLIT(TRANSPOSE(SPLIT(QUERY(TRANSPOSE(
QUERY(TRANSPOSE(IF(INDIRECT("subtaskCategories!C2:"&ADDRESS(ROWS(subTaskCategories!A1:A),
COLUMNS(subTaskCategories!A1:AA1), 4))<>"", "♥"&INDIRECT("subtaskCategories!C2:"&
ADDRESS(ROWS(subTaskCategories!A1:A), COLUMNS(subTaskCategories!A1:AA1), 4))&"♦"&
INDIRECT("subtaskCategories!C1:"&ADDRESS(1, COLUMNS(subTaskCategories!A1:AA1), 4)), ))
, , 999^99)), , 999^99), "♥")), "♦")), 2, 0)))
【代码】=数组公式(
查询(转置)(IF(间接)(“子任务类别!C2:”&地址)(行(子任务类别!A1:A)),
列(子任务类别!A1:AA1),4))“”,”♥“&间接(“子任务类别!C2:”&
地址(行(子taskcategories!A1:A)、列(子taskcategories!A1:AA1)、4)和“♦"&
间接(“子分类!C1:”&地址(1,列(子分类!A1:AA1),4)),)
, 999^99)), 999^99), "♥")), "♦")), 2, 0)))
原则上,您可以使用Hlookup或Vlookup作为索引的替代方法,但问题更多的是Max也不使用数组公式,而且您已经在使用2d数组。@player0我编辑了该问题,以包含指向我的sheet@TomSharpe我认为我不一定需要
MAX
。看起来像ARRAYFORMULA
将自动填充到底行。据我所知,它的子任务数据!C2(有问题编辑)哇!这些公式中有很多内容!再次感谢!