Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA圆形函数与工作表圆形函数_Excel_Vba - Fatal编程技术网

Excel VBA圆形函数与工作表圆形函数

Excel VBA圆形函数与工作表圆形函数,excel,vba,Excel,Vba,我试图将此Excel函数更改为VBA代码 胜过 VBA 对于低于0的情况,Excel和VBA都可以正常工作。然而,在VBA中,当值(val)大于sigfig(sigf)时,它会给我一个错误。例如,如果我想要3 sigfig的55481,它给出的是#值,而不是55500 请帮忙 问题在于VBA的Round函数中的第二个参数不能为负,但在工作表函数的版本中可以为负 解决方案很简单,只需使用: sigfig = Application.WorksheetFunction.Round(val, sigf

我试图将此Excel函数更改为VBA代码

胜过

VBA

对于低于0的情况,Excel和VBA都可以正常工作。然而,在VBA中,当值(val)大于sigfig(sigf)时,它会给我一个错误。例如,如果我想要3 sigfig的55481,它给出的是#值,而不是55500


请帮忙

问题在于VBA的
Round
函数中的第二个参数不能为负,但在工作表函数的版本中可以为负

解决方案很简单,只需使用:

sigfig = Application.WorksheetFunction.Round(val, sigf)
它将按预期工作


Application.WorksheetFunction使
Round
可用,这一点很重要。这正是因为VBA函数没有完全复制其功能。相比之下,
Abs
只会复制该功能,因此无法从VBA调用该功能的工作表版本。

。。。另外,
Round
是银行家的舍入。。。所以,基本上是避开了,是的。
Public Function sigfig(val As Double, sigf As Integer) As Double
Dim var As Double
var = Abs(val)
var = Application.WorksheetFunction.Log10(var)
var = Int(var)
sigf = sigf - (1 + var)
sigfig = Round(val, sigf)
End Function
sigfig = Application.WorksheetFunction.Round(val, sigf)