在Excel中计算(如果A = B,则“否则A”)而不评估A两次
我打算进行一个types的公式:
=IF(VOL("Site";"Date")=0;"";VOL("Site";"Date"))
其中VOL是我通过加载项使用的函数。 除此之外,此加载项的局限性是禁止在一个公式中调用两个加载项函数。 即我上面写的代码是无效的,将导致一个错误。
有没有办法达到以下目的:
=IF(LHS=RHS;"Value if True";LHS) (2)
那么LHS在左边,RHS在右边,因此expression式检查LHS是否等于RHS,如果是,打印相应的值,否则LHS, 没有Excel评估LHS两次 ?
我还没有find任何解决办法,除了在一个单元格中导入公式,并且如果IF语句中的逻辑expression式为false,则将该单元格称为要打印的值,但这将成为相当广泛的“双重工作”。 像(2)这样的解决scheme也会变得更加可读,特别是当LHS的types是C:\ pathtofile [filename] SheetName!'Cell'时。
希望任何人都有一些聪明的解决办法
这是一个(相当丑陋的)方式,只是使用公式:
=IFERROR(1/IFERROR(1/vol("Site";"Date"),0),"")
这使用IFERROR
函数,哪种做你想要的,但只testing错误。 除以零除会导致错误,所以如果VOL
为零,则内部IFERROR
返回零,否则返回1/VOL
。 现在我们需要再次取倒数来返回原来的值,所以我们重复这个技巧,这次如果有错误返回""
。
如果你想testing另一个值(如3),只需使用如下所示:
=IFERROR(3+1/IFERROR(1/(vol("Site";"Date")-3),0),"")
一个更简洁的方法是在VBA中创build一个包装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
。