例えば2010年1月1日22:00をスタート地点として、12時間ごとに商品が1個増える。
しかし途中で、商品が増えるまでの時間が減少することがある。
減少する時間は1回につき0.5%(12時間のうち3.6分)。
要するに、
2010年1月1日22:00~1月15日13:35までは12時間ごと
2010年1月15日13:35~1月24日23:23までは11時間56.4分ごと
2010年1月24日23:23~2月22日11:45までは11時間52.8分ごと
といった感じになるのですが、将来的に減少する日時はまだ決まっていないので、いつ減少しても対応出来るようにしたいのです。
どうやったらいいのか初心者でもわかるように出来るだけ詳しく教えてください。
ポイントは内容に応じて分配しますのでよろしくお願い致します。
テキストだけじゃ書きにくいですが、こんな感じですかね
1.下の式を全部選択して
セルのA1の位置で貼り付ける
2.名前つきセルを3つ作る(分からないときは http://www.ken3.org/vba/backno/vba013.html)
基準日時 例)H1のセルに設定する
間隔 例)I1のセルに設定する
遅延パーセント 例)J1のセルに設定する
3.名前つきセルに値を入れる
基準日時に2010/1/1 22:00:00
間隔に12:00:00
遅延パーセントに0.5
4.セルの書式を変更
A列は日付
C列は時分秒
D列は時分秒
遅延フラグのB列に1を入れるとそれ以降の日時が
変わります。
行を増やすには1行を選択してコピーする
日時 遅延フラグ
=基準日時 =間隔-D2 =間隔*E2/100 =IF(B2=0,E1,E1+遅延パーセント)
=A2+C2 =間隔-D3 =間隔*E3/100 =IF(B3=0,E2,E2+遅延パーセント)
=A3+C3 1 =間隔-D4 =間隔*E4/100 =IF(B4=0,E3,E3+遅延パーセント)
=A4+C4 =間隔-D5 =間隔*E5/100 =IF(B5=0,E4,E4+遅延パーセント)
=A5+C5 =間隔-D6 =間隔*E6/100 =IF(B6=0,E5,E5+遅延パーセント)
=A6+C6 1 =間隔-D7 =間隔*E7/100 =IF(B7=0,E6,E6+遅延パーセント)
=A7+C7 =間隔-D8 =間隔*E8/100 =IF(B8=0,E7,E7+遅延パーセント)
=A8+C8 =間隔-D9 =間隔*E9/100 =IF(B9=0,E8,E8+遅延パーセント)
=A9+C9 =間隔-D10 =間隔*E10/100 =IF(B10=0,E9,E9+遅延パーセント)
=A10+C10 =間隔-D11 =間隔*E11/100 =IF(B11=0,E10,E10+遅延パーセント)
A1に 2010/1/1 22:00
B1に 12:00:00
C1に 0.0025
といれます
A2に =A1+B2
B2に =B$1-C2*C$1
としてA2とB2をコピーして
A3、B3より下のセルにペーストします。
あとはC2より下に最初は0、商品が増えるまでの時間が減少するたびに、1、2、3と増やしていく。商品が増えるまでの時間が減少していない時は同じ数字を入力する。
C2に 0
C3に 0
C4に 0
C5に 0
C6に 1
C7に 1
C8に 1
C9に 1
C10に 2
C11に 2
のような感じで。
Excelの関数で行うとして、開始日と間隔減少日を入力することで、
商品が増える日時を求める関数を作ることはできます。
次のようにA列最初を開始日、以下を間隔減少日とします。
B列は数式を入れB2を下にオートフィルしてください。
B列は商品が増える日時が列挙されます。
A | B | |
---|---|---|
1 | 2010/1/1 22:00 | 数式1 |
2 | 2010/1/15 13:35 | 数式2 |
3 | 2010/1/24 23:23 | |
4 | 2010/2/22 11:45 |
減少する日時の前後を厳密に処理すると数式は長くなりました。
数式1
=A1+0.5-IF(INDEX(A:A,MATCH(A1,A:A,1)+1)="",(MATCH(A1,A:A,1)-1)*0.0025,IF((A1+0.5-MATCH(A1,A:A,1)*0.0025)>=INDEX(A:A,MATCH(A1,A:A,1)+1),MATCH(A1,A:A,1)*0.0025,(MATCH(A1,A:A,1)-1)*0.0025))
数式2
=B1+0.5-IF(INDEX(A:A,MATCH(B1,A:A,1)+1)="",(MATCH(B1,A:A,1)-1)*0.0025,IF((B1+0.5-MATCH(B1,A:A,1)*0.0025)>=INDEX(A:A,MATCH(B1,A:A,1)+1),MATCH(B1,A:A,1)*0.0025,(MATCH(B1,A:A,1)-1)*0.0025))
※シリアル値として処理していますので、セルの表示形式はyyyy/m/d h:mm:ssなど、日付にしてください。
シリアル値とは1日を1とする数値です。それで12時間は0.5となりその0.5%は0.0025となります。
MATCH関数と引数の説明はこちら
>1.下の式を全部選択してセルのA1の位置で貼り付ける
そのまま貼り付けるとまとまってコピーされちゃいますね。
Cに「=間隔*E2/100」Dに「=間隔*E2/100 =IF(B2=0,E1,E1+遅延パーセント)」ってことですよね?
追記:出来ません><
C2が######## D2がTRUEって表示されちゃいます。