返回列表 上一主題 發帖

[發問] 無法精確比對

[發問] 無法精確比對

用Sheets2 --D欄的資料去跟Sheets1--B欄的資料比對,找到完全相同的就把Sheets1中同一列的相關資料貼到Sheets2的相對位置中
可是好像沒辦法做到精確比較,測試檔中應該只有第7筆能比對到,可是卻比對出現3筆。
test.rar (14.03 KB)
Jess

  1. Sub ex()
  2. Set d = CreateObject("Scripting.Dictionary")
  3. With Sheet1
  4. For Each a In .Range(.[B5], .[B56636].End(xlUp))
  5.    d(a & "") = Array(a.Offset(, 1).Value, a.Offset(, 2).Value, a.Offset(, 3).Value, a.Offset(, 4).Value)
  6. Next
  7. End With
  8. With Sheet2
  9. For Each a In .Range(.[D12], .[D56636].End(xlUp))
  10.        If d.exists(a & "") Then a.Offset(, 4).Resize(, 4) = d(a & "")
  11.     Next
  12. End With
  13. End Sub
複製代碼

TOP

回復 2# chin15

    原來精確比對要用exists函數。
謝謝c大這麼快就幫我解決問題了^^
Jess

TOP

回復 1# jesscc
  1. Sub Ex()
  2. Dim D As Object, A As Range
  3. Set D = CreateObject("Scripting.Dictionary")
  4. With Sheet1
  5. For Each A In .Range(.[B5], .[B56636].End(xlUp))
  6.    D(A & "") = A.Offset(, 1).Resize(, 4).Value
  7. Next
  8. End With
  9. With Sheet2
  10. For Each A In .Range(.[D12], .[D56636].End(xlUp))
  11.     A.Offset(, 4).Resize(, 4) = D(A & "")
  12. Next
  13. End With
  14. Set D = Nothing
  15. Set A = Nothing
  16. End Sub
複製代碼

TOP

回復 4# GBKEE


    謝謝G大的幫忙
最後的
14.Set D = Nothing
15.Set A = Nothing
是什麼意思啊?
是否Dim後面有宣告到的,都要這樣處理嗎?
Jess

TOP

回復 5# jesscc
=> 釋放記憶體
VBA 的說明   
Nothing 關鍵字是用來將一個物件變數從一個實際的物件裏分離開來。使用 Set 陳述式可指定 Nothing 給物件變數。舉例來說:
Set MyObject = Nothing
數個物件變數可以同時引用一個實際物件,而當 Nothing 被指定給一個物件變數,那麼該變數將不再引用任何實際物件。當數個物件變數同時引用一個物件,那麼和該物件有關連的記憶體、系統資源中被物件變數所引用到的部份,只有在全部的物件變數都設成 Nothing 後才會被釋放。而變數被設成 Nothing 的方法不外是直接使用 Set,或等待最後被設成 Nothing 的物件變數超出範圍之後。

TOP

回復 6# GBKEE


    大概了解意思了,謝謝G大
Jess

TOP

        靜思自在 : 布施如播種,以歡喜心滋潤種子,才會發芽。
返回列表 上一主題