具有变量行选择的表中值的索引

具有变量行选择的表中值的索引

我有一张如下的表格:

示例表

我的问题如下:当指定值和列时,我希望能够获取值所在行的索引。

例如:列 3 和 1 应该输出行 3,列 1 和 5 应该输出行 5。

我知道 MATCH() 可以让我得到正确的列,但我不确定如何使用该信息。使用 INDEX(MATCH(), MATCH()) 不会得到正确的结果,因为我需要输入行的值,而这正是我要查找的。我认为不同的查找函数有相同的问题。

任何帮助将不胜感激。

答案1

一种基于 OFFSET 的可能解决方案,但如果您拥有非常大的数据集,它的易失性可能会减慢工作表的速度。

参见以下屏幕截图。N4 中的公式是

=INDEX($E$4:$E$8,MATCH(M4,OFFSET(E3,1,MATCH(L4,$F$3:$I$3,0)):OFFSET(E3,5,MATCH(L4,$F$3:$I$3,0)),0))

在此处输入图片描述

在公式中, ...:OFFSET(E3,5... 将 5 更改为表中实际的行数。

为了避免 OFFSET,您可以使用 INDEX 返回单元格引用而不是单元格值。仅使用 INDEX 的公式适用于与上述相同的示例表。

=INDEX($E$4:$E$8,MATCH(M4,INDEX($F$4:$I$4,MATCH(L4,$F$3:$I$3,0)):INDEX($F$8:$I$8,MATCH(L4,$F$3:$I$3,0)),0))

答案2

只是因为它很有趣,这里有一个数组公式可以直接获取行号:

=SUM(IF(B1:F1=col,(B2:F6=val)*ROW(A1:A5),FALSE))

在 Excel 365 之前的版本中,使用 CTRL+SHIFT+ENTER 输入以通知 Excel 将其视为数组公式。

答案3

您应该能够在不使用 OFFSET 的情况下做到这一点,因为 OF​​FSET 是不稳定的(需要重新计算很多次!)。

假设你已经定义了名称科尔瓦尔,并且您的表格如图所示从 A1 开始。那么 就是MATCH(col, B1:E1, 0)要搜索的正确列号。那么正确的行号是:

="Row " & MATCH(val, INDEX(B2:E6, 1, MATCH(col, B1:E1, 0)):INDEX(B2:E6, 5, MATCH(col, B1:E1, 0)),0)

或者如果你确实想返回 A 列中的文本:

=INDEX(A2:A6, MATCH(val, INDEX(B2:E6, 1, MATCH(col, B1:E1, 0)):INDEX(B2:E6, 5, MATCH(col, B1:E1, 0)),0))

另外如果您有 Office 365 和 LET 功能,您可以使其更高效:

=LET(colindex, MATCH(col, B1:E1, 0), INDEX(A2:A6, MATCH(val, INDEX(B2:E6, 1, colindex):INDEX(B2:E6, 5, colindex),0)))

答案4

我假设您的行和列的命名方式实际上不太可预测,因此我已将其概括为考虑。如果它们确实按所示方式命名,则问题实际上非常简单。

因此,概括来说:

=INDEX(A2:A6,  MATCH(G2,  INDIRECT(  ADDRESS(2,  MATCH(G1,B1:E1,0)+1)  &":"&  ADDRESS(6,  MATCH(G1,B1:E1,0)+1)  )))

首先,您需要在列标题行中匹配列名称。实际上,需要匹配两次,因为您需要其中的行的开始和结束来搜索数据值。(另一种方法是使用简单的列引用,本质上类似于D:D每次计算搜索一百万行,但我不推荐这样做。)两次,因为您将在ADDRESS()函数中使用它来获取数据项搜索的起始地址和结束地址。对于您提供的数据,它将给出字符串D2:D6

INDIRECT()将该字符串更改为真实引用。

外部的MATCH()工作方式与任何其他公式一样,在本例中INDEX/MATCH查找范围内的数据项并返回其索引值。3

最后,INDEX()使用...索引...返回与该索引匹配的第一列的值。ROW 3在本例中为行标题。

除非您拥有相当大的数据集(我的意思是很大),并且是使用过去 5-8 年前的计算机,否则使用像这样的易失性函数OFFSET()可能会产生明显的滞后。很大。很多公式,不仅仅是很多数据,而且这是唯一的公式。或者数据量非常大。您没有指定早期版本的 Excel,所以我猜您的计算机也是新的或较新的,所以这可能不会影响您。我的计算机已经四年多了,在这里的另一个问题上,我用 100,000 行静态数据填充了 30 列,而搜索它的公式实际上只导致大约一秒钟的延迟。因此,许多人发出的波动性警告实际上不再是问题。我只是提到它,以便其他人不会再提。

相关内容