今天早上有一個群友提了如下問題:
我的工作表里設置了sumif函數和函數對另一個工作簿取數。在不打開源數據的工作簿時,本表sumif函數取值出錯,打開源文件工作簿時sumif函數能正確計算結果。
原公式:
=SUMIF('E:\成本\2019年成本資料\2019-06月\2019-7月-實行計劃\成本計算\[1-次月LGP生產原價-計劃.xlsx]大原板'!$C$6:$C$113,$C7,'E:\成本\2019年成本資料\2019-06月\2019-7月-實行計劃\成本計算\[1-次月LGP生產原價-計劃.xlsx]大原板'!P$6:P$113)
我建議修改為:
=(('E:\成本\2019年成本資料\2019-06月\2019-7月-實行計劃\成本計算\[1-次月LGP生產原價-計劃.xlsx]大原板'!$C$6:$C$113=$C7)*'E:\成本\2019年成本資料\2019-06月\2019-7月-實行計劃\成本計算\[1-次月LGP生產原價-計劃.xlsx]大原板'!P$6:P$113)
修改之后,在源文件工作簿關閉的情況下,可以正常取值。
關于跨表取數報錯的情形,我們需要了解函數的易失性。
一、完全易失性函數
易失函數共七個:NOW()、RAND()、TODAY()、()、()、CELL()、INFO()。
易失函數得到的值是“不穩定”的。當表格插入或者刪除行列都會重算,在下面兩種情況下也會引發重算:
1、工作簿任何單元格發生變更都會重算
易失函數只要任何一個單元格更改,所打開工作簿含易失函數的單元格都要重算,而不含易失函數的公式不會重算。
2、打開工作簿時執行重算
每次打開工作簿,含易失性函數單元格都要重算。如果該工作簿用了易失性函數工作表函數怎么設置,哪怕不做任何更改,在關閉工作簿時Excel也會提示“是否保存更改”。
打開工作簿時,如工作簿中用了外部鏈接而源文件沒有打開,會提示“此工作簿包含到其他數據源的鏈接”,并讓我們選擇“更新”還是“不更新”。如果工作簿中有易失函數的公式使用了其他工作簿,源文件沒有打開且在上述提示中選擇了“不更新”,本工作簿的相關公式將因無法重算而返回錯誤值。
及更高版本打開工作簿時,如果不能更新外部鏈接,只會出現“已禁止自動更新鏈接”的安全警告,而不會使公式返回錯誤值。
二、半易失性函數
半易失函數在打開工作簿時會完成重算,因此打開工作簿如果單元格中用了半易失性函數,即使沒有做任何修改就關閉工作表函數怎么設置,Excel也會提示“是否保存更改”。
INDEX、SUMIF、等函數引用區域具有不確定性,使這些函數具有半易失性。
半易失函數在打開工作簿時就會出現易失性,修改工作簿表頁的其他單元格時不會重算。