web-dev-qa-db-ja.com

Excelを使用して同時ストリークを計算する方法

Excelを使用して、さまざまなデータの「最良」および「現在」のストリークを計算したいと思います。

その日のショップの販売目標が500であるとします。過去5年間の毎日の販売データを含む列があります。このデータを使用して、販売目標を達成するための最良の日数と現在の日数を計算するにはどうすればよいですか。

COUNTIF(C:C、 "> = 500")を使用してみましたが、これに関する問題は、目標が達成されたすべての日数をカウントするだけで、最高の「ストリーク」をカウントしない、または記録された日数をカウントしないことです。目標が達成された行。

よろしくお願いします。

1
R14

ヘルパー列はこれを簡単にします。それなしでできるかどうか見てみましょう。

基本的なアプローチ

実際には、COUNTIFをまったく使用せず、単純なインクリメントカウンターのみを使用します。

screenshot

販売目標を動的にし、セル_D1_で定義しました。他の場所に置く方が少し簡単であることがわかります。したがって、これらの手順に従っている場合は、代わりに_G1_に配置し、_$D$1_に続くすべての_$G$1_セル参照を調整することをお勧めします。

この式は機能します

=IF(C2<$D$1,"dq",IF(AND(C1<$D$1,C2>=$D$1),1,D1+1))

_=IF(C2<$D$1,"dq",_現在のレコードが適格でない場合は、失格とします。

IF(AND(C1<$D$1,C2>=$D$1),1,現在のレコードが最初の連続した修飾子である場合(_C1<$D$1_は前のレコードの 'dq'ステータスをテストし、_C2>=$D$1_は現在のレコードの修飾をテストします)、その値を1

_D1+1))_ Else-つまり、現在のレコードが不適格な合計でも最初の適格な合計でもない場合、その値をその上のレコードより1大きくします。

この式は_D2_からコピーされます。 _D1_は500のストリークのように見えるため、最初のレコード(行2)が適格レコードであり、ターゲットを定義する必要があるため_D1_を使用すると、この正確なセットアップで問題が発生することに注意してください。これを回避するための簡単な方法がいくつかあります。例の目的のために、簡単にするために、最初のレコードが適格ではないことを確認することを選択しました。

ここから、次のいくつかの機能を追加するのは非常に簡単です。

「最長ストリーク」を追加

add MAX

=MAX(INDIRECT("D2:D"&COUNTA(D:D)))

ここでは動的セル参照を使用しているため、範囲の拡大について心配する必要はありません。 _D:D_を使用することはできません。これは、その最大値が_D1_の500として返されるためです。ただし、必要に応じて、単に=MAX($D$2:$D$9999)などと書くこともできます。とにかく、INDIRECTを使用することをお勧めします。

そして、おそらく、ABに識別情報があります。おそらく、「最長のストリーク」に関連付けたい日付ですか?

関連データ

winning date

=INDEX(B:D,MATCH(G2,D:D,0),1)

これは、上のセルで計算された、達成された最長のストリークの(first)インスタンスを見つけるための簡単なINDEXMATCHです。

制限事項

  1. 先に述べたように、配列や実際に複雑なものは使用していないため、同点の場合、これはその長さのストリークの最初の発生を返します。私はこれを機能と呼んでいます-最後のレコードを殴られたするまで、新しいレコードを設定していませんよね?
  2. 同じ理由で、nの値が1より大きい場合、nth-最長のストリークがいつ何であったかを知りたい場合、このアプローチはうまく機能しません。 、それはあなたにwhatそれらの縞があったことを伝えることができます-そのためにLARGEを使用してください-しかし(nth-最長の縞の長さからn> 1)定義上、複数回発生するため、そのストリークの日付を取得するルックアップは、このアプローチでは機能しません。
  3. これには、データセットが例に示されている/指定されているとおりである必要があります。明らかに、販売記録は日付順に並べる必要があります。おそらく、単一のストアのデータを含むシートに対してのみ機能するように設定されていることに注意することがより重要です。
1
Alex M