Excel問答:表格數據重組(SUMPRODUCT,LARGE,SMALL,ROW,OFFSET)
Excel問答,是對老徐漫談粉絲們提出的優秀問題進行的答疑解惑。希望能幫助到每一個看到此文的讀者。
更多Excel問答文章請關注老徐漫談頭條號。
粉絲問題
如下圖左半部的數據表,其中是每個學生在不同日期所選修的課,如何根據這個數據表摘要出每門課的學生(參考下圖右半部)?
以下數個部分慢慢來分解。
1. 使用 SUMPRDOCUT LARGE 函數
單元格E2:
=SUMPRODUCT(LARGE(($B$2:$C$23=E$1)*ROW($B$2:$C$23),ROW(1:1)))
公式得到的結果是姓名的「列號」,這個做法會以原順序『相反』的方法呈現。
如果你要用數組公式來處理,則公式:
單元格E2:{=LARGE(($B$2:$C$23=I$1)*ROW($B$2:$C$23),ROW(1:1))}
輸入完成要按 Ctrl Shift Enter 鍵,Excel 會自動加上「{}」。
複製單元格E2,貼至單元格E2:G23。
利用上述公式,依據『列號』查到對應的單元格內容。
單元格E2:=IFERROR(OFFSET($A$1,SUMPRODUCT(LARGE(($B$2:$C$23=E$1)*ROW($B$2:$C$23),ROW(1:1)))-1,,,),"")
或
單元格E2:{=IFERROR(OFFSET($A$1,LARGE(($B$2:$C$23=I$1)*ROW($B$2:$C$23),ROW(1:1))-1,,,),"")}
這是數組公式,輸入完成要按 Ctrl Shift Enter 鍵,Excel 會自動加上「{}」。
複製單元格E2,貼至單元格E2:G23。
2. 利用數組公式和 SMALL 函數
單元格E2:{=SMALL(IF($B$2:$C$23=E$1,ROW($B$2:$C$23),999),ROW(1:1))}
這是數組公式,輸入完成要按 Ctrl Shift Enter 鍵,Excel 會自動加上「{}」。
其中參數 999,只是任意的一個很大的值。
公式得到的結果是姓名的「列號」,這個做法會以原順序『相同』的方法呈現。
複製單元格E2,貼至單元格E2:G23。
利用上述公式,依據『列號』查到對應的單元格內容。
單元格E2:{=OFFSET($A$1,SMALL(IF($B$2:$C$23=E$1,ROW($B$2:$C$23),999),ROW(1:1))-1,,,)}
複製單元格E2,貼至單元格E2:G23。
3. 在每個姓名中將各課程標示那一天上課
單元格F2:=IFERROR(OFFSET($B$1,,MATCH(F$1,$B2:$C2,0)-1,,),"")
複製單元格F2,貼至單元格F2:H23。
推薦閱讀:
※今日數據行業日報(2017.03.22)
※我的2017年計劃-----大數據思維社群 (1)
※數據運營「高階神器」:U-Dplus 如何將業務數據做「活」
※今日數據行業日報(2016.12.28)
※今日數據行業日報(2017.02.20)