返回列表 上一主題 發帖

[發問] 如何使用陣列+字典物件比對資料的時候用LIKE語法?

回復 5# PKKO


    單迴方法用在累加吧,但您目的是 sumif, count, 做雙迴像是必需,要再快的話要請其他大大指教了。

TOP

回復  PKKO


Sub TEST_1()

.Clear: [J1] = ""
xRow = 10
arr = [A1].Resize(xRow)
Brr = [C1].R ...
ikboy 發表於 2015-9-16 09:42


感謝ikboy大大的回覆,您的INSTR方式小弟學習了

但想請教一下

您的方式雖有用到字典+陣列

但您跟我的一樣都是跑了雙重迴圈,假設2萬*2萬就會太久了

我實際將您的程式碼與我的測試,跑一萬次迴圈發現

您的程式碼速度與我的相差不到10 %

想請問有跑單迴圈的方式(類似我的TEST_1的程式碼)

可以加快比對速度嗎?
PKKO

TOP

回復 2# GBKEE


    感謝超版大大的回覆,但您的方式似乎與我的TEST_2模組程式碼相同,我想要學習的部分是透過陣列+字典物件的方式

原因是速度上似乎比較快
PKKO

TOP

回復 1# PKKO


Sub TEST_1()

[B:B].Clear: [J1] = ""
xRow = 10
arr = [A1].Resize(xRow)
Brr = [C1].Resize(xRow)
Set xd = CreateObject("Scripting.Dictionary")
For i = 1 To UBound(Brr)
    xd(Brr(i, 1)) = 0
Next
k = xd.keys
t = xd.items
For i = 1 To UBound(arr)
    For j = 0 To UBound(k)
        If InStr(k(j), arr(i, 1)) Then t(i - 1) = t(i - 1) + 1
    Next
Next
[B1].Resize(xRow) = Application.Transpose(t)
End Sub

TOP

回復 1# PKKO
試試看
  1. Option Explicit
  2. Sub TEST_2()
  3. Dim xRow As Integer, Arr(), Brr(), Ar()
  4. xRow = 10
  5. Arr = [A1].Resize(xRow).Value
  6. Brr = [C1].Resize(xRow).Value
  7. ReDim Ar(1 To UBound(Arr), 1 To UBound(Arr, 2)) '設置一個與Arr同樣大小陣列(空的)
  8. ReDim AA(1 To 10, 1 To 1)
  9. For i = 1 To UBound(Arr)
  10.     For J = 1 To UBound(Brr)
  11.         If Brr(J, 1) Like "*" & Arr(i, 1) & "*" Then
  12.         'Like 運算子用來比較兩個字串有相同的字
  13.         'If Brr(J, 1) = Arr(i, 1) Then   '兩者相同
  14.             Ar(i, 1) = Ar(i, 1) + 1
  15.         End If
  16.     Next
  17. Next
  18. [B1].Resize(xRow) = Ar
  19. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

        靜思自在 : 改變自己是自救,影響別人是救人。
返回列表 上一主題