2013-02-19 123 views
1

有沒有人有任何精彩的想法來簡化這個難點公式?當你看到它時不要驚慌,我會盡力解釋。目前使用INDEX,ROW,SUMPRODUCT和IFERROR簡化Excel公式

= IFERROR(INDEX(rangeOfDesiredValues,(1/SUMPRODUCT((rangeOfSerials = $ D 2 O)(rangeOfApps = cfgAppID)(rangeOfAccessIDs = cfgAccessID)* ROW(rangeOfDesiredValues))^ - 1)) 「」 )

當前我正在使用SUMPRODUCT做一個VLOOKUP的多個列作爲條件的等價物。通常這隻適用於數字結果,但由於我需要查找文本,因此我將SUMPRODUCT與ROW和INDEX結合使用。

不幸的是,當沒有找到單元格時,我的SUMPRODUCT返回0.這會導致公式返回不正確的單元格而不是空白。出於這個原因,我通過這個計算運行結果:

(1/result)^-1 

這樣的結果0變成錯誤和其他結果保持不變。我把這個餵給IFERROR,這樣錯誤就會變成空白。

有誰知道如何使這個整潔?我無法在任何電子表格中創建新列。

+0

如果它工作正常,我不一定會改變它。你可能會改變的唯一的事情是你如何測試0,它不會使它更簡單或更容易閱讀。 – 2013-02-19 01:16:21

回答

4

當你想要找到一個值時,避免使用多條件求和功能,如SUMPRODUCT總是最好的(如果有多於一行匹配所有三個條件,它顯然會給你一個不正確的結果或錯誤,我假設至多期望一場比賽呢?)。 ROW函數也可能會有問題,如果您在工作表中插入任何行.....

有幾種方法可以工作。對於單個公式,使用MATCH是最常見的 - MATCH只會給出正確的位置或錯誤,所以零值沒有問題。這將是這樣的:

=IFERROR(INDEX(rangeOfDesiredValues,MATCH(1,(rangeOfSerials=$D20)*(rangeOfApps=cfgAppID)*(rangeOfAccessIDs=cfgAccessID),0)),"")

這是一個「數組公式」需要與CTRL+SHIFT+ENTER輸入......或者你可以用這樣一個額外的INDEX函數使之成爲一個常規公式

=IFERROR(INDEX(rangeOfDesiredValues,MATCH(1,INDEX((rangeOfSerials=$D20)*(rangeOfApps=cfgAppID)*(rangeOfAccessIDs=cfgAccessID),0),0)),"")

第三種替代方案是使用LOOKUP其不需要 「陣列條目」

=IFERROR(LOOKUP(2,1/(rangeOfSerials=$D20)/(rangeOfApps=cfgAppID)/(rangeOfAccessIDs=cfgAccessID),rangeOfDesiredValues),"")

與以前的版本在多個匹配情況下略有不同 - 它會給你最後的匹配,而不是該場景中的第一個(但我假設你最多隻有一個匹配,如上所述) 。

最後,如果你不介意使用助手列,你可以大大簡化公式。只需使用「助手」列連接用破折號分隔的三個標準列,然後就可以使用簡單的VLOOKUP或INDEX/MATCH,例如

=IFERROR(INDEX(rangeOfDesiredValues,MATCH($D20&"-"&cfgAppID&"-"&cfgAccessID,Helper_Column,0)),"")

+0

相當值得+1的努力。對我自己來說很多有用的東西非常感謝! – 2013-02-19 10:29:47

+0

非常感謝您的深思熟慮! – WoodenKitty 2013-02-21 22:41:22