快速獲取多列唯一值,你覺得不可能的事情,對VBA來說很簡單

2019-08-17     VBA雜談

前景提要(文末提供源碼下載)

之前我們介紹了如何通過RemoveDuplicates的方法來實現快速去重並提取唯一值的,RemoveDuplicates方法不僅僅能夠實現針對某一列的去重,同時還可以實現2列的數據去重,但是有時候可能我們並不僅僅是針對1列,2列這麼簡單,我們需要針對多列同時進行去重並提取唯一值,多列?用欄位循環那嗎?好像是可以,但是應該不是最簡的方法,今天我們來在學習一個新方法

場景說明

這是我們今天模擬的這個工作表,我們需要在這三列中提取唯一值並組成新的工作表,如果說手工操作的話,應該是每列不斷的篩選才能夠實現的,數據操作的過程中也會存在不少的問題,比方說數據操作了篩選,你不知道複製的結果應該如何安放了。

代碼區

好了,說了那麼多的廢話,我們請出今天的主角吧

AdvancedFilter

Sub test()
ActiveSheet.UsedRange.AdvancedFilter _
Action:=xlFilterCopy, Unique:=True, _
CopyToRange:=ActiveSheet.Range("H1")
End Sub

excuse me!這麼短!是的,你沒錯,雖然代碼很短,但是功能和學問還是很大的,來看看效果

不管你有幾行,這個代碼都可以輕鬆的實現

代碼解析

其實今天的代碼很簡單,我們只需要了解AdvancedFilter這個方法的實用就好了。 我們先來看看官方給出來的這個方法的用法

AdvancedFilter( Action , CriteriaRange , CopyToRange , Unique )

這裡我們對照著用法就可以理解了,首先第一個action,代表了你的操作是要在原數據的基礎上修改,還是在不破壞原數據的基礎上,在其他地方展示

Action:=xlFilterCopy

而在我們的代碼中,我們是選擇了copy方法,類似於之前學習的RemoveDuplicates方法,不過RemoveDuplicates本身就會破壞原始數據,我們只能講原始數據複製之後再進行操作,而這裡AdvancedFilter就更加人人性化了,可以給我們選擇的方法

既然我們是複製數據的,那麼肯定要有一個複製的區域,這就是CopyToRange 方法的運用了,從單純的字面意思上來說,都能夠知道,它是需要我們提供粘貼的單元格區域。

留意截圖圈中的地方,這裡都是重點,只有是action=xlFilterCopy的時候,我們才需要使用CopyToRange,否則是在元數據修改,並不需要任何的數據支撐。

================================

本節課的案例源碼已經上傳,需要的小夥伴請按照如下步驟操作

1.點我頭像加個關注~

2.轉發下本文章(算是對我的小小支持吧~)

3.後台私信「8-3」

希望大家多支持~~,多多關注 ~ ~

好了,明晚19:00,準時再見!

文章來源: https://twgreatdaily.com/zh/c3JSp2wBvvf6VcSZhHGU.html