歡迎轉發(fā)和點一下“在看”,,文末留言互動! 置頂公眾號或設為星標及時接收更新不迷路 小伙伴們好,,今天來聊一聊VBA的那些事兒。有時候我們會遇到下面這樣的場景:有兩列數(shù)據(jù),,要從數(shù)據(jù)量多的那一列中找出不存在于另一列的數(shù)據(jù),。就像今天要和大家分享的這道題目一樣: 這道題目,使用公式和VBA都可以處理,。今天主要介紹如何使用VBA來解決這道題目。 01 VBA字典方法 使用VBA字典方法,,就可以很輕松地解決問題,。 題目并不難,因此今天也借這道題目,,來檢驗一下代碼的運行速度,。 完整代碼如下: Sub test() Dim arr, brr, mydic, i, d Dim startTime As Double Dim endTime As Double Dim elapsedTime As Double startTime = Timer arr = Range("B3:B18") brr = Range("D3:D6") Set mydic = CreateObject("scripting.dictionary") For i = 1 To UBound(arr) mydic(arr(i, 1) & i) = arr(i, 1) Next For Each d In mydic.keys For i = 1 To UBound(brr) If mydic(d) = brr(i, 1) Then mydic.Remove (d) End If Next Next [E3].Resize(mydic.Count, 1) = WorksheetFunction.Transpose(mydic.items) endTime = Timer elapsedTime = endTime - startTime Debug.Print "執(zhí)行時間: " & elapsedTime & " 秒"End Sub 下面簡單介紹一下這段代碼,。 Set mydic = CreateObject("scripting.dictionary")For i = 1 To UBound(arr) mydic(arr(i, 1) & i) = arr(i, 1)Next 創(chuàng)建字典,并且將B列數(shù)據(jù)裝入字典,。 For Each d In mydic.keys For i = 1 To UBound(brr) If mydic(d) = brr(i, 1) Then mydic.Remove (d) End If NextNext 通過一個雙層循環(huán)來判斷D列中的數(shù)據(jù)是否在字典中存在,。實際上就是字典鍵值和D列中數(shù)據(jù)一一對比。有重復則刪除相應的鍵和鍵值,。 [E3].Resize(mydic.Count, 1) = WorksheetFunction.Transpose(mydic.items) 最后結果輸出,。 這段代碼還計算了代碼運行時間。這個其實也很簡單,,通過Timer函數(shù)來記錄代碼的開始時間和結束時間,,來計算運行時間。 -END- 我就知道你“在看” |
|