给定一组数据,有没有一种简单的方法可以找到多个 header 列?

Is there an easy way to find multiple header columns given a set of data?

我有一个 sheet 看起来像这样:

我想要一个公式来查询 A2:E7 中的数据并从 A1:E1 中提取相应的列 headers。诀窍是值可能会出现不止一次。

示例结果如下所示:

示例 sheet:https://docs.google.com/spreadsheets/d/1Zr_q8nwYPixUjxWYdT-WlQLiGIUzqoK_cSQXSp19nJg

建议:

如果您可以编写脚本(工具 -> 脚本编辑器),您可以为此创建自定义公式:

function CUSTOMLOOKUP(key, headers, table) {
  var result = [[]];
  for (i = 0; i < table.length; i++) {
    for (j = 0; j < table[i].length; j++) {
      if (key == table[i][j]) {
        result[0].push(headers[0][j]);
      }
    }
  }
  return result;
}

保存后,在您的电子表格中,CUSTOMLOOKUP 现在可以用作:

=CUSTOMLOOKUP($G1,$A:$E,$A:$E)

然后向下拖动到其余值。

输出:

如果您想开始编写脚本,网上有很多 JavaScript references and tutorials

使用:

=ARRAYFORMULA(IFERROR(TRIM(SPLIT(IFNA(VLOOKUP(G1:G, 
 SPLIT(FLATTEN(QUERY(TRANSPOSE(QUERY(QUERY(UNIQUE(SPLIT(FLATTEN(
 IF(A2:E="",,A2:E&"♂×"&A1:E1&"♀×"&A1:E1)), "×")), 
 "select Col1,max(Col2) 
  where Col2 is not null 
  group by Col1
  pivot Col3"), 
 "offset 1", 0)),,9^9)), "♂"), 2, 0)), "♀"))))


更新:

=ARRAYFORMULA(ARRAY_CONSTRAIN(IFERROR(TRIM(SPLIT(IFNA(VLOOKUP(G1:G, 
 SPLIT(FLATTEN(QUERY(TRANSPOSE(QUERY(QUERY(UNIQUE(SPLIT(FLATTEN(
 IF(A2:E="",,A2:E&"♂×"&A1:E1&"♀×"&A1:E1)), "×")), 
 "select Col1,max(Col2) 
  where Col2 is not null 
  group by Col1
  pivot Col3"), 
 "offset 1", 0)),,9^9)), "♂"), 2, 0)), "♀"))), 9^9, 2))