我有一个需要输出到单元格的等式,附加了等式。输出返回的数字应为负数为零。我知道这很简单,但无法让输出工作。
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
答案 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个。
帮助自己,并在Option Explicit和Debugging
上阅读