エクセル超初心者からの質問です。



例えば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人5回まで
  • 登録:2010/01/13 03:05:42
  • 終了:2010/01/14 17:56:34

回答(3件)

id:heke2mee No.1

heke2mee回答回数162ベストアンサー獲得回数432010/01/13 06:49:16

ポイント50pt

テキストだけじゃ書きにくいですが、こんな感じですかね

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+遅延パーセント)

id:winbd

>1.下の式を全部選択してセルのA1の位置で貼り付ける

そのまま貼り付けるとまとまってコピーされちゃいますね。

Cに「=間隔*E2/100」Dに「=間隔*E2/100 =IF(B2=0,E1,E1+遅延パーセント)」ってことですよね?


追記:出来ません><

C2が######## D2がTRUEって表示されちゃいます。

2010/01/13 14:36:24
id:hiko3karasu No.2

hiko3karasu回答回数1058ベストアンサー獲得回数252010/01/13 09:37:21

ポイント30pt

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

のような感じで。

id:SALINGER No.3

SALINGER回答回数3430ベストアンサー獲得回数9692010/01/13 12:12:13

ポイント30pt

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関数と引数の説明はこちら

http://excel.onushi.com/function/match.htm

  • id:winbd
    減少する時間を0.5%と書きましたが、
    2回目の減少は0.5%引いた数字から0.5%引くのではなく、1%(12時間につき7.2分)引くことになります。
  • id:heke2mee
    1.Excelのバージョンを記述する
    2.VBAで書きたいのでしょうか?それとも違う方法を求めてるのでしょうか?
    3.データはどのように取得しているか
    (手入力・手動によるファイル読み込み・通信など)
    4.現在作成されているソースがあればテストできる範囲で提示する
    5.データの表示方法は?

    など分からないことが多くて回答がこないかも・・・
    あと、具体的に何を試して何処が駄目だったかなど
    書いた方がいいと思います。

  • id:winbd
    >heke2meeさん
    1.Exsel2000です。
    2.VBAがどんなものかもいまいちわかってない初心者ですが、=B2+0.5みたいな感じのやつで書ければいいのかなと思っています。
    3.手入力による手動です。
    4.とりあえず調べながらやって、基準時間から12時間ごとの連番を振ることは出来ました。
    それに対して「時間減少の日時」を入力して計算式を入れればいいのかなーと思いつつ、文系のお馬鹿なので計算式が思いつかず><
    という状態です。
  • id:nobnob3
    回答したいんですが、最終的に何をして欲しいのかが良くわかりません。

    商品に番号をふって、その商品が登場する時間を自動入力したいんでしょうか?
    つまり、
    商品番号 時間
    1 1/1 22:00
    2 1/2 10:00
    3 1/2 22:00
    ・・・
    ところが、途中で商品登場時間が短縮されるので、それに対応した計算式が欲しいということでしょうか?
  • id:winbd
    >nobnob3さん
    そうですそうです、そういうことです。
    ○個目の商品が何日何時何分に入るかがわかればいいんです。
  • id:SALINGER
    仮に、最初の減少日が1月2日9時59分の場合はどうなりますでしょうか。
    1月2日10時と1月2日9時56.4分のどちらになりますか?
  • id:winbd
    >SALINGERさん
    その場合は1月2日10時です。
  • id:winbd
    正確に言うと、1月2日9時59分59秒7ですね。
    さすがに1秒未満は必要ないですが、
    1月1日22時01分と1月2日9時59分では12時間近い差が出てしまうので、
    それをどう計算していいかがわからないのです。
  • id:SALINGER
    私の回答は、9時56.4分にしています。
    時間の減少により2通り考えられる場合は、どちらかではなく割合で処理するとなると
    VBAじゃないとちょっと難しいですね。
  • id:winbd
    >SALINGERさん
    そーなんですよ。割合を算出して計算する式が難しくて・・・
    頭がごちゃごちゃになってしまいます><
  • id:winbd
    いちおー割合を算出する式は出来ました。

    A1 2010/1/9 21:21
    A2 2010/1/10 9:21
    A3 2010/1/10 21:21
    A4 2010/1/11 9:21
    A5 2010/1/11 21:21
    A6 2010/1/12 9:21

    に対して時間減少
    B6 2010/1/12 13:33を入力した場合、

    =A6+(1*(B6-A6))+(0.995*(0.5-(B6-A6)))

    これで一応その次の商品取得日時は出せました。

    その後、=C6+(0.5*99.5%)
    を入れれば出せますが、かなりアナログな感じですよね><

    この一連の動作をまとめられたら最高なんですが~
  • id:SALINGER
    割合を考慮するということはある程度厳密なものであると思いますが、
    12時間弱の時間内で時間減少が複数回の場合というのは考慮しなくていいの?
  • id:winbd
    >SALINGERさん
    それは想定してませんでした><
    複数回も想定するとかなり面倒なことになりそうですね。
  • id:SALINGER
    厳密に考えると気になったことがもう一点。
    =A6+(1*(B6-A6))+(0.995*(0.5-(B6-A6)))
    の式は時間減少が起きた場合の次の取得日時を求める式ですが、
    前の取得日時から次の取得日時までの間に時間減少が起きるかどうかを調べるのに
    次の取得日時が必要なんじゃないでしょうか。
    どういうことかと言うと、この式を使う為にはこの式の結果が必要なのでは。
  • id:winbd
    ああ、言葉足らずですみません。
    「時間減少開始のタイミング」については見て判断出来るものなので、
    時間減少が起きたかどうかを調べる必要はありません。

    「今、時間減少が起きた」となったときに表を更新して何日何時に○個目の商品が増えるのかを確認出来ればいいのです。
  • id:heke2mee
    こちらにExcelのブックをアップしました
    DLキーワード hatena
    公開期限:2010年1月20日 0時0分0秒

    http://www1.axfc.net/uploader/Sc/so/73370

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません