在Excel中计算(如果A=B,则为“else A”),而不计算两次A

在Excel中计算(如果A=B,则为“else A”),而不计算两次A,excel,excel-formula,Excel,Excel Formula,我打算进行以下类型的公式: =IF(VOL("Site";"Date")=0;"";VOL("Site";"Date")) 其中VOL是我通过外接程序使用的函数。此外接程序的限制包括,禁止在单个公式中调用两个外接程序函数。也就是说,我上面写的代码无效,将导致错误 是否有办法实现以下目标: =IF(LHS=RHS;"Value if True";LHS) (2) 其中LHS为左侧,RHS为右侧,因此表达式检查LHS是否等于RHS,如果等于RHS,则打印相应的值,否则为LHS,而不使用Ex

我打算进行以下类型的公式:

 =IF(VOL("Site";"Date")=0;"";VOL("Site";"Date"))
其中VOL是我通过外接程序使用的函数。此外接程序的限制包括,禁止在单个公式中调用两个外接程序函数。也就是说,我上面写的代码无效,将导致错误

是否有办法实现以下目标:

=IF(LHS=RHS;"Value if True";LHS)   (2)
其中LHS为左侧,RHS为右侧,因此表达式检查LHS是否等于RHS,如果等于RHS,则打印相应的值,否则为LHS,而不使用Excel计算LHS两次

除了在一个单元格中导入公式外,我还没有找到任何解决方案,如果if语句中的逻辑表达式为false,则将该单元格引用为要打印的值,但这将成为一个相当广泛的“双重工作”。像(2)这样的解决方案也会变得更具可读性,尤其是当LHS的类型为“C:\pathtofile[filename]SheetName!”

希望有人能想出一些聪明的方法来解决这个问题,这里有一个(相当难看的)方法,就是使用公式:

=IFERROR(1/IFERROR(1/vol("Site";"Date"),0),"")
这就使用了
IFERROR
函数,该函数可以执行您想要的操作,但只测试错误。被零除会导致错误,因此如果
VOL
为零,则内部
IFERROR
返回零,否则返回
1/VOL
。现在我们需要再次取倒数来返回原始值,所以我们重复这个技巧,如果有错误,这次返回

如果您想测试另一个值(例如3),只需使用以下方法:

=IFERROR(3+1/IFERROR(1/(vol("Site";"Date")-3),0),"")
一种更简洁的方法是在VBA中创建一个函数,它封装了
VOL
函数并执行您想要的操作:

Public Function MyVol(varSite As Variant, varDate As Variant) As Variant
        MyVol = vol(varSite, varDate)
        If MyVol = 0 Then MyVol = ""
End Function

假设您可以从VBA调用
VOL

什么值可以
VOL()
返回?从0到数千的正十进制数我不太明白第一个和第二个IF公式之间的联系。Vol()函数在LHS/RHS场景中的作用是什么?这似乎完全无关。您肯定不是在问如何创建一个IF语句,比如
=IF(A1=B1;formula;A1)
——或者您是?现在还不清楚你的问题是什么。第一:一个特定的IF公式失败的例子,以及为什么失败的描述。第二:“一个问题,如果有一种方法来实现以下[一般公式]”。感谢您提供了一个常规公式和VBA解决方案。这当然有帮助!这种方法在大型excel文件(VBA UDF)上速度慢吗?