在Excel中计算(如果A = B,然后是“”否则A)而不评估A两次

时间:2015-05-21 07:08:16

标签: excel excel-formula

我打算进行一种类型的公式:

 =IF(VOL("Site";"Date")=0;"";VOL("Site";"Date"))

其中VOL是我通过加载项使用的函数。除其他外,此加载项的限制是禁止在单个公式中调用两个加载项功能。即我上面写的代码无效,会导致错误。

有没有办法实现以下目标:

=IF(LHS=RHS;"Value if True";LHS)   (2)

其中LHS是左手边,RHS右手边,因此表达式检查LHS是否等于RHS,如果是,则打印相应的值,否则LHS,没有Excel评估LHS两次

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

希望任何人都有一些聪明的解决方案

1 个答案:

答案 0 :(得分:1)

这是一种(相当丑陋)的方式,只使用公式:

=IFERROR(1/IFERROR(1/vol("Site";"Date"),0),"")

这使用IFERROR函数,这种函数可以执行您想要的操作,但只测试错误。除以零会导致错误,因此如果IFERROR为零,内部VOL将返回零,否则将返回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