有時(shí)候,我們想要尋找通常需要數(shù)組公式的非數(shù)組版本,其理由可能是:
1. 認(rèn)為這樣可以提高工作表的性能(有時(shí)可以,有時(shí)不能)
2. 不喜歡必須使用輸入數(shù)組公式所必需的Ctrl+Shift+Enter組合鍵
3. 從理論上講,可能只是感興趣
本文研究數(shù)組公式的非數(shù)組版本,更多地屬于第三類。強(qiáng)迫TRANSPOSE正常運(yùn)行而不進(jìn)行數(shù)組輸入的必要強(qiáng)制措施令人費(fèi)解且不切實(shí)際。這并不是說對(duì)它們沒有興趣,但這些強(qiáng)制性的使用并非TRANSPOSE獨(dú)有。實(shí)際上,可以在許多函數(shù)中使用它們來生成返回值,否則將需要數(shù)組輸入。
下面是一個(gè)示例。假設(shè)從單元格A2起其下的單元格相加,想要確定這樣的和在哪個(gè)單元格等于或超過某個(gè)數(shù),例如5。這些單元格依次相加的和顯示在列B中,假設(shè)我們不希望在解決方案中使用這樣的輔助列。并且,假設(shè)我們希望返回必須相加才能達(dá)到該數(shù)的單元格數(shù),如下圖1所示。
圖2
想要求出B1和A2、C1和A3、D1和A4、E1和A5的乘積之和,可直接使用公式:
=(B1*A2)+(C1*A3)+(D1*A4)+(E1*A5)
答案是70。
先試試SUMPRODUCT函數(shù)來簡化求乘積之和的公式:
=SUMPRODUCT(B1:E1*A2:A5)
結(jié)果是260,顯然是錯(cuò)的。這是因?yàn)閭鬟f給SUMPRODUCT函數(shù)的兩個(gè)數(shù)組是正交的,所以求出來的和是這些數(shù)字交叉相乘后的和,如下圖3所示。
圖3
在B1:E1和A2:A5中的每個(gè)值依次相乘后的結(jié)果為260。
這樣,我們需要將B1:E1和A2:A5進(jìn)行轉(zhuǎn)換,以確保這兩個(gè)數(shù)組是相同類型的向量,即都是單行或都是單列。下面,嘗試公式:
=SUMPRODUCT(B1:E1*TRANSPOSE(A2:A5))
得到的結(jié)果是78。并不是我們想要的結(jié)果,這個(gè)公式的中間結(jié)果為:
=SUMPRODUCT(B1:E1*3)
也就是說,TRANSPOSE函數(shù)僅返回?cái)?shù)值3。
如果輸入下面的數(shù)組公式:
=SUM(B1:E1*TRANSPOSE(A2:A5))
得到正確的結(jié)果70。上面的公式能夠像我們預(yù)想的那樣轉(zhuǎn)換:
=SUM({5,6,7,8}*{1,2,3,4})
如果我們不輸入本文開頭的連乘和的公式(對(duì)于大量的數(shù)據(jù)是不可取的)或者剛才的數(shù)組公式,那么能夠編寫其他公式獲得正確的結(jié)果嗎?
使用非數(shù)組公式:
=SUMPRODUCT(B1:E1,TRANSPOSE(INDEX(A2:A5,N(IF(1,INDEX(ROW(A2:A5)-MIN(ROW(A2:A5))+1,,))))))
得到正確的結(jié)果70。
我們可以仔細(xì)地研究一下本文展示的技術(shù),它們既可以與TRANSPOSE函數(shù)結(jié)合使用,也可以應(yīng)用于其他函數(shù)。不推薦單純?yōu)楸苊廨斎霐?shù)組公式而想方設(shè)法采用其他公式,然而研究一下非數(shù)組公式解決問題也是一項(xiàng)有趣的練習(xí)!