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

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 相続・譲渡・売却 不動産譲渡益の計算 3 2022/08/04 13:17
- その他(資産運用・投資) 株式の平均取得単価について 4 2022/11/17 01:36
- 固定資産税・不動産取得税 中古マンションの土地・建物割合について 1 2022/06/02 15:06
- 財務・会計・経理 eーtaxの減価償却費の自動計算って合ってるの? 3 2023/02/20 17:36
- ビジネスマナー・ビジネス文書 会社所有の車を個人に無償で 4 2022/08/11 09:03
- その他(お金・保険・資産運用) 至急!【Wolt】各メニューの価格設定の簡単な計算方法 3 2023/03/05 11:58
- 財務・会計・経理 減価償却が終わった資産について 物によって償却期間があり、その期間が終わったものについて売却した場合 5 2022/03/28 09:56
- 法学 ネット通販 民法95条 錯誤の無効による支払い義務について 3 2023/02/07 14:28
- 高校 日商簿記3級の勉強中なのですが 精算表が完成せず困っています。 こちらの問題の回答を教えていただきた 2 2023/03/02 09:07
- 簿記検定・漢字検定・秘書検定 棚卸減耗損について 2 2022/05/19 04:48
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Windowsで縦に長いページを全て...
-
昔の東芝のWindows8.1 のノート...
-
コマンドプロンプトについて詳...
-
仮想マシンでウイルスは平気か
-
QTTabBarが無反応になる
-
Windows11をダウンロードとイ...
-
Windows12
-
Windows Update の件、
-
シャットダウン時に自動ファイ...
-
フォルダ内の画像が表示される...
-
Windows8.1について
-
動画の再生とタイトルの変更方...
-
Windows11 の、PCです。 起動時...
-
Windows11PCでMACアドレスの変...
-
メール送信、zipファイル PDFに...
-
グリザイアの果実のPC版の動作...
-
Windows11のサポート
-
ワード文書への画像挿入について
-
ウインドウズ11
-
教えて下さい。 Windows office...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
同一銘柄を売却するのに得な順...
-
譲渡損失の特別控除について
-
確定申告の計算方法は?
-
株式の売却利益の計算方法と計...
-
公務員ですが、amazonやヤフオ...
-
外貨資産売却益の計算
-
ETRADE 取得単価がおかしい
-
株式取得額の計算
-
エクセル関数 平均価格の計算...
-
株譲渡益 申告分離課税 計算方...
-
約定単価より取得単価の方が低...
-
株式を申告分離課税で売却した...
-
確定申告について
-
日本株は今が売り時でしょうか?
-
仮想通貨の利益1000万では税務...
-
マイホーム売却に関する申告等...
-
S&P500への積み立てについて
-
昭和16年頃の貨幣価値
-
これって横領?
-
今の日経平均 PBR は 1.25倍で...
おすすめ情報