在實(shí)際工作中,如果使用工作表函數(shù)提取非重復(fù)值,常見的是使用INDEX+SMALL+IF+ROW的函數(shù)組合。當(dāng)數(shù)據(jù)量較大時(shí),運(yùn)算速度明顯會(huì)減慢。 而在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得到的是一個(gè)非重復(fù)的內(nèi)存數(shù)組{'蜀國','魏國','吳國','群雄'},使用INDEX函數(shù)將此數(shù)組中的每一個(gè)元素提取到單元格當(dāng)中。 在F2和G2分別輸入以下兩個(gè)公式,按<Ctrl+Shift+Enter>組合鍵,并分別向下復(fù)制到F8和G8單元格,提取姓名、員工部門兩個(gè)條件同時(shí)都不重復(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個(gè)空格分隔,以方便最后將連接起來的字符串再分別提取到相應(yīng)的單元格中。 通過INDEX和NotRepeat函數(shù)得到不重復(fù)的姓名與員工部門連接起來的字符串,之后分別使用LEFT和RIGHT函數(shù)提取左側(cè)10個(gè)字符和右側(cè)10個(gè)字符。最后通過TRIM函數(shù)將多余的空格清除掉,得到最終結(jié)果。 本文節(jié)選自北京大學(xué)出版社、ExcelHome團(tuán)隊(duì)出版的《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)容,方便讀者查閱。 |
|