「在庫月数」について、エクセルで自動計算・自動更新できる関数を教えていただきたいです。

具体的には、下記のような計画で、在庫・販売計画などを修正したとき、自動で「在庫月数」も算出される関数が知りたいです。また、点数も多くデータ容量を考えると、シンプルで短い関数を教えていただければベストです。
            1月 2月 3月 4月 5月     
  販売計画     500 1000 500 500  500…
  在庫       1600 800 …
  在庫月数     2.2 1.6 …
修正例:
・1月在庫を1600→800へ修正したとき、在庫月数は自動で0.8へ自動更新される
・1月在庫を1600→2100へ修正したとき、在庫月数は自動で3.2へ更新される
・4月販売を500→1000へ修正したとき、1月在庫月数は自動で2.1へ、2月在庫月数も自動で1.3へ更新される

よろしくお願いします。            

以上


 

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:2007/11/20 00:45:26
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答1件)

id:SALINGER No.1

回答回数3454ベストアンサー獲得回数969

ポイント80pt

たぶん、シンプルで短いワークシート関数は無いと思います。

ワークシート関数で実現する方法としてはこちらを参考にすればできます。

http://www.keep-on.com/excelyou/2001lng2/200106/01060025.txt

ただし、この方法でやるには行を追加したり、項目を入れ替えたりと月毎の在庫月数を求めるのには向かなかったりします。


じゃあ、ワークシート関数に無ければ作ってしまえということで、ユーザー定義関数を紹介します。

ユーザー定義関数の使い方

http://hp.vector.co.jp/authors/VA016119/hajimete/udf1.html

以下をコピペして

Function ZaiGetu(target1 As Range, target2 As Range) As Double
    ZaiGetu = funcMacro(target1.Value, 0, target1.Offset(-1, 1))
End Function

Function funcMacro(zaiko As Long, c As Double, target As Range) As Double
    If target.Value = "" Then
        funcMacro = c
    Else
        If zaiko > target.Value Then
            c = c + 1
            funcMacro = funcMacro(zaiko - target.Value, c, target.Offset(0, 1))
        Else
            funcMacro = c + zaiko / target.Value
        End If
    End If
End Function

1月の在庫月数を表示するセルの数式を

=ZaiGetu(1つ上の在庫のセル、販売計画の2月から最後までの月のセル)

にして、右にドラックして数式をコピーすることで使います。

小数点以下一桁にするには、セルの書式設定で数値にして、小数点以下を1にすればできます。

id:O___range

どうもご回答ありがとうございます。

やはりシンプルで短い関数はないでしょうかね~。

教えてもらったユーザー定義関数でトライしてみます。

2007/11/20 00:42:14

コメントはまだありません

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

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

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

回答リクエストを送信したユーザーはいません