行に負の値がある最後のセルの列番号を見つけるための Excel 数式があります。問題は、これが配列数式であり、スプレッドシートの作成に使用する必要があるツール (Apache POI SXSSF) が配列数式をサポートしていないことです。
行の値は順序付けされていません。
スプレッドシートを手で作るときに機能する配列式は
{=MATCH(2,1/(B18:M18<0))}
通常の式で同じ結果を達成する方法はありますか?
ヒントをありがとう!
行に負の値がある最後のセルの列番号を見つけるための Excel 数式があります。問題は、これが配列数式であり、スプレッドシートの作成に使用する必要があるツール (Apache POI SXSSF) が配列数式をサポートしていないことです。
行の値は順序付けされていません。
スプレッドシートを手で作るときに機能する配列式は
{=MATCH(2,1/(B18:M18<0))}
通常の式で同じ結果を達成する方法はありますか?
ヒントをありがとう!
=MATCH(2,1/MMULT(1,-(B18:M18<0)))
説明
元の数式が正常に入力された場合、範囲B18:M18
は暗黙の共通部分を使用して評価されます (たとえば、入力された場合は、が返さC5
れると評価されます)。CTRL + SHIFT + ENTER を使用して数式を入力すると、範囲が単一のセル範囲ではなく配列として評価されることを意味します。=MATCH(2,1/(C18<0))
#N/A
MMULT
値の範囲から配列を返すことができる数少ない関数の 1 つです。-(B1:B18<0)
ここでそれを利用するには、最初に を使用して(またはN
の代わりにを使用して) ブール値の配列を数値に変換する必要があります-
。1
次に、配列評価されたかのように同じ配列を返すために (つまり、1x1 行列)を事前に乗算します。これは水平方向の配列で機能し、垂直方向の配列では後置で 1 を乗算する必要があります。つまり、引数を切り替える必要があります。
この方法は非常に一般的に機能します。別の例として、式 を使用して範囲内の最大の負の値を見つけることを検討して=MAX(IF(B1:B18<0,B1:B18))
ください。再び に置き換えると、配列エントリの必要がなくなりますB1:B18<0
。MMULT(1,-(B1:B18<0))
まったく異なる式を考え出そうとせずに、これを行う他の方法を知りません。