等式输出的负数

时间:2015-10-16 03:09:47

标签: vba

我有一个需要输出到单元格的等式,附加了等式。输出返回的数字应为负数为零。我知道这很简单,但无法让输出工作。

private sub grade()
Dim i As Long
Dim j As Long
Dim ncolum As Long
Dim nRows As Long
Dim grade As Long
Dim price As Long


ncolum = Worksheets("Data").Cells(1, Columns.Count).End(xlToLeft).Column
nRows = Worksheets("Data").Cells(rows.Count, "A").End(xlUp).Row
    production = InputBox("Prduction cost per block($)")
    refinery = InputBox("Refinery cost per block($)")
   ' grade = InputBox("Grade Value (g/t)")
    price = InputBox("Price of comodity ($/t)")
    recovery = InputBox("Recovery (%)")
    quantity = InputBox("Ore Qty (tonnes)")
        'revenue = Grade * price * (recovery / 100) * quantity
        costs = production + refinery
        'Worksheets("data").Cells(i, j) = costs - revenue

For j = 1 To ncolum
For i = 1 To nRows

'input data
    grade = Worksheets("grade").Cells(i, j).Value1
    revenue = grade / (1000000) * price * (recovery / 100) * quantity
    price = revenue - cost
    Worksheets("data").Cells(i, j) = price
Next i
Next j
end sub

2 个答案:

答案 0 :(得分:0)

也许尝试将价格改为Double而不是Long?

raw_input

答案 1 :(得分:0)

也许您正在获得算术值下溢和截断,这就是为什么当您的算法使用除法时,通常最好使用Double s。这里的问题在于您的计算机存储除法结果的方法。

使用Long变量:

Dim n1 As Long
Dim n2 As Long
Dim n3 As Long

n1 = 5
n2 = 2
n3 = n1 / n2

MsgBox "The result of 5 / 2 = " & n3
'This will output "The result of 5 / 2 = 2" instead of the expected 2.5

这是因为我在显示表达式之前使用n3作为中间存储Long。如果我要排除n3并直接追加表达式的值:

MsgBox "The result of 5 / 2 = " & n1/n2

结果实际上会隐式转换为Double并正确显示,但这并不是我所依赖的。

底线:在涉及分割时使用Double

编辑:我看到问题所在:正在发生的事情是你没有明确表达你的数据类型,而是回过头来咬你。

InputBox实际上返回一个字符串,并且由于生产,价格,恢复等以前没有Dim'd(并且您没有使用Option Explicit),因此该变量被创建为一种类型,可以保存它在上下文中接收,在这种情况下Strings。在下面的屏幕中,我为生产和炼油厂输入了500个。

Debugging screenshot

帮助自己,并在Option ExplicitDebugging

上阅读