2つの既存の公式を使って問題に取り組むことから始めましょう。
あなたのy *式 =FREQUENCY(A3:I3,K3)
、実際にデータが下回った回数を計算します または等しい 、しきい値。値のみをカウントする 以下 しきい値であり、データが整数値のみで構成されていると仮定すると、次の式を使用する必要があります。 =FREQUENCY(A3:I3,K3 -1 )
。
の FREQUENCY
あなたのz *式の一部 FREQUENCY(IF(A3:I3<K3, COLUMN(A3:I3)), IF(A3:I3>K3, COLUMN(A3:I3)))
厳密に言えば、 >=
の代わりに >
。完全なz *式では、最大のカウントを抽出するだけで、実際には違いはありません。ただし、より複雑な式で使用すると正しく機能しない場合があります。たとえば、私の解法は >
(最長シーケンスの直前の値がしきい値に等しいエッジの場合)。
修正されたz *式は次のとおりです。
{=MAX(FREQUENCY(IF(A3:I3<K3,COLUMN(A3:I3)),IF(A3:I3>=K3,COLUMN(A3:I3))))}
この修正された式をベースとして使用すると、次のような解決策が得られます( N3
最長シーケンスの最初のセルの列ヘッダーを抽出します。
{=INDEX(1:1,IFERROR(SMALL(IF(A3:I3>=K3,COLUMN(A3:I3)),MOD(MAX(10^5*FREQUENCY(IF(A3:I3<K3,COLUMN(A3:I3)),IF(A3:I3>=K3,COLUMN(A3:I3)))+ROW(INDEX(N:N,1):INDEX(N:N,COUNT(IF(A3:I3>=K3,))+1))-1),10^5))+1,COLUMN(A3:I3)))}
説明:
上記の式の整形式は次のとおりです。
{=
INDEX(
(1:1),
IFERROR(
SMALL(
IF(A3:I3>=K3,COLUMN(A3:I3)),
MOD(
MAX(
10^5*FREQUENCY(IF(A3:I3<K3,COLUMN(A3:I3)),IF(A3:I3>=K3,COLUMN(A3:I3)))
+ROW(INDEX(N:N,1):INDEX(N:N,COUNT(IF(A3:I3>=K3,))+1))-1+IF(1,,"N:N needs to match the column of the cell this formula is entered into")
),
10^5
)
)+1,
COLUMN(A3:I3)
)
)}
公式が働く方法はそれがそれを変更することです FREQUENCY()
"bin"がカウントされるので、それらはbinインデックスも含みます。次に、最も長いシーケンスに対応するビンカウントからインデックスが抽出され、で使用されます。 SMALL()
そのビンの下限しきい値を取得します。このしきい値は、最長シーケンスの最初のセルの直前のセルの列番号です。最後に、最初のセルの列番号は INDEX()
最初のセルのヘッダを取得します。
あなたが提供した例では:
FREQUENCY(IF(A3:I3<K3,COLUMN(A3:I3)),IF(A3:I3>=K3,COLUMN(A3:I3)))
→ {1;0;4;0;0}
ビンカウント配列
10^5*{1;0;4;0;0}
→ {100000;0;400000;0;0}
スケールされたビンの数の配列
COUNT(IF(A3:I3>=K3,))
→ 4
これは、ビンの数より1少ない数です(これは間隔しきい値をカウントしますが、ビンの数はそれより1つ多い)
- このように
ROW(INDEX(N:N,1):INDEX(N:N,COUNT(IF(A3:I3>=K3,)) +1 )) - 1
→ ROW(INDEX(N:N,1):INDEX(N:N,5))-1
→ {0;1;2;3;4}
これは、スケールされたビンカウント配列へのインデックスです。 {100000;0;400000;0;0}
{100000;0;400000;0;0}+{0;1;2;3;4}
→ {100000;1;400002;3;4}
、変更されたビンカウント配列
MAX({100000;1;400002;3;4})
→ 400002
、最長シーケンス修正ビン数
MOD(400002,10^5)
→ 2
、しきい値配列内の最長シーケンスビンの下限しきい値のランク(binカウント配列へのインデックスは、しきい値配列内の下限しきい値のランクに対応します)
IF(A3:I3>=K3,COLUMN(A3:I3))
→ {FALSE,2,3,FALSE,FALSE,FALSE,FALSE,8,9}
、しきい値配列
SMALL({FALSE,2,3,FALSE,FALSE,FALSE,FALSE,8,9}, 2 +1
→ 3+1
→ 4
最長シーケンスの最初のセルの列番号( SMALL()
ブール値を無視します。ビンに対応する下限しきい値は、ビンの最初のセルの直前のセルの列番号
IFERROR(SMALL(…)+1,COLUMN(A3:I3))
最初のビンには下限のしきい値がなく、最長のシーケンスが最初のビンに対応する場合(つまり、最長のシーケンスがデータ範囲の最初のセルから始まる場合)、 SMALL({…},0)+1
→ #NUM!
。 IFERROR()
このエラーをトラップし、 COLUMN(A3:I3)
最初のセルの列番号を返します。
INDEX((1:1), 4 )
→ 4
最長シーケンスの最初のセルの列ヘッダー
ノート:
- 入力されている場合、整形式は実際に機能します。
- 角かっこ
(1:1)
を強制するために必要です 1:1
独自の行に留まるために。
ROW(INDEX( カラム 、1):INDEX( カラム 、…))
より一般的なものの代わりに使用されます ROW(INDIRECT("1:"&…))
これは不揮発性であり、行/列が削除されても機能します。 (提供 カラム
数式が入力されるセルの列にはもちろん設定されます。)
IF(1,," コメント 「)
インラインコメントです。 (値は常にゼロなので、数式に最終的な影響はありません。)
- 最初のセルの列番号を表示するだけの場合は、一番外側のセルを削除して式を単純化できます。
INDEX()
。
警告:
- 複数の最長シーケンスが存在する場合、上記の式はの先頭ヘッダーを返します。 最終 最長のシーケンスビンの数を変更するときに、プレーンインデックスの代わりにビンインデックスの10の補数を使用することで、最初の最長シーケンスの開始ヘッダーを返すように式を変更できます。
{= INDEX(1:1、IFERROR(小さい(IF(A3:I3> = K3、COLUMN(A3:I3)))、 10 ^ 5- MOD(MAX(MAX(10 ^ 5×周波数(IF(A3:I3 <K3、列(A3:I3))、IF(A3:I3> = K3、列(A3:I3)))+)+ 10 ^ 5-( ROW(INDEX(N:N、1):INDEX(N:N、COUNT(IF(A3:I 3> = K 3、))+ 1)) - 1) ) 、10 ^ 5))+ 1、列(A3:I3)))}
M
?