返回列表 上一主題 發帖

[發問] 請問如何用excel VBA寫一個以先進先出的方式來取得產品的數量與平均價格

回復 1# white5168

這樣的說明,還是不清楚你要的?

1.先進先出?
2.剩餘數量=進貨數量-出貨數量  為何有的產品進貨數量為0,卻有出貨數量?
3.剩餘數量的成本均價如何計算?

TOP

本帖最後由 register313 於 2012-4-28 18:25 編輯

回復 4# white5168

是有許多疑點未釐清

總之先給些數據(一般的算法),再一步一步弄清楚吧
  1. Sub aa()
  2. Dim d1, d2 As Object
  3. Set d1 = CreateObject("scripting.dictionary")
  4. Set d2 = CreateObject("scripting.dictionary")
  5. [G1:I65536] = ""
  6. [G1:I1] = Array("產品編號", "剩餘數量", "平均價格")
  7. For B = 2 To [B2].End(xlDown).Row
  8.   If Not d1.exists(Cells(B, 2).Value) Then
  9.      d1.Add Cells(B, 2).Value, Cells(B, 4) - Cells(B, 5)
  10.      d2.Add Cells(B, 2).Value, (Cells(B, 4) - Cells(B, 5)) * Cells(B, 3)
  11.   Else
  12.      d1(Cells(B, 2).Value) = d1(Cells(B, 2).Value) + Cells(B, 4) - Cells(B, 5)
  13.      d2(Cells(B, 2).Value) = d2(Cells(B, 2).Value) + (Cells(B, 4) - Cells(B, 5)) * Cells(B, 3)
  14.   End If
  15. Next B
  16. [G2].Resize(d1.Count, 1) = Application.Transpose(d1.keys)
  17. [H2].Resize(d1.Count, 1) = Application.Transpose(d1.items)
  18. [I2].Resize(d2.Count, 1) = Application.Transpose(d2.items)
  19. For I = 2 To d2.Count + 1
  20.   If Cells(I, "H") = 0 Then
  21.      Cells(I, "I") = 0
  22.   Else
  23.      Cells(I, "I") = Cells(I, "I") / Cells(I, "H")
  24.   End If
  25. Next I
  26. End Sub
複製代碼

TOP

回復 16# white5168

本帖已經到了16樓了,好像答案沒有一點進展,發問者該思考這個問題

發問者的工作:提供範例(考量各種數據)作詳細清楚之說明,讓答題者一下就知道你要什麼
剩下的交給答題者

hsieh的建議:建議您將想要顯示的結果直接用手算出後,填入想要實現的位置,並在隔壁欄位填入你計算的依據
我把產品編號一樣的集中,請把你要的答案填入並作說明,這樣較清楚(或是你答案要如何呈現也另作說明)
答題者有疑惑,發問者必須要幫忙釐清,不然不會有答案,久了也會失去耐心

TOP

回復 25# white5168

先前在另一帖裡(與本帖內容相同,重覆發帖了)已作回覆
Hsieh超版在本帖裡亦作了回覆

附上H版與R版程式執行結果之比較供參考,有不對的地方再作回覆
黃色網底即為2個版本不同之處

最後資料 R版vsH版.rar (8.32 KB)

TOP

        靜思自在 : 改變自己是自救,影響別人是救人。
返回列表 上一主題