當另一列中第一次滿足條件時從一列傳回值的公式

當另一列中第一次滿足條件時從一列傳回值的公式

例子:

給定一個包含四個欄位的電子表格 - A、B、C 和 D,第 1 行是標題行...

A2=1
B2=(隨機正整數)
C2=(另一隨機正整數)

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

D2 是有問題的儲存格。在 D2 中,我想傳回 A 列的值,該值與 B 列中 <=0 的值的第一個實例相符。

在此輸入影像描述

答案1

與保羅的回答類似,我會使用IndexMatch

=INDEX($A:$A,MATCH(0,$B:$B,-1)+1)
  1. 使用整列,這樣就不需要根據列中的資料量進行調整。
  2. 使用Index而不是OffsetsinceOffset是不穩定的,而Index不是不穩定的。 (易失性函數在每個工作表計算中重新計算,而非易失性函數僅在引用的資料變更時重新計算。過多的易失性函數會降低 Excel 的速度。)

答案2

您可以使用 MATCH 來取得您需要的內容。

MATCH(0,B2:B6,-1)+1將尋找B2:B6第一個等於或小於該數字的值0並傳回其相對位置。它從零開始索引,因此我們添加 1 來匹配您的索引。

從零開始索引表示行 B2 為 0,B3 為 1,B4 為 2,B5 為 3。

您在 A 列中有自己的索引,如果這是非連續的,或包含其他值,或不是從 1 開始,您可以使用 offset 來取得它:

=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 列是如何排序的,該公式都有效。

相關內容