標題:
資料比對與刪除
[打印本頁]
作者:
modelcrazyer
時間:
2012-11-1 15:42
標題:
資料比對與刪除
各位達人
我有三個工作表,分別為
工作表1
A-1
B-2
C-3
工作表2
A-1
D-3
E-5
G-6
工作表3
B-2
F-7
H-9
D-10
想做到經工作表1經與工作表2及工作表3比對後只剩下
A-1
B-2
請問該怎麼做
作者:
kimbal
時間:
2012-11-3 18:06
Sub test()
Set ld = CreateObject("Scripting.Dictionary")
For Each sht In Array(Worksheets("工作表2"), Worksheets("工作表3"))
For Each c In Range(sht.Range("A1"), sht.Range("A1").End(xlDown))
If Not ld.exists(c.Value) Then
ld.Add c.Value, c.Value
End If
Next
Next
With Worksheets("工作表1")
For i = .Range("A1").End(xlDown).Row To 1 Step -1
If ld.exists(.Range("A1").Offset(i - 1, 0).Value) Then
.Range("A1").Offset(i - 1, 0).Delete (xlShiftUp)
End If
Next
End With
Set ld = Nothing
End Sub
複製代碼
作者:
c_c_lai
時間:
2012-11-3 21:56
回復
1#
modelcrazyer
回復
2#
kimbal
If ld.exists(.Range("A1").Offset(i - 1, 0).Value) Then
複製代碼
應改正為
If Not ld.exists(.Range("A1").Offset(i - 1, 0).Value) Then
複製代碼
答案才會如 #1 modelcrazyer 樓主所述。
作者:
GBKEE
時間:
2012-11-4 16:56
回復
3#
c_c_lai
也可以這樣寫
Option Explicit
Sub Ex()
Dim i, Rng As Range, Msg As Boolean, Sht As Variant
With Worksheets("工作表1")
For i = .Range("A1").End(xlDown).Row To 1 Step -1
Msg = False
For Each Sht In Array(Worksheets("工作表2"), Worksheets("工作表3"))
Set Rng = Sht.Range(Sht.Range("A1"), Sht.Range("A1").End(xlDown))
If Not IsError(Application.Match(.Cells(i, "A"), Rng, 0)) Then Msg = True
Next
If Msg = False Then .Range("a" & i).Delete xlUp
Next
End With
End Sub
複製代碼
作者:
c_c_lai
時間:
2012-11-4 20:18
回復
4#
GBKEE
這種單刀直入的撰寫方式,也比較直接了當,
這亦是我平時程式的撰寫風格,謝謝您!
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)