問題描述
如圖有好多組數據,需要求每組數據對應位置的平均值
解決方法
=SUM(IF(MOD(ROW(C$2:C$81), 8) = MOD(ROW(C2), 8), C$2:C$81, 0))/10
然后下拉右拉擴充即可,其中需要根據自身需要修改一些數據
=SUM(IF(MOD(ROW(起始列$起始行:結束列$結束行), 每隔幾行) = MOD(ROW(起始位置), 每隔幾行), 起始列$起始行:結束列$結束行, 0))/組數
方法解釋
ROW(單元格)
ROW(起始列$起始行:結束列$結束行)
得到的是單元格對應的行數或是多個行數
因此列是多少無所謂,重要的是起始行與結束行確定數據范圍,并使用$固定數字,防止拉伸數據時變動。比如本案例中,第一行為題目,因此真正數據從第二行開始,到第81行結束,一共10組數據,每組數據有8行
MOD(數據, 數字)
該作用為求余數,因為本案例中數據都是每隔8行取值求和/平均,因此可以采用這種根據行數計算余數的方法。
其返回的就是數據/數字的余數,數據可以是一個或多個數
MOD(ROW(C$2:C$81), 8) = MOD(ROW(C2), 8)
前一個MOD將所有行數對8求余數,得到的是這樣的循環
后者對數據的初始行取余數,得到2,加上等號判斷后,則將所有余數為2的位置標記為True,即取值,False位置不取值,從而實現隔行取數。當然,由于C2沒有固定,因此在下拉時也會遞增,從而實現對應位置的隔行取數
IF(logical_test, [value_if_true], [value_if_false])
函數的解釋已經大體說明了含義,logical_test為條件判斷語句,如果是true,則取第二參數的數,如果是false,則取第三個參數的數。
此處,我們將該列的所有數放在了第二個參數上,第三個參數設置為0,即為,true時取第二參數的數,false時取0
由于logical_test中放進去的是一列數,因此他也要相對應得對每列進行判斷取數,對應第二參數得每行
SUM(數據)/組數
最后就是求和/平均了,SUM將放進去的數據求和,最后除以組數就是平均數了
總結
比較難以理解的就是IF中的判斷取數以及需要實現下拉右拉時也自動更新相關數據的實現