Excel VBA函數篇-3.19大數據時代必備查找技能 萬條數據能奈我何

最近比較閒,如果大家有excel 方面需要幫助的,可以聯繫小編,小編在能力範圍內有償提供幫助,感謝大家支持!

前景提要

經常看電視或者是一些招聘要求的童鞋,應該就比較熟悉大數據這個概念,大數據簡單的理解就是非常龐大的數據處理,數據量的提升,最直接的結果就是普通的數據處理方法越來越慢了,現在也是推出了很多種針對大數據處理的語言,比方說比較火熱的python,他的pandas模塊,numpy模塊,完全就是為大數據而生的,說到這裡肯定很多童鞋就方了,那麼excel是不是就沒有用處了呢?

當然不可能的啦,excel畢竟還是現在的主流辦公軟件,不管技術上面發展的多麼的高級,畢竟全民都是程序員的時代還是非常的遙遠的,並且你也不可能要求領導一定要去學習各種大數據處理知識吧,現在領導更多還是依賴於excel,數據也是集中展示在excel中的,那麼在大數據的衝擊下,excel能夠提升處理速度呢?

最直接的方法就是多用數組,少用遍歷之類的循環,不過數組的學習還是需要一定的基礎和抽象的理解能力,這裡我們還是繼續從基礎的函數出發,今天介紹的這個函數主要也是用在數組中的,針對我們常用的精確查找或者模糊查找功能,他的效果非常的快

函數說明

今天分享的是filter()函數,就像是我前面所說的那樣,他更多的還是和數組一起嵌套使用的,它主要是用來幫助我們查找數據的,比方說通過關鍵字查找,是否含有某關鍵字,或者是否含有某內容,兩列數據的相同項,不同項目的查找,都會使用到他,今天我們就來分享下關於filter()的一點小用法

場景說明

如標題所示,我們今天主要分享如何在大數據的環境下,快速的查找我們需要的數據,首先我們模擬構造一個比較大的數據。

我們假設有一個excel文件,現在她總共有7列數據,但是每列總共有1048575行,是2013版的極限了。

Excel VBA函數篇-3.19大數據時代必備查找技能 萬條數據能奈我何

文件的大小也有30M了

Excel VBA函數篇-3.19大數據時代必備查找技能 萬條數據能奈我何

基本上滿足了一個大型數據的文本大小了,那麼現在我們來嘗試下篩選數,我想要找到數據中A列的所有數據中,含有20這兩個數字的所有數據,你會如何實現呢?

這個時候千萬不要手賤去嘗試篩選,一般的電腦基本上碰到這個篩選都死翹翹了,我們這裡嘗試下實用VBA來幫我們實現

代碼區

Sub test()
Dim arr
arr = Range("A:A")
arr = WorksheetFunction.Transpose(arr)
arr1 = Filter(arr, 20, True)
Range(Cells(2, 2), Cells(UBound(arr1) + 1, 2)) = WorksheetFunction.Transpose(arr1)
End Sub

來看看效果。為了展示效果,我們加一個計時器,這裡我們將符合條件的數據單獨展示在第12行,

Excel VBA函數篇-3.19大數據時代必備查找技能 萬條數據能奈我何

代碼解析

既然已經說到了filter(),那就順帶說一點關於數組的知識吧,數組在VBA裡面有一種說法就是他是犧牲計算機的內存來提升運行的速度的,所以他相對於我們普通的遍歷,循環,自帶的篩選功能等方法,有很大的優勢,事實也是證明,30M左右的數據,它也能夠輕鬆快速的幫助我們獲得想要的數據。來看看代碼

arr = Range("A:A")

這是我們生成一個數組的常用方法,dim arr, 然後將我們所需要查找的數據全部放到數組裡面去

arr = WorksheetFunction.Transpose(arr)

將二維數組轉化為一維數組,這一步是非常有必要的額,因為filter()這個查找功能的實現,是建立在這個數組是一維數組的前提下的,所以這一步很關鍵,至於二維,一維的概念,這裡大家簡單理解為一行是一維,一列是二維就可以了。

arr1 = Filter(arr, "20", True)

之後就是filter函數的使用方法了,filter(數組,條件,是否包含),數組就是我們要篩選查找的數據,就是我們前面已經構造好的數組arr,條件就是我們要查找的關鍵字,比方說我這裡要查找的是含有20這兩個數字的數據,不管是在開頭,結尾,亦或者中間都算的,當然你可以替換成為準確的字符串,進行精確查找,大家可以根據自己的需要來輸入條件,之後第三個函數就是boolean類型的函數,只有兩個選擇,TRUE或者FALSE,分別對應的意思是,含有和不含有。這裡我輸入的是TRUE,代表的就是含有20,如果我要反向查找,找不含有20這兩個數字的,那就選擇false.

Range(Cells(2, 12), Cells(UBound(arr1) + 1, 12)) = WorksheetFunction.Transpose(arr1)

這裡就是將數組再次轉置,直接填充到我們想要展示的某一列就可以了。

總結

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

OK ,今天的分享就到這裡了,可能大家聽起來還是比較的糊塗,沒關係,數組的一些知識,我們現在還沒有接觸,所以感覺比較的蒙,數組是一個比較抽象的概念,需要有足夠的知識儲備,足夠多的練習才能夠慢慢在自己的腦海中建立一個模型,所以大家現在只需要知道有這樣的一個filter()函數可以得到這個大數據的快速查找功能就可以了,如果在實際工作中碰到比較大的數據的話,就可以選擇實用這種方法,稍微修改下數據源和條件以及展示的位置即可,也算是一個即用,速成的代碼範本吧。

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

本人已經打算長期分享一些網絡蒐集的各種VBA知識,如果大家有問題也可以提出來共同解決,一起進步,畢竟VBA的世界還是很大的。

如果你有什麼想要分享的,或者有什麼想要知道的,都可以留言等方式告訴我,大家一起努力進步。

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

================歷史相關文章==============================


分享到:


相關文章: