web-dev-qa-db-ja.com

特定の期間が特定の期間を経過したときに特定する必要があるかどうかを識別する必要がある

開始日と、開始日から70日の支払い日があります。一年を通して、70日が経過するたびに、その月の開始から終了までの日付がいつになるかを知る必要があります。

たとえば、開始日が1/1/17である場合、その後の70日は3/12/17です。私のカレンダーでは、3/12/17が3月に該当するため、3月のデータを出力しようとしています。

毎月のコラムでチェックインする数式を作成しました。

ここに私が持っているものがあります:

 |   A    |   B    |   C    |   D    |
1| 1/1/17 |        |        |        |
2|        | 1/1/17 | 2/1/17 | 3/1/17 |
3|        |        |        | output |
  • A1 =開始日
  • B2 = 1月
  • C2 = 2月
  • D2 = 3月
  • D3 =出力先

=if(ROUND(MINUS(EOMONTH(D2,0),(A1+ROUND((EOMonth(D2,0)-A1)/70)*70)))>0,if(ROUND(MINUS(D2,A1))<ROUND((EOMonth(D2,0)-A1)/70)*70,"output",""),"")

これは一部の月のスロットでは機能していますが、すべてではありません。 Googleスプレッドシートで日付を測定および計算する際に、どの関数を使用するのが最適かについてアドバイスを求めています。

1
swilsonmcss

セルD3に次の式を入力します。

=if(EOMONTH($A1+70,0)=EOMONTH(D2,0),"Output","No report due")

すべての列で機能することを確認するために、$ A1を想定しました。

数式は、2行目の月の終わりとセルa1 + 70日の日付の月の終わりを比較するだけです。

日付が2017年1月1日である場合、70日後は2017年3月12日であるため、その月の終わりは2017年3月31日です。そのため、現在の月の終了日が2017年3月31日である場合、「出力」というフレーズが表示されます。

2行目に日付がある限り、すべての列で機能します。

3
mhoran_psprep

ここに私が思いついた答えがあります。誰にも役立つ場合に備えて、元の質問の一部ではない追加機能を含めています。

一部のデータは、「詳細」という名前のセカンダリシートにあります。各リモート変数の文字と数字の前にある$は、数式がシート上で移動しても参照が変更されないようにします。

A37から、アルファベットの各文字と、アルファベットの先頭に「A」が付​​いたアルファベットが繰り返されています。これは、文字を参照してセル座標への参照を作成するために、水平軸に沿ってシーケンスを模倣するために行われました。

=if(Details!$C$14=P2,sum(indirect("B4:"&indirect("A"&Details!$C$14+37)&"4")),if(Details!$C$14=O2,indirect(indirect("A"&Details!$C$14+1+37)&4),if(Q2<=Details!$C$14,if(ROUND(MINUS(EOMONTH(Q1,0),(Details!$C$12+ROUND((EOMonth(Q1,0)-Details!$C$12)/Details!$G$5)*Details!$G$5)))>0,if(ROUND(MINUS(Q1,Details!$C$12))<ROUND((EOMonth(Q1,0)-Details!$C$12)/Details!$G$5)*Details!$G$5,sum(Details!$I$3*Details!$I$4*Details!$D$3),""),""),"")))

  • 詳細!$ C $ 14 =表示する月の合計数。
  • 範囲B4:A(n)は、最後の列(先月)までの水平座標を表します。
  • Q2には、1(B2から始まる)から[詳細!$ C $ 14]で示されるように何ヶ月も表示される連続した数字が含まれています。
  • Q1には、指定された列の月を表す日付(17年4月1日など)が含まれます
  • 詳細!$ C $ 12 = 70日の連続したブロックでカウントを開始する開始日。
  • 詳細!$ G $ 5 = 70(日数は動的にすることができます)
  • sum(Details!$ I $ 3 * Details!$ I $ 4 * Details!$ D $ 3)は出力を表します。


  • Details!$C$14=P2は、先月の列に到達したかどうかを確認するために実行されます。

  • sum(indirect("B4:"&indirect("A"&Details!$C$14+37)&"4"))は、表示される月の合計数の参照に上記の垂直アルファベットリストを参照して決定された最後の列まで、B4から始まる4行目の項目を追加します。
  • if(Details!$C$14=O2,indirect(indirect("A"&Details!$C$14+1+37)&4)上記と似ていますが、右側の次の列でも同じことを行います。
  • if(Q2<=Details!$C$14最後の列の前の列にあるか、最後の列にあるかを確認します。
  • if(ROUND(MINUS(EOMONTH(Q1,0),(Details!$C$12+ROUND((EOMonth(Q1,0)-Details!$C$12)/Details!$G$5)*Details!$G$5)))>0開始日から現在の月の最後の日を、各サイクル間の日数で割って、サイクルの日数で乗算します。これは、次のサイクルの開始日が現在の月の開始後に該当するかどうかを確認することによって、次のサイクルの開始日がどの月列に該当するかを知るための鍵です。
  • if(ROUND(MINUS(Q1,Details!$C$12))<ROUND((EOMonth(Q1,0)-Details!$C$12)/Details!$G$5)*Details!$G$5は、現在の月の開始日からカレンダーの開始日を引いたものが、現在の月の最後の日からカレンダーの開始日を引いて、各サイクルの日数で割った値をサイクルの日数で割った値より小さいかどうかをチェックします。これにより、前の箇条書きポイントに加えて、次のサイクルの開始日が今月の日の外側の制限内にあるかどうかが決まります。
  • sum(Details!$I$3*Details!$I$4*Details!$D$3)実行する出力を表します。
0
swilsonmcss