指定されたしきい値を下回るセルの最長連続セットの最初のセルの列ヘッダーを取得します


0

特定のしきい値を下回るデータ行内の連続セルの最長グループの長さを計算する式があります。

そのグループの最初のセルの列見出しを表示します。それで、以下の例で私はセルが欲しいです N3 表示する 4これは、列見出しセルの値です。 D1。これは可能ですか?

データ例:

   | A | B | C | D | E | F | G | H | I | J | K         | L | M | N |
---+---+---+---+---+---+---+---+---+---+---+-----------+---+---+---+
 1 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | X | Threshold | y*| z*| h*| ...[header]
 2 |   |   |   |   |   |   |   |   |   |   |           |   |   |   |
 3 | 20| 52| 61| 23| 18| 25| 25| 40| 42| X | 30        | 5 | 4 | ? | ...[data]


y * - >次の式で計算された、データがしきい値を下回った回数。

=FREQUENCY(A3:I3,K3)

z * - >しきい値を下回るセルの最長連続セットの長さ。CSE(配列)の公式で計算されます。

{=MAX(FREQUENCY(IF(A3:I3<K3,COLUMN(A3:I3)),IF(A3:I3>K3,COLUMN(A3:I3))))}

h * - &gt;連続した最も長いセルのセットの最初のセルの列ヘッダーを返すために必要な式。


クロスポストサイトへのリンク:

https://www.mrexcel.com/forum/excel-questions/1057479-excel-formula-return-column-header-first-cell-consecutive-cells-below-threshold.html#post5077811

https://www.excelguru.ca/forums/showthread.php?9046-Return-column-header-from-first-cell-from-consecutive-cells-below-a-threshold

https://www.ozgrid.com/forum/forum/help-forums/excel-formulas/1203930-return-column-header-from-first-cell-from-consecutive-cells-below-a-threshold

https://www.excelguru.ca/forums/showthread.php?9046-Return-column-header-from-first-cell-from-consecutive-cells-below-a-threshold&p=37149&posted=1# post37149

https://www.mrexcel.com/forum/excel-questions/1057446-return-column-header-first-cell-identified-consecutive-cells-meet-criteria.html

http://www.msofficeforums.com/newreply.php?do=newreply&noquote=1&p=129061


だから答えはする必要があります M
DavidPostill

答えは「4」である必要があります。これは、「しきい値」(上記の例では「30」)を下回る、一連の最長セルのうち、最初のセルのヘッダーです。
zara007

列「M」は、閾値(30)を下回る最長の一連の連続セルの計算である。この例では、これらは列D(23、18、25、25)から始まる。
zara007

回答:


0

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)))} 
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.