2017-02-16 9 views
2

紛らわしいタイトルに対する謝罪。問題をより明確に説明し、ここで詳しく説明します。Excel式:リストの反復係数をカウントする(Vlookup/Indirect help)

私は繰り返しパターンを含むブール値のリストを持っており、それが繰り返される要因を計算しようとしています。このリストは、サイクルが始まる前は必ず不明な数のFALSE値で始まり、TRUEとそれに続く不明なFALSE値で終了します。

例のリスト:

  1. FALSE
  2. FALSE
  3. TRUE
  4. FALSE
  5. FALSE
  6. FALSE
  7. TRUE
  8. FALSE
  9. この場合
  10. FALSE
  11. FALSE
  12. TRUE
  13. FALSE
  14. FALSE
  15. FALSE
  16. FALSE
  17. FALSE
  18. FALSE

、繰り返しの因子I好きなのは4秒ですそのパターンは4行ごとに繰り返される(リストの始めと終わりを除く)。

私は、数の使用、いくつかの簡単なvlookups、およびオフセットの試みを含む答えとして4を出すための数式を書く方法を試してきました。これまでのところ、私は働く式を得ることができませんでした。私の推測では、間接関数はここで使用できるかもしれないが、私はまだそれを使用するロジックの周りに私の頭をラップすることができませんでした。

一般的な戦略の観点からは、第1および第2のTRUE値の行のインデックスを見つけることができれば、それらを減算して繰り返し係数を見つけることができます。 (私はスプレッドシートに行番号やセル参照列を簡単に実装することができます。

ありがとうございました!

答えて

3

この式を試してください:

=AGGREGATE(15,6,ROW($A$1:$A$17)/($A$1:$A$17),2)-MATCH(TRUE,$A$1:$A$17,0) 

一致がTRUEがである最初の行を見つけます。

AGGREGATEは、SMALL(IF())関数のように機能しています。セルがFALSEの場合、0で除算が返され、関数内の6がエラーを見落とします。したがって、AGGREGATEが2番目に低い行番号を引き出す配列は、セルがTRUEである行にあります。

enter image description here


編集

ここで緩く@GaryStudentsに基づいて、またそれをしない非配列数式で答え:

=MATCH(TRUE,INDEX(A:A,MATCH(TRUE,A:A,0)+1):A1040000,0) 

enter image description here

+0

うわー、完璧に機能しました!あなたはこの機能の論理を簡単に踏み台にしてもいいですか?以前は集計関数を使ったことがなかったし、OfficeSupportガイドはこのケースではいくらか混乱している。 @Scott Craner – SpippyTheInsane

+0

@SpippyTheInsane編集を参照してください。 –

+0

良い答え!私の答えは、私が嫌い* INDIRECT()*を使用しています。 –

2

は "ゲット2つの連続した出現の間の「距離」 TRUEのCES:

C1では、入力:

=MATCH("TRUE",A:A,0) 

C2で:

=MATCH("TRUE",INDIRECT("A" & C1+1 & ":A9999"),0)+C1 

最終的C3で:

=C2-C1 

enter image description here

+0

ありがとう!これは私がやろうとしていたものと非常によく似ていましたが、範囲に対して間接的な構文を正しく書くことができず、最後にC1の値をもう一度追加するのを忘れました。非常に簡単です、ありがとう! @ Gary's Student – SpippyTheInsane

+0

@SpippyTheInsaneこの方法は、鉱山が配列型の式であり、参照はデータセットでなければならないという利点があります。この方法では、ヘルパーセルを使用して配列タイプを回避します。私が違うやり方をするのは、INDEXで揮発性の間接的なものを避けることですが、それをオフにして速度を変えるべきではありません。私にとっての利点は、それがすべて1つの公式であることです。 –

+0

@SpippyTheInsaneあなたは大歓迎です。ご使用のExcelのバージョンが* Aggregate()*をサポートしていない場合を除き、Scottの式を使用してください –