記得有位大神說過,表格的混亂程度越高,對函數水平要求越高。不論多高的高手,最終只需要一個結果而已,為什麼不從根本點去處理問題呢?讓表格簡單化!

圖中的表是二維表,不易維護、不易查詢、不易計算。列方向的月完全可以用一列月份來表達,如果將標題行改為地區、月份、數量,一個簡單的sumifs就可以達到高高高高手的水平。

當然,為了讓表格簡單化,excel的開發人員也是熬費苦心,專門開發了逆透視的功能


SUM數組公式就可以。。。

=SUM(TRANSPOSE(B3:B8=B11)*TRANSPOSE(C3:J11))

完事了Ctrl+Shift+Enter。。。

( ??? ? ??? )不行的話說一聲,沒電腦手機打的


事實證明不需要轉置, 是我多此一舉啦~

原理是數組公式

兔子不怕魚:Excel邏輯運算和數組公式?

zhuanlan.zhihu.com圖標

首先贊同@兔子不怕魚的答案,其次說一下自己的觀點能寫出這三個公式的人,尤其是最後一個的水平肯定不低,但是這幾種寫法純粹是為了秀技術,菜鳥的寫法沒問題,很多初學者可能都會這樣寫,但是如果水平可以寫出第三個公式,我相信他日常寫公式肯定不會這樣寫,公式難理解不說,寫起來也不短啊。

sum(),sum(if()),sumproduct(),都可以得到正確的結果,所以那幾種基本上刻意為之。


如不明白公式含義,可以用f1鍵打開幫助文件,了解函數的基本功能,使用方法,再結合 公式求值功能(見下圖),查看公式每步的計算結果,多看幾遍,想一想基本就能明白這個公式的含義和設計思路了。

結合高高高手的公式:

sumprouct(mmult(c3:j8,row(1:8)^0)*(b3:b8=b11))

這個公式有三個函數,sumporuct,mmult,row

sumproduct 返回數組對應元素的乘積之和

mmult。返回兩個矩陣的乘積

row函數(它最簡單) 返回引用區域的行號。

現在大概有了個印像,要再深入了解各個函數怎麼用的,需要仔細琢磨一下幫助文件,動手把幫助里的例子複製到工作表內,結合公式求值,查看每步的計算步驟,基本就能拿下這個函數了。

現在進行第二步,公式求值

把高高高手的公式輸入到c11單元格。回車,再選擇c11單元格;選擇 公式菜單,點擊公式求值按鈕,此時顯示以下界面

點擊求值按鈕,查看每步的計算內容,與上一步進行比對,查看有什麼變化,多看兩遍就懂了

另外公式可以按一樓的思路進行簡化為;

=SUMPRODUCT((C2:I7)*(B2:B7=B11))

公式求值界面里有三個常識需要了解下:

1: 數組元素里的逗號(,) ,表示符號前後的兩個元素屬於同一行,但不是同一列; 與工作表單元格的對應關係

上圖可表示為 1,2

2:數組元素中的分號(;) 表示符號前後的兩個元素不屬於同一行,

上圖可表示為 1,2;3,4

3: True,False是布爾類型,在本例中,可簡單的將其等值為 1,0 (true=1,false=0)


根據自己的需要來,那麼複雜的公式,用簡單的合成就好,說實在的,一般情況沒有必要


推薦閱讀:
相关文章