ある列で条件が初めて満たされたときに別の列から値を返す数式

ある列で条件が初めて満たされたときに別の列から値を返す数式

例:

A、B、C、D の 4 つの列があり、行 1 がヘッダー行であるスプレッドシートがあるとします...

A2=1
B2=(ランダムな正の整数)
C2=(別のランダムな正の整数)

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

...

D2 が問題のセルです。D2 では、列 B の <=0 である値の最初のインスタンスに一致する列 A の値を返したいと考えています。

ここに画像の説明を入力してください

答え1

ポールの答えと同様に、私IndexMatch

=INDEX($A:$A,MATCH(0,$B:$B,-1)+1)
  1. 列全体のデータを使用すると、列内のデータ量に合わせて調整する必要がなくなります。
  2. は揮発性であり、はそうではないため、Indexではなくを使用してください。(揮発性関数はシート計算ごとに再計算しますが、非揮発性関数は参照データが変更された場合にのみ再計算します。揮発性関数が多すぎると、Excel の速度が低下する可能性があります。)OffsetOffsetIndex

答え2

MATCH を使用すると必要なものを入手できます。

MATCH(0,B2:B6,-1)+1B2:B6数値と等しいかそれより小さい最初の値を検索し、0その相対位置を返します。インデックスは 0 から始まるため、インデックスと一致するように 1 を追加します。

ゼロからインデックス付けされるとは、行 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))

これにより、最初の値 <=0 が 0 自体である場合に間違った値が取得されるという、Chris の提案に固有の問題が回避されるはずです。

この部分は値$B:$B<0の「配列」を返しますTRUE/FALSE。最初の値はTRUE明らかに最初の列 B の値 <0 と一致し、MATCH はその最初のインスタンスの位置を見つけ、INDEX は列 A から対応する値を取得します。

2番目のINDEXは「配列エントリ」を回避するためだけに存在します。それがなくても動作します。

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

.......ただし、そのバージョンは「配列を入力」する必要がありますCTRL+SHIFT+ENTER。つまり、 で確認する必要があります。

これは列全体を使用するため、以前の提案よりも少し非効率的です (Excel 2003 以前では機能しません。これらのバージョンでは特定の範囲を使用する必要があります)。

Chris の提案に従って、「一致タイプ」が -1 の MATCH では、列 B の値が降順である必要があることに注意してください。この数式は、列 B が順序付けされているかどうかに関係なく機能します。

関連情報