我的场景是,我有一个“仪表板”样式表,它根据 B 列(始终位于其左侧)中的单元格从大型表中查找数据。B 列中的单元格包含 INDEX、MATCH、IF 数组公式,用于从选择“组”的表中提取唯一名称。此列表向下填充,并根据不同“组”选项的下拉选择进行填充。它可以根据“组”返回最多 20 个名称。
我有 17 个单元格,其右侧有公式,如果数据不存在,则所有单元格都可能返回错误。因此,我在它们前面加了一个IFERROR()
语句。我的问题是,如果我在它们前面加一个IF()
语句,是否会加快计算速度,因为 IF 语句会读取如果为 True 则为空白,如果为 false 则计算公式。
从逻辑上来说,我认为是这样,但我想知道你们中是否有人有同样的感受。谢谢。也许这更适合元讨论。
附言:这是我正在使用的 9 个最复杂的公式之一。
=IFERROR((SUMIFS(INDIRECT("tblData["&N$7&" Top Box Num]"),INDIRECT("tblData["&$B$7&"]"),$B$16,INDIRECT("tblData[Date]"),">="&$C$5,INDIRECT("tblData[Date]"),"<="&$D$5))/(SUMIFS(INDIRECT("tblData["&N$7&" Den]"),INDIRECT("tblData["&$B$7&"]"),$B$16,INDIRECT("tblData[Date]"),">="&$C$5,INDIRECT("tblData[Date]"),"<="&$D$5)),"")
当为 True 时,上述公式是否比下面的公式慢?
=IF(OR($C$16=0,C16=""),"",(SUMIFS(INDIRECT("tblData["&N$7&" Top Box Num]"),INDIRECT("tblData["&$B$7&"]"),$B$16,INDIRECT("tblData[Date]"),">="&$C$5,INDIRECT("tblData[Date]"),"<="&$D$5))/(SUMIFS(INDIRECT("tblData["&N$7&" Den]"),INDIRECT("tblData["&$B$7&"]"),$B$16,INDIRECT("tblData[Date]"),">="&$C$5,INDIRECT("tblData[Date]"),"<="&$D$5)))
这些公式本质上是将分子值相加,然后除以 20,000 行表中条件为真的分母值,并返回百分比分数。
答案1
=IF 确实“短路”,但为了加快性能,我建议http://msdn.microsoft.com/en-us/library/office/aa730921%28v=office.12%29.aspx。包含一个用于计时的宏。=INDIRECT 似乎值得关注。