在實(shí)際工作中,,如果使用工作表函數(shù)提取非重復(fù)值,常見的是使用INDEX+SMALL+IF+ROW的函數(shù)組合,。當(dāng)數(shù)據(jù)量較大時,,運(yùn)算速度明顯會減慢。 而在VBA中,,使用應(yīng)用字典方法的自定義函數(shù),,可以快速、方便的提取非重復(fù)值,。 示例:提取非重復(fù)值: 在【模塊】的【代碼窗口】輸入以下代碼: Function NotRepeat(ParamArray rn() As Variant) Dim arr,cell Set dic= CreateObject('scripting.dictionary') arr= Application.Transpose(rn(0)) ForEach cell In arr If IsEmpty(cell) Then cell = '' End If dic(cell) = '' Next NotRepeat = dic.keys End Function 在D2單元格輸入以下公式,,向下復(fù)制到D5單元格,提取不重復(fù)部門名稱,,如圖所示: =INDEX(NotRepeat($B$2:$B$10),ROW(1:1)) 提取非重復(fù)值 自定義函數(shù)NotRepeat得到的是一個非重復(fù)的內(nèi)存數(shù)組{'蜀國','魏國','吳國','群雄'},,使用INDEX函數(shù)將此數(shù)組中的每一個元素提取到單元格當(dāng)中。 在F2和G2分別輸入以下兩個公式,,按<Ctrl+Shift+Enter>組合鍵,,并分別向下復(fù)制到F8和G8單元格,提取姓名,、員工部門兩個條件同時都不重復(fù)的姓名與員工部門: {=TRIM(LEFT(INDEX(NotRepeat($A$2:$A$10&REPT('',10)&$B$2:$B$10),ROW(1:1)),10))} {=TRIM(RIGHT(INDEX(NotRepeat($A$2:$A$10&REPT('',10)&$B$2:$B$10),ROW(1:1)),10))} $A$2:$A$10&REPT(' ',10)&$B$2:$B$10部分,,將姓名與員工部門兩部分連接起來,方便判斷每一組值是否重復(fù),。中間用10個空格分隔,,以方便最后將連接起來的字符串再分別提取到相應(yīng)的單元格中。 通過INDEX和NotRepeat函數(shù)得到不重復(fù)的姓名與員工部門連接起來的字符串,,之后分別使用LEFT和RIGHT函數(shù)提取左側(cè)10個字符和右側(cè)10個字符,。最后通過TRIM函數(shù)將多余的空格清除掉,得到最終結(jié)果,。 本文節(jié)選自北京大學(xué)出版社,、ExcelHome團(tuán)隊出版的《Excel 2016函數(shù)與公式應(yīng)用大全》,本書全面系統(tǒng)地介紹了Excel 2016函數(shù)與公式的技術(shù)特點(diǎn)和應(yīng)用方法,,深入揭示背后的原理概念,并配合大量典型實(shí)用的應(yīng)用案例,,幫助讀者全面掌握Excel的函數(shù)與公式,。全書分為4篇共32章,,內(nèi)容包括公式與函數(shù)基礎(chǔ)、常用函數(shù),、函數(shù)綜合應(yīng)用,,以及其他功能中的函數(shù)應(yīng)用。附錄中還提供了Excel 2016規(guī)范與限制,、Excel 2016常用快捷鍵,、Excel 2016常用函數(shù)及功能說明等內(nèi)容,方便讀者查閱,。 |
|