【问题标题】:What is an equivalent for INDEX in ARRAYFORMULA?ARRAYFORMULA 中 INDEX 的等价物是什么?
【发布时间】:2017-01-07 22:07:38
【问题描述】:

我有(我认为是)一个简单的查找表,其中包含一些汇率。在那里,我正在根据行和列索引查找值。

如何在这样的 ARRAYFORMULA 中做到这一点?:

=ARRAYFORMULA(INDEX(x!C2:C, F1:F))

x 是保存值的表,我对 C 列感兴趣,行索引保存在我的 F 列中。单值查找,如 INDEX(x!C2:C, F7)正在按预期工作。

但遗憾的是,ARRAYFORMULA 无法正常工作,因为我猜 ARRAYFORMULA 不支持 INDEX。

【问题讨论】:

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


【解决方案1】:

vlookup 可以适应模仿index 的功能,方法是将查找表的第一列设置为行号(具有适当的偏移量)。示例:

=arrayformula(vlookup(F1:F, {row(x!C2:C) - row(x!C2) + 1, x!C2:C}, 2))

执行您尝试对“=ARRAYFORMULA(INDEX(x!C2:C, F1:F))”执行的操作。

查找表{row(x!C2:C) - row(x!C2) + 1, x!C2:C} 具有第一列 1,2,3,...,第二列是您希望索引的范围。因此,对于 F1:F 中的每个值,vlookup 都会访问 index 将访问的 x!C2:C 条目。

【讨论】:

  • 是的,我看到在这种情况下推荐使用 vlookup,但据我了解,您需要知道您正在查找的值,不是吗?好吧,我不知道我在查找什么值,这就是我查找它的原因!!!
  • 行得通,谢谢!好把戏。当一个简单的基于索引的寻址会立即检索到答案时,为每次查找搜索整个第一列感觉有点浪费。我应该担心吗?还有其他更快的方法吗?
  • 我不会担心的。默认情况下(第 4 个参数不为 False),vlookup 假定键集已排序并执行二分查找 log(n)。
【解决方案2】:

您可以编写自定义脚本来执行此操作,然后可以使用该脚本代替常规 index() 函数。只需执行工具 --> 脚本编辑器,然后粘贴代码,保存,然后您就可以像使用 Google 表格中的普通函数一样使用该函数了。

代码:

function INDEXMULTI(array, rows, columns) {
  var ret = new Array;
  var i;
  if (rows[0].length != columns[0].length)
    return "Error: Row and column count must be the same";
  for (i=0; i<rows[0].length; i++)
    ret.push(array[(rows[0][i]-1)][(columns[0][i]-1)]);
  return ret;
}

此函数将要从中提取数据的数组作为第一个参数,然后将要提取的数据的行和列作为第二个和第三个参数。代码中的 [0] 只是从一维数组中提取值,而 -1 是因为 javascript 数组是从零开始的,而 Google 表格是从 1 开始的。

你可以在这里看到它的演示:https://docs.google.com/spreadsheets/d/1o6uiRr_OKh6lOUY4pOp_5z7hAIzGifFaXUIMOO7SCoc/edit#gid=0

【讨论】:

    【解决方案3】:

    您可以通过在 x!C1 中写入“Anything”并使用 Vlookup 替换索引: =ARRAYFORMULA(Vlookup("任何东西", TRANSPOSE(x!C2:C),F1:F))

    【讨论】:

      【解决方案4】:

      请原谅我的英语。 可以以与 INDEX 几乎相同的方式使用 VLOOKUP。 =IFERROR(ARRAYFORMULA(VLOOKUP(ARRAYFORMULA((F1:F1000));({ARRAYFORMULA(ROW(x!C2:C1000))(x!C2:C1000)});2;0));"")

      主要是限制from和to的范围,让arrayformula不循环

      1. 对于 VLOOKUP,search_key 是 ARRAYFORMULA ((F1:F1000) - 范围数组。
      2. 对于 VLOOKUP 范围 -({ARRAYFORMULA(ROW (x!C2:C1000))(x!C2:C1000)})
      • 从 2 列生成我们的表,第一列是“ARRAYFORMULA(ROW(x!C2:C1000))”,第二列是 (x!C2:C1000)。 “\”符号需要写入数组,而不是在 1 列中,而是在 2 列中。

      【讨论】:

      • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
      猜你喜欢
      • 2023-03-31
      • 2014-05-08
      • 2014-06-12
      • 1970-01-01
      • 2022-11-28
      • 2021-06-19
      • 2012-07-20
      • 2023-03-30
      • 2011-04-08
      相关资源
      最近更新 更多