2016-03-02 157 views
8

我試圖計算一個商品將堆放多少層。我有一個可變數量(iQty),給定寬度的加載牀(dRTW),每單位寬度商品(dWidth)和每層數量(iLayerQty)。在VBA中舍入到最接近的較大整數

iLayerQty = Int(dRTW/dWidth)

現在我需要除以每一層的量的總量和圍捕每層的量進行計算。在Excel公式中很容易,但我試圖避免使用WorksheetFunction調用來最大限度地減少A1/R1C1的混淆。目前,我與此接近它:

(Number of layers) = ((Int(iQty/iLayerQty) + 1) 

而且工作正常的時間 - 除非該數字給出一個整數(0.5米的貨物寬度,例如,裝配到2.5米的拖車)。當然,在這些情況下,添加一個就會破壞結果。

是否有任何方便的方法來調整該公式以獲得更好的向上舍入?

+0

使用'WorksheetFunction.Ceiling()' – Vasily

+0

但這也是一個工作表函數 - 那麼我不妨使用Roundup。這就是說,看了天花板,我認爲這可能對我一直在努力的另一件事有用 - 謝謝! –

+1

'Ceiling'是'roundup'的一個擴展變體,你可以指定舍入步驟,這就是我提出它的原因。 – Vasily

回答

11

我沒有看到任何理由避免WorksheetFunction;我在這裏沒有看到任何混淆。

Number_of_layers = WorksheetFunction.RoundUp(iQty/iLayerQty, 0) 

你也可以推出自己的功能:

Function RoundUp(ByVal Value As Double) 
    If Int(Value) = Value Then 
     RoundUp = Value 
    Else 
     RoundUp = Int(Value) + 1 
    End If 
End Function 

這樣稱呼它:

Number_of_layers = RoundUp(iQty/iLayerQty) 
+0

非常好,很簡單 - 非常感謝,我會用它。 :-) –

6

如果使用WorksheetFunction object訪問ROUNDUPCEILING功能是關閉的,則表一些數學也可以完成。

Number of layers = Int(iQty/iLayerQty) - CBool(Int(iQty/iLayerQty) <> Round(iQty/iLayerQty, 14)) 

甲VBA 是(-1)的數學上使用時的等價物。 VBA回合是爲了避免15位浮點錯誤。

相關問題