【问题标题】:Unpredictable output from Excel Index-MatchExcel 索引匹配的不可预测的输出
【发布时间】:2016-10-19 08:26:34
【问题描述】:

我正在尝试做一个足够简单的任务:找到数组中与某个值匹配的最后一个单元格的索引。

我正在使用 MATCH-INDEX 函数组合,结果不正确、不一致。我无法弄清楚问题所在。

在这个例子中,我使用了一个值为 1 或 -1 的数组,并试图找到数组中最后一个 1 的索引。

我的理解是(并使用评估公式工具确认),INDEX(A1:F1=1,0) 应该返回一个数组

{FALSE,TRUE,FALSE,TRUE,FALSE,FALSE}

为什么 MATCH(TRUE,...) 在输入这个索引数组时没有给出 4 的结果? MATCH 在数组中向后工作,应该返回最后一个匹配项的索引,即第 4 个位置的 TRUE 值。

但是这里的代码给出的结果是 6。

更糟糕的是,如果我使用相同的代码,但改变馈入 INDEX 的数组,结果会不一致。当我将数组值更改为 1 或 -1 时,有时公式结果会发生变化,有时不会,我不知道为什么。

下面,仅更改第 3 个数组值会将公式的结果从 4 更改为 6。这是怎么回事?!

【问题讨论】:

  • Match 有第三个参数 match_type,如果该参数为 1 或省略,则:“MATCH 找到小于或等于lookup_value 的最大值。lookup_array 参数中的值必须按升序排列,例如:...-2、-1、0、1、2、...、A-Z、FALSE、TRUE。"
  • @AxelRichter 如果是这样的话,那么我似乎无法使用 MATCH 来完成我想要做的事情。你能建议一种方法让我搜索这个数组并找到 1 或 -1 的最后一个实例吗?或者,如果字符串搜索更容易,我可以将数字更改为“是”和“否”。

标签: excel excel-formula excel-match


【解决方案1】:

似乎匹配只找到第一个,而不是最后一个。

但我有一个可能的解决方案,我会这样做:

期望:您的值介于 H4 和 H27 之间,您查找的值是“39”

1:找到所有匹配单元格的rownum

I4 --> I27: IF(H4 = 39; ROW(H4); -1)

2: 找到 I4 中的最大 rownum --> I27

MAX(....)

3:减去第一个单元格的rownum(从零开始的索引)

MAX(....) - ROW(H4)

4:将其放入矩阵函数中的一个单元格中(控制 SHIFT ENTER 生成花括号)

{=MAX(IF($H$4:$H$27=39;ROW(H4:H27);-1))-ROW(H4)}

听起来很奇怪,但很有效:)

【讨论】:

  • 我假设您在这里指的是 ROW 而不是 ZEILE?
  • 好的,谢谢。我在我的系统上试过并翻译了它(有错误:()
【解决方案2】:

Index 不返回数组,而是一个数字,顾名思义,即元素的“INDEX”,它可以满足您的问题。使用最后一个参数,您可以决定它是否必须是精确的,或者可能是下一个更小的值或下一个更大的值(最后两个选项仅适用于已排序的输入)

在您的特殊情况下(现在使用列而不是行),您可以按照我上一个答案中所写的步骤或矩阵函数来解决您的问题:

{=MAX(IF(A1:F1=1;COL(A1:F1);-1))}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-22
    • 1970-01-01
    • 2017-04-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多