I have the following worksheet which works pretty well with the VBA code, except that when I put decimals in column A it throws off the FIFO inventory for some reason. Unfortunately we need to use decimals in column a. I have tried creating helper columns that convert the tons to pounds, but it causes the spreadsheet to lag something fierce. Any ideas on why the decimals cause this to fail? I have pasted the vba code I am using under the worksheet below.
Thanks!
<tbody>
</tbody>
Option Explicit
Function FIFO(PurchaseUnits As Range, UnitCost As Range, UnitsSold As Range, Optional blnAscending As Boolean = False) As Double
Dim Counter As Long, UnitsAccountedFor As Long
Dim varPurchased, varCost
FIFO = 0
UnitsAccountedFor = Application.Sum(UnitsSold)
varPurchased = PurchaseUnits.Value
varCost = UnitCost.Value
If blnAscending Then
Counter = LBound(varPurchased, 1)
Do Until UnitsAccountedFor = 0
If varPurchased(Counter, 1) = 0 Then
Counter = Counter + 1
Else
varPurchased(Counter, 1) = varPurchased(Counter, 1) - 1
UnitsAccountedFor = UnitsAccountedFor - 1
End If
Loop
Else
Counter = UBound(varPurchased, 1)
Do Until UnitsAccountedFor = 0
If varPurchased(Counter, 1) = 0 Then
Counter = Counter - 1
Else
varPurchased(Counter, 1) = varPurchased(Counter, 1) - 1
UnitsAccountedFor = UnitsAccountedFor - 1
End If
Loop
End If
FIFO = Application.SumProduct(varPurchased, varCost)
End Function
Thanks!
purchased tons | price/ton | tons used | FIFO Ending Value |
19375 | 7.8565 | 3375 | |
14211 | .3518 | 3234 | 105296.32 |
15605 | .6408 | 42572 | 6.41 |
120000 | 2.9167 | 11910 | 291.67 |
<tbody>
</tbody>
Option Explicit
Function FIFO(PurchaseUnits As Range, UnitCost As Range, UnitsSold As Range, Optional blnAscending As Boolean = False) As Double
Dim Counter As Long, UnitsAccountedFor As Long
Dim varPurchased, varCost
FIFO = 0
UnitsAccountedFor = Application.Sum(UnitsSold)
varPurchased = PurchaseUnits.Value
varCost = UnitCost.Value
If blnAscending Then
Counter = LBound(varPurchased, 1)
Do Until UnitsAccountedFor = 0
If varPurchased(Counter, 1) = 0 Then
Counter = Counter + 1
Else
varPurchased(Counter, 1) = varPurchased(Counter, 1) - 1
UnitsAccountedFor = UnitsAccountedFor - 1
End If
Loop
Else
Counter = UBound(varPurchased, 1)
Do Until UnitsAccountedFor = 0
If varPurchased(Counter, 1) = 0 Then
Counter = Counter - 1
Else
varPurchased(Counter, 1) = varPurchased(Counter, 1) - 1
UnitsAccountedFor = UnitsAccountedFor - 1
End If
Loop
End If
FIFO = Application.SumProduct(varPurchased, varCost)
End Function