ผมนำรหัส VBA ของ Conrad Carlberg มาปรับปรุงให้สามารถอ้างอิงกับพื้นที่ตารางได้โดยตรงทำให้เราสามารถใช้สูตรนี้ได้ง่ายขึ้นโดยไม่จำเป็นต้องตั้งชื่อ Range Name ไว้ก่อนแต่อย่างใด
โดยทำตัวอย่างพร้อมคำอธิบายไว้ให้ดูวิธีใช้สูตร =FIFO() ไว้ในแฟ้มให้ download กันได้จาก http://www.excelexperttraining.com/e...is/FIFOvba.xls
หรือเลือกใช้สูตรแบบ Add-in จาก
http://www.excelexperttraining.com/e.../FIFOAddin.xla
(โปรดอ่าน วิธีติดตั้งสูตร Add-ins)
หวังว่าตัวอย่างนี้จะมีประโยชน์นะครับ แทนที่จะต้องคอยคิดด้วยมือ คราวนี้จะได้ยอดสินค้าคงเหลือไปใช้กันได้ง่ายขึ้น
หากมีข้อแนะนำเพื่อปรับปรุงแก้ไข กรุณาแจ้งให้ผมทราบด้วย หรือถ้าต้องการสอบถามวิธีใช้งาน กรุณาตั้งคำถามไว้ใน Excel Expert Forum ครับ
Code:
Function FIFO(ItemCode As String, UnitsSold As Long,
PCode As Range, UnitBegin As Range, UnitPurchase As Range,
UnitCost As Range) As Currency
Dim Counter As Integer, RemainingUnits As Long, UnitsAccountedFor As Long
FIFO = 0
UnitsAccountedFor = UnitsSold
For Counter = 1 To UnitBegin.Rows.Count
If ItemCode = PCode(Counter, 1) Then
RemainingUnits = Application.WorksheetFunction.Max(0, UnitBegin(Counter, 1) + _
UnitPurchase(Counter, 1) - UnitsAccountedFor)
FIFO = FIFO + UnitCost(Counter, 1) * RemainingUnits
UnitsAccountedFor = UnitsAccountedFor - (UnitBegin(Counter, 1) + _
UnitPurchase(Counter, 1) - RemainingUnits)
End If
Next Counter
End Function