当另一列中的条件第一次满足时,从一列返回值的公式

当另一列中的条件第一次满足时,从一列返回值的公式

例子:

给定一个有四列的电子表格 - A,B,C 和 D,第 1 行是标题行...

A2=1
B2=(随机正整数)
C2=(另一个随机正整数)

A3=A2+1
B3=B2-C2
A4=A3+1
B4=B3-C2

...

D2 是问题单元格。在 D2 中,我想返回与 B 列中 <=0 的值的第一个实例匹配的 A 列的值。

在此处输入图片描述

答案1

与保罗的回答类似,我会Index使用Match

=INDEX($A:$A,MATCH(0,$B:$B,-1)+1)
  1. 使用整列,因此不需要根据列中的数据量进行调整。
  2. 使用Index而不是Offset因为Offset是易失性的 而Index不是。(易失性函数在每次工作表计算时都会重新计算,而非易失性函数仅在引用数据发生变化时才重新计算。过多的易失性函数会降低 Excel 的速度。)

答案2

您可以使用 MATCH 来获取所需内容。

MATCH(0,B2:B6,-1)+1将查找B2:B6第一个等于或小于该数字的值0并返回其相对位置。它的索引从零开始,因此我们加一以匹配您的索引。

从零开始索引意味着行 B2 为 0,B3 为 1,B4 为 2 且 B5 为 3。因此 MATCH 将返回“3”。

您在 A 列中有自己的索引,并且如果它是非连续的,或者包含其他值,或者不是从 1 开始,则可以使用偏移量来获取它:

=OFFSET(A2,MATCH(0,B2:B6,-1),0)

因此,这是使用 MATCH 的结果从 A2 向下计数以找到该行位置的值。

答案3

你不能仅使用 B2 和 C2 来计算吗?

=CEILING(B2/C2,1)+1

根据我在克里斯的回答中的评论 -更新后的版本

=INDEX($A:$A,MATCH(TRUE,INDEX($B:$B<=0,0),0))

这应该可以避免 Chris 的建议中固有的问题,即当第一个值 <=0 本身是 0 时,您会得到错误的值。

该部分$B:$B<0返回一个TRUE/FALSE值的“数组”,第一个值TRUE显然与第一个 B 列值 <0 相重合,然后 MATCH 找到第一个实例的位置,然后 INDEX 从 A 列获取相应的值。

第二个 INDEX 只是为了避免“数组输入” - 没有它也可以工作,即

=INDEX($A:$A,MATCH(TRUE,$B:$B<=0,0))

......但该版本需要“输入数组” - 即确认CTRL+SHIFT+ENTER

与之前的建议相比,使用整列稍微有点效率低下(而且这在 Excel 2003 或更早版本中不起作用 - 在这些版本中您需要使用特定范围)。

请注意,根据 Chris 的建议,匹配类型为 -1 的 MATCH 需要在 B 列中具有降序值 - 无论 B 列如何排序,此公式都有效。

相关内容