エクセル関数 平均価格の計算について

このQ&Aのポイント
  • 価格が変動する商品の、保有在庫の平均価格の計算について質問させていただきます。
  • 下記のように、「先入先出」で購入と売却を繰り返した場合の、保有在庫の平均価格(E)を計算する数式に関しまして、ご存知の方がいらっしゃいましたらご教示願います。
  • 購入価格(A) 種目(B) 個数(C) 保有数(D) 平均価格(E)の計算において、どのような数式を使えばよいでしょうか?
回答を見る
  • ベストアンサー

エクセル関数 平均価格の計算について

価格が変動する商品の、保有在庫の平均価格の計算について質問させていただきます。 下記のように、「先入先出」で購入と売却を繰り返した場合の、保有在庫の平均価格(E)を計算する数式に関しまして、ご存知の方がいらっしゃいましたらご教示願います。  購入価格(A) 種目(B) 個数(C) 保有数(D) 平均価格(E) 1  100    購入     5     5      100   2  150    購入     3     8      118.75 3        売却      3     5      130 4  180    購入     5     10      155 5        売却       6     4       180    よろしくお願いいたします。

noname#260828
noname#260828

質問者が選んだベストアンサー

  • ベストアンサー
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.4

No.3です。 たびたびごめんなさい。 前回のコードでは在庫(保有数)が「0」の場合、「0」で割ってしまうとエラーになり、 マクロそのものも止まってしまいます。 前回のコードは消去して↓のコードにしてください。 (★印の行を追加しました) Sub Sample2() 'この行から Dim i As Long, k As Long, cnt As Long Dim lastRow As Long, myRow As Long, wS As Worksheet Set wS = Worksheets("Sheet2") With Worksheets("Sheet1") For i = 2 To .Cells(Rows.Count, "B").End(xlUp).Row If .Cells(i, "D") = 0 Then '★ .Cells(i, "E") = "-" '★ Else '★ If .Cells(i, "B") = "購入" Then myRow = myRow + 1 wS.Cells(myRow, "A") = .Cells(i, "A") wS.Cells(myRow, "B") = .Cells(i, "C") lastRow = wS.Cells(Rows.Count, "A").End(xlUp).Row Range(wS.Cells(1, "C"), wS.Cells(lastRow, "C")).Formula = "=A1*B1" .Cells(i, "E") = WorksheetFunction.Sum(wS.Range("C:C")) / .Cells(i, "D") Else cnt = 0 For k = 1 To wS.Cells(Rows.Count, "A").End(xlUp).Row If wS.Cells(k, "B") > 0 Then Do While wS.Cells(k, "B") >= 0 If cnt = .Cells(i, "C") Or wS.Cells(k, "B") = 0 Then Exit Do wS.Cells(k, "B") = wS.Cells(k, "B") - 1 cnt = cnt + 1 Loop End If Next k .Cells(i, "E") = WorksheetFunction.Sum(wS.Range("C:C")) / .Cells(i, "D") End If End If '★ Next i End With wS.Cells.Clear End Sub 'この行まで ※ 本来であれば考えられるエラーに関しての対処が必要なのですが、 とりあえずはこの程度で・・・m(_ _)m

noname#260828
質問者

お礼

非常に丁寧なご回答をいただき大変感謝しております。 当初は、この程度の計算ならば、関数式で簡単に解決するだろうと丸一日、Excel関数を使って試行錯誤してみましたが、式が複雑になるばかりでどうにも上手くいかず、 また、「在庫の平均価格の計算」のカテゴリーであればネットで調べれば簡単に解決するだろうと時間をかけて調べるも一向に見つからず、とうとう今回の投稿に至った次第です。 実は、最終的にこの投稿をしようと思った時、関数式では解決するのは難しいのかもと感じておりました。 今年に入り、ちょうど本格的にマクロの勉強を始めたところでありましたので、いただいた回答は非常に勉強になりました。 今回の質問は、回答が付かないかもと諦めていたところでしたので、大変ありがたく思っております。 どうもありがとうございました。

その他の回答 (3)

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.3

こんばんは! >「先入先出」となると関数では結構面倒だと思います。 そこでVBAになりますが一例です。 元データは↓の画像のような配置でSheet1にあるとします。 尚、Sheet2を作業用のSheetとして使用していますので、Sheet2は何も使用していない状態にしておいてください。 Sheet1のB列は「購入」と「売却」の2項目だけという前提です。 Alt+F11キー → メニュー → 挿入 → 標準モジュール → VBE画面のカーソルが点滅しているところに ↓のコードをコピー&ペースト → Excel画面に戻り(VBE画面を閉じて)マクロを実行してみてください。 (Alt+F8キー → マクロ → マクロ実行です) Sub Sample1() 'この行から Dim i As Long, k As Long, cnt As Long Dim lastRow As Long, myRow As Long, wS As Worksheet Set wS = Worksheets("Sheet2") With Worksheets("Sheet1") For i = 2 To .Cells(Rows.Count, "B").End(xlUp).Row If .Cells(i, "B") = "購入" Then myRow = myRow + 1 wS.Cells(myRow, "A") = .Cells(i, "A") wS.Cells(myRow, "B") = .Cells(i, "C") lastRow = wS.Cells(Rows.Count, "A").End(xlUp).Row Range(wS.Cells(1, "C"), wS.Cells(lastRow, "C")).Formula = "=A1*B1" .Cells(i, "E") = WorksheetFunction.Sum(wS.Range("C:C")) / .Cells(i, "D") Else cnt = 0 For k = 1 To wS.Cells(Rows.Count, "A").End(xlUp).Row If wS.Cells(k, "B") > 0 Then Do While wS.Cells(k, "B") >= 0 If cnt = .Cells(i, "C") Or wS.Cells(k, "B") = 0 Then Exit Do wS.Cells(k, "B") = wS.Cells(k, "B") - 1 cnt = cnt + 1 Loop End If Next k .Cells(i, "E") = WorksheetFunction.Sum(wS.Range("C:C")) / .Cells(i, "D") End If Next i End With wS.Cells.Clear End Sub 'この行まで ※ 関数でないので、Sheet1のデータ変更があるたびに マクロを実行する必要があります。m(_ _)m

回答No.2

でしたら売却価格は何列になりますか? 数式を入れる以上、売却価格の列が必要かと思いますが。

回答No.1

売却価格がわからないのに、その後の平均価格がでますか?

noname#260828
質問者

補足

質問の一行目に記載させていただいたのですが、「保有在庫の平均価格」という趣旨です。 利益に関する情報が必要なのではなく、保有している(残存している)在庫の平均購入価格が知りたいということです。ということで、分かりにくくなることを防ぐために、あえて売却価格は記載しませんでした。 よろしくお願いいたします。

関連するQ&A

  • Excelの計算式について

    Excel2002を使っています。 表を作ろうと思っています。 その表とは 1:A1に個数・B1に価格を入れる(以下C1に個数・D1に価格…と入れていく) 2:X1に最低価格を入れる(価格÷個数の一番低い価格) 3:Y1に最高価格を入れる(価格÷個数の一番高い価格) 4:Z1に平均価格を入れる(価格÷個数の平均価格) これを計算式にすると、 4は『=AVERAGE(B1/A1,D1/C1…)』 になると思うのですが(違うかもしれません…)、他の数式はどうすれば いいでしょうか? 又、4に関しても、もっと簡単な数式はありませんか? 宜しくお願い致します。

  • 原価計算

    質問させていただきます。 今、総合原価計算を勉強しているのですが、総合原価計算で原価配分(先入先出、平均、後入先出)の指定が無いものは先入先出でいいのでしょうか? 問題で注文が無いので悩んでます・・・(答えは先入先出でした)

  • 平均単価の計算について

    教えてほしいことがあります。ある本での記述で、株(1000株単位) 1-  297 -1  297 -1  295 -1  293 -1  281 -1  280 -1  261 -1  260 計 1-7  真ん中が278.5(最初の297円と最後の260円の中間)なのに対して所有株の平均単価が281円で上手でない。この取引について名人が次の指導をする文章が書かれています。 「上の297円はバイカイだから消せない。次の295円と293円が目ざわりなんだ。この二つをあした切るんだ。わかったね。切ったら5000残りだ。平均値はどうなる」 「平均は275円になります。・・・・(略)」 「平均値が六円下がったんだな。(略)30円か40円の幅のなかで平均値が2円か3円も高いのは下手すぎる(略)。それが、ちょっと調整しただけで六円もさがるじゃないか。・・・」 (板垣著プロが教える株式投資、218ページ)。 二つが目障りなんだ、までは理解できます。真ん中より高い価格で購入した株が平均値を高めているからです。しかし、この二つをあした切る、というのはどういう意味でしょうか?切ると残り5000株、というのですから、二つ売る(2000株売る)ということと解釈しても、それで平均値が下がったと言えるのでしょうか?2単位売っても、それは295円と293円の二つを売ったというのではなく、平均単価281円のを二つ売ったということで、売却後も平均単価は281円ではないでしょうか? 商品売買のように先入先出法とか個別法などの計算方法が採用できるなら、先ほどの記述のようなことも言えるかもしれませんが・・・それにこの段階で売却すると売却損が発生していて、平均単価を引き下げることの意義は薄いと思うのです。  私の考えは違うのでしょうか?ぜひご教授ください。

  • 上場株式譲渡所得(1000万円非課税枠)について

     昔に買った株を昨年売却し、非課税枠を申請する予定です。国税庁の資料を見てもわからないので、教えてください。 わからないのは、平均価格を出す際の総平均法と先入先出法の使い方です。 (1)特定口座と一般口座は区分して申告する(合算しての総平均法や先入先出法を使用しない)と認識していますが、それでよろしいのでしょうか? (2)非課税分の購入価格の算出は、複数回購入した場合任意(平均法でなく)でよいのでしょうか?また、前年に同じ株式を売却した場合はどうなりますか? この制度、なんかわかりにくいですね。

  • 期中の在庫評価方法の変更について

    期中で先入先出法から移動平均法に変更する際の考慮点について教えてください。 弊社は4月~3月を1会計年度としています。 この10月より在庫評価方法を先入先出法から移動平均法に変更することを考えております。 移動平均法に変更した場合、変更時点の在庫数と在庫残高をセットして計算することで問題無いでしょうか?  それとも4月まで遡って移動平均法で計算をし直す必要がありますか?

  • 簿記上の先入先出法と移動平均法

    この場合の先入先出法と移動平均法を適用した場合、それぞれの月末商品棚卸高と月間の売上純利益を求めなさい。 という問題です。先入先出法と移動平均法の意味はわかるのですが、計算がわかりません。途中式など書いてくださると助かります。

  • 平均値の有為

    たとえば、利用頻度の最も高いB店で購入する品物Aの価格の平均値に対し、イレギュラーのC店で1個か2個買ったとしてもこの場合、有為な結果にはならないのでしょうか? 平均をだすための計算は、(どう表現していいかわかりませんが)合計数を個数で割りますよね。その個数が多いほど有為な結果となるのでしょうか?

  • エクセルの数式について教えてください。IF関数?

    在庫表から、在庫不足分を把握して、不足数に対して一定数を加えた数量を表示させ、増産必要数を求めるための数式で困っています。 例えば、現在在庫(A)が50個あります。今後出庫予定(B)が200個ある場合、当然-150個(C)になります。 この-150個に対して、一定数値50個(D)を加えると、製作必要数が200個(E)になるのですが、それをエクセルの数式で自動計算できるようにしたいです。 単純に考えれば、A-BでCが表示され、C+DでEになるのですが、C欄がマイナスの場合は、Eを出すためには、(C*-1)+Dの計算が必要で、C欄が+であれば、単純にC+Dで求めるEの数が出ます。 つまり、C欄が+でも、-でも、このE欄を自動計算できる数式の作り方がわかりません。 どなたか作り方をご存知でしたら教えてください。 よろしくお願いいたします。

  • エクセル関数に関して

    エクセル関数に関して質問です 「E8]に「0」が入力された場合は、「0」と表示させ、それ以外は計算値を表示させています 数式は以下です =IF((E8=0),E8,($J8*E8)/P8) 数式の値がエラーの場合(P8セルに数値が入力されていない時)はエラー表示になって しまうので、以下の数式を入れています =IF(ISERROR(($J5*E5)/P5),"入力待ち",($J5*E5)/P5) この時、「E8」が「0」の時は「0」表示、なお且つ数式がエラーの時は「入力待ち」とさせたい のですが、2つの数式を1つに書く事は出来ませんか? ご存じの方がおりましたら、ご教示願いたく 宜しくお願い致します

  • 簿記について

    在庫評価の方法を説明した文章のうち、適切なものはどれか。 ア 後入先出法・・・新しく入庫したものから順に出庫するものとして、各商品の仕入価格を払出価格とする方法である。この方法ではインフレが長期化した場合などに在庫金額が大きくなるので採用される場合もある。 イ 移動平均法・・・期首、期中を問わず、対象期間中のすべての取得価格、数量を合計し、平均価格を算出して、それを払出価格とする方法。 ウ 先入先出法・・・払出価格を先に入れた商品の仕入れ価格から順次適用していくものであり、購入単価が徐々に上昇する傾向があるとき、一般的に最も在庫の評価額が高くなる。 エ 総平均法・・・前回までの取得価格と数量の合計に、今回の取得価格と数量の合計を合わせた総額を、数量で割った平均単位を払出価格とする方法。 答えは、ウなんですがなぜなのかが分かりません。