歡迎轉發和點一下“在看”,文末留言互動! 置頂公眾號或設為星標及時接收更新不迷路 朋友們好,這里是EXCEL應用之家。今天要和大家分享一道統計、求和的題目。題目稍有些復雜,一起來燃燒腦細胞吧! 原題目是這樣的: 題目要求統計不重復的參會人員名單,以及每人參會的總次數。 怎么樣,思考十秒鐘... 01 FILTERXML函數法 在單元格C3中輸入下列公式,并向下向右拖曳即可。 =LET(y,FILTERXML("<a><b>"&SUBSTITUTE(TEXTJOIN("、",,$A2:$A17),"、","</b><b>")&"</b></a>","a/b[not(preceding::*=.)]"),IF(COLUMN()=3,y,COUNTIF(A:A,"*"&y&"*"))) 公式比較長,下面詳細講一講。 TEXTJOIN("、",,$A2:$A17) 利用TEXTJOIN函數,我們將源數據按分隔符“、”合并起來。 FILTERXML("<a><b>"&SUBSTITUTE(TEXTJOIN("、",,$A2:$A17),"、","</b><b>")&"</b></a>","a/b[not(preceding::*=.)]") 這部分是本題的核心。利用FILTERXML函數提取出不重復的清單。這部分返回的結果是{"曹操";"魯肅";"郭嘉";"劉備";"諸葛亮";"孫權";"關羽"}。 朋友們如果對這部分還不熟悉,可以參看我關于FILTERXML函數的系列文章,或者給我留言,這里就不再贅述了。 IF(COLUMN()=3,y,COUNTIF(A:A,"*"&y&"*")) IF函數大法。判斷當前列是否是第三列。如果是,則執行名稱y,這個后面講。如果否,則利用COUNTIF來統計次數。 下面來講講這個y。 LET(y,FILTERXML("<a><b>"&SUBSTITUTE(TEXTJOIN("、",,$A2:$A17),"、","</b><b>")&"</b></a>","a/b[not(preceding::*=.)]"),IF(COLUMN()=3,y,COUNTIF(A:A,"*"&y&"*"))) 利用LET函數對y定義名稱。這里y= FILTERXML("<a><b>"&SUBSTITUTE(TEXTJOIN("、",,$A2:$A17),"、","</b><b>")&"</b></a>","a/b[not(preceding::*=.)]"),我們用y來儲存FILTERXML函數的計算結果。 LET函數的第三參數,IF函數判斷當前列若為第三列,則執行名稱y,結果返回的是不重復的名單。 如果不為第三列,則將y前后匹配通配符,在A列中查找每個人參會次數。 LET函數的語法結構如下: =LET(name1, name_value1, calculation_or_name2, [name_value2, calculation_or_name3...]) name1:必須 name_value1:要分配的第一個名稱。 必須以字母開頭。 不能是公式的輸出,也不能與范圍語法沖突。 calculation_or_name2: 02 SUBSTITUTE函數法 在單元格C3中輸入下列公式,并向下向右拖曳即可。 =LET(y,UNIQUE(TRIM(MID(SUBSTITUTE(TEXTJOIN("、",,A2:A17),"、",REPT(" ",150)),ROW(1:58)*150-149,150))),IF(COLUMN()=3,y,COUNTIF(A:A,"*"&y&"*"))) 這條公式和上面那條在邏輯上是相似的,只不過這條使用的是UNIQUE函數嵌套SUBSTITUTE函數來取得不重復的名單。其余部分是一樣的。 UNIQUE函數的語法結構: =UNIQUE (array,[by_col],[exactly_once]) Array:必須,要從中返回唯一行或列的區域或數組 [by_col]:可選,by_col參數是指示如何比較的邏輯值。
[exactly_once]:可選,exactly_once參數是一個邏輯值,它將返回在范圍或數組中恰好出現一次的行或列。 這是唯一的數據庫概念。
我就知道你“在看” ![]() |
|