Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.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
vba用户定义函数中的用户定义运算符_Vba_Operators - Fatal编程技术网

vba用户定义函数中的用户定义运算符

vba用户定义函数中的用户定义运算符,vba,operators,Vba,Operators,我该如何设置,以便用户可以定义运算符?例如,用户将键入 =iftrue(x+y,">=z",x+y) (much like a sumif or regular if function) 我知道我可以使用正常的if函数或使用单独的单元格来求解逻辑。然而,我这样做的原因是,我有一个非常cpu密集的计算,将不得不重新计算,而不是返回已经计算的值 这就是我目前拥有的 Function iftrue(Value1, Criteria1, ValueifTrue) ' Function If

我该如何设置,以便用户可以定义运算符?例如,用户将键入

=iftrue(x+y,">=z",x+y) (much like a sumif or regular if function)
我知道我可以使用正常的if函数或使用单独的单元格来求解逻辑。然而,我这样做的原因是,我有一个非常cpu密集的计算,将不得不重新计算,而不是返回已经计算的值

这就是我目前拥有的

Function iftrue(Value1, Criteria1, ValueifTrue)

' Function

If Value1 = Criteria1 Then
iftrue = ValueifTrue

Else: iftrue = Value1

End If

End Function

我想这段代码的修改版本可以,试试看

Function IfTrue(Value1, Criteria1, ValueifTrue)
    'Function to Evaluate Calculation'

    If Evaluate(Value1 & Criteria1) Then
        IfTrue = ValueifTrue
    Else
        IfTrue = Value1
    End If

End Function

这只是一个基本的想法,你可能想在此基础上发展

枚举所有可能的运算符,并将其与select case一起使用。该值将以某种方式计算。是什么让你认为(甚至没有测试!)一种方法比另一种方法占用的CPU更少/更多?=if((x+y)>=z,z,(x+y))在这种情况下,如果答案为false,则必须重新计算答案。我假设在我的udf中,(x+y)值将被存储,如果为false,则返回。@vba4all-谢谢您的指针。我认为这是访问VBA。对于Excel来说,它是评估。谢谢你。:)