类似的问题似乎是this。但是在我的情况下,我需要一个额外的步骤(我认为)。我无法完成的是结合这两个步骤。
假设数据结构如下
Col A | Col B | Col C | Col D | Col E |
Row 1 Val1 | Val2 | Val3 |
Row 2 Val4 | Val5 | Val6 |
Row 3 Val7 | Val8 | Val9 | Val10 | Val11
我正在寻找的公式应该按照以下场景返回结果。
1)在一个单独的单元格中,如果我输入一个值(Val4);对Col A中的Val4执行 VLOOKUP (位于第 2 行),然后返回最右边的值,即Col C中的Val6
2)在一个单独的单元格中,如果我输入一个值(Val7);对Col A中的Val7执行 VLOOKUP (位于第 3 行),然后返回最右边的值,即Col D中的Val10
基本上,列值可能会向右增长。所以我需要查找第一个值-> 获取行-> 获取同一行中最右边的值....
任何帮助深表感谢。
编辑 - 1
在这里给出的指导之后,我找到了解决方案的一半。首先要提到的是,一行中的值可以增长(在我的示例数据集中,它上升到 D 列。但它可以增长到任何行的 E、F 列等)
现在,让我们假设我正在搜索的值在H1中。我把Val4放在 H1 和公式中:
OFFSET(A1,MATCH($H$1,$A:$A,0),2,1,1). //Since I have hard coded 3rd parameter to 2; it'll give me Val6 (the last column in that row)
这里通过MATCH($H$1,$A:$A,0)它返回该行。在我的示例中,它将返回第 2 行,因为我正在搜索 Val4(在 H1 中)
现在,我应该搜索第 2 行中的列并在ColC中停止,因为它是第 2 行中的最后一个值。
在 OFFSET 函数中,第三个参数查找列数。因此,如果我可以根据行改变该值;问题解决了。例如; 如果我在我的 OFFSET 公式中搜索 Val7,它会首先找到第 3 行。但现在在 OFFSET 中,第 3 个参数必须为 4(以获取最后一个值 - Val11)。
当我使用 MATCH($H$1,$A:$A,0); 搜索行时 如果我可以将该行传递给 CountA() 问题解决如下:
CountA(MATCH($H$1,$A:$A,0) : MATCH($H$1,$A:$A,0))
这是无效的。所以现在尝试使用 INDIRECT() 函数,如:
COUNTA(INDIRECT(MATCH($H$1,$A:$A,0)&":"&MATCH($H$1,$A:$A,0)))
它基本上将 row:row 构建为字符串并提供给 CountA()
这本身就可以工作,但是当我将它放到 OFFSET() 函数的第三个参数中时,它并没有按应有的方式工作。
编辑 - 2(答案)
让它与公式一起使用
OFFSET(A1,MATCH($H$1,$A:$A,0)-1,COUNTA(INDIRECT(MATCH($H$1,$A:$A,0)&":"&MATCH($H$1,$A:$A,0)))-1,1,1)
唯一的问题是在连续搜索列时,如果您有一个空单元格,它将不会使用 COUNTA().... 进一步搜索,但否则它会按照我想要的方式工作