0

类似的问题似乎是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().... 进一步搜索,但否则它会按照我想要的方式工作

4

2 回答 2

0

假设您的数据位于A1:D3

Criteria put in A5:A6,(布局类似于JvdV的表格)

如果您的数据是文本值,请将公式B5复制下来:

=LOOKUP("zzz",INDEX($1:$3,SUMPRODUCT(($1:$3=A5)*ROW(A$1:A$3)),0))

如果您的数据是数值,请B5复制以下公式:

=LOOKUP(9.9E+307,INDEX($1:$3,SUMPRODUCT(($1:$3=A5)*ROW(A$1:A$3)),0))

如果您的数据混合在文本+数值中,请B5复制以下公式:

=INDEX($1:$3,SUMPRODUCT(($1:$3=A5)*ROW(A$1:A$3)),AGGREGATE(14,6,COLUMN($1:$1)/(INDEX($1:$3,SUMPRODUCT(($1:$3=A5)*ROW(A$1:A$3)),0)<>""),1))
于 2019-11-09T12:00:18.360 回答
0

让它与公式一起使用

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().... 进一步搜索,但否则它会按照我想要的方式工作

于 2019-11-10T02:26:02.863 回答