Board logo

標題: [發問] 無法精確比對 [打印本頁]

作者: jesscc    時間: 2011-9-13 23:25     標題: 無法精確比對

用Sheets2 --D欄的資料去跟Sheets1--B欄的資料比對,找到完全相同的就把Sheets1中同一列的相關資料貼到Sheets2的相對位置中
可是好像沒辦法做到精確比較,測試檔中應該只有第7筆能比對到,可是卻比對出現3筆。
[attach]7800[/attach]
作者: chin15    時間: 2011-9-14 00:05

  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
複製代碼

作者: jesscc    時間: 2011-9-14 00:42

回復 2# chin15

    原來精確比對要用exists函數。
謝謝c大這麼快就幫我解決問題了^^
作者: GBKEE    時間: 2011-9-14 06:26

回復 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
複製代碼

作者: jesscc    時間: 2011-9-14 22:00

回復 4# GBKEE


    謝謝G大的幫忙
最後的
14.Set D = Nothing
15.Set A = Nothing
是什麼意思啊?
是否Dim後面有宣告到的,都要這樣處理嗎?
作者: GBKEE    時間: 2011-9-15 06:23

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

回復 6# GBKEE


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




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)