標題:
請問 VBA 程式要如何修改 ,才能讓模糊條件比對完整條件,並刪除不出現在結果工作表
[打印本頁]
作者:
jeffrey628litw
時間:
2019-12-18 15:59
標題:
請問 VBA 程式要如何修改 ,才能讓模糊條件比對完整條件,並刪除不出現在結果工作表
本帖最後由 jeffrey628litw 於 2019-12-18 16:03 編輯
請問 VBA 程式要如何修改 ,才能讓模糊條件比對完整條件,並刪除不出現在結果工作表
請問 VBA Module11 程式要如何修改,才能讓工作表 "設比對條件清單" 裡面 HAKKO HLK1071
能比對工作表 "比對後重複清單" DORMAN 761-5104/HAKKO HLK1071
然後 HAKKO HLK1071產生在C欄,
在每次比對後新產生的工作表 Sheet 消失。
1.輸入HAKKO HLK1071 在 A欄 Partslink裡面,
[attach]31561[/attach]
然後按下右上紫色按鈕 查詢[未比對到]編號
2.比對工作表 "比對後重複清單" DORMAN 761-5104/HAKKO HLK1071
然後 HAKKO HLK1071產生在C欄
[attach]31562[/attach]
3.在每次比對後新產生的工作表 Sheet 消失。
[attach]31563[/attach]
檔案下載:https://cht.tw/h/qvba0
Module11 程式碼:
Sub 開始比對不重複()
Dim t1
t1 = Timer '這是產生秒數的 MSG
'==============================================================
Sheets("比對後重複清單").Select
ROW1 = Cells(Rows.Count, "C").End(3).Row
'下面3列程式是如果要撈出2欄以上資料需開放的程式碼
' If ROW1 > 2 Then
' Range(Cells(1, "C"), Cells(ROW1, "E")).Clear
' End If
'==============================================================
ROW1 = Cells(Rows.Count, "A").End(3).Row
arr = Range("A2:A" & ROW1)
ROW2 = Sheets("設比對條件清單").Cells(Rows.Count, "A").End(3).Row
'如果要撈出2欄以上資料需開放的程式碼,2欄 Range("A1:A" & ROW2) 要改成 Range("A1:B" & ROW2)
Sheets("設比對條件清單").Range("A1:A" & ROW2).AdvancedFilter _
Action:=xlFilterCopy, CriteriaRange:=Range("A1:A" & ROW1), CopyToRange:=Range( _
"C1:C1"), Unique:=False
'上面的 "C1:C1" 為從資料庫撈出比對後資料,顯示在此工作表 C1:C1
Columns("C:C").ColumnWidth = 28
Columns("D:D").ColumnWidth = 16
'==============================================================
'以下是生成 不重複項目 的工作表
Sheets.Add After:=Sheets(Sheets.Count)
'Sheets(Sheets.Count).Name = "未比對到清單"
Columns("A:A").ColumnWidth = 28
Columns("B:B").ColumnWidth = 16
Cells(1, 3).Formula = "● 此是[未比對到]清單"
Cells(1, 3).Font.Color = RGB(43, 20, 134)
Cells(1, 3).Font.Bold = True
Cells(1, 6).Formula = "● 使用過後可刪除此工作表"
Cells(1, 6).Font.Color = RGB(128, 13, 32)
Cells(1, 6).Font.Bold = True
Sheets("設比對條件清單").Range("A1:A" & ROW2).Copy Range("A1")
For i = ROW2 To 2 Step -1
For j = 1 To UBound(arr)
If Cells(i, "A") Like arr(j, 1) Then
Rows(i).Delete
GoTo 1100
End If
Next
1100:
Next
'==============================================================
'以下為讓產生 工作表 不重複項目 的A1儲存格產生名稱
With Selection.Validation
.Delete
.Add Type:=xlValidateInputOnly, AlertStyle:=xlValidAlertStop, Operator _
:=xlBetween
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.IMEMode = xlIMEModeNoControl
.ShowInput = True
.ShowError = True
End With
'==============================================================
'以下為顯示VBA Run程式的時間
MsgBox "抓資料完成! " & Chr(10) & "使用時間:" & Round(Timer - t1, 2) & " 秒" & Chr(10) & "未比對到的資料,共計有" & " " & Application.CountA(ActiveSheet.Columns("A:A")) - 1 & " " & "筆"
'MsgBox "抓資料完成! " & Chr(10) & "使用時間:" & Round(Timer - t1, 2) & " 秒" 這是產生秒數的 MSG
'==============================================================
End Sub
作者:
jeffrey628litw
時間:
2019-12-18 17:46
更正一下2.的結果
2.比對工作表 "比對後重複清單" DORMAN 761-5104/HAKKO HLK1071
然後 DORMAN 761-5104/HAKKO HLK1071
產生在C欄
作者:
jeffrey628litw
時間:
2019-12-20 09:55
回復
1#
jeffrey628litw
爬文已經找到方法,提供給各位參考
Sub 過濾單一儲存格雙條件重複清單()
Dim Ar(32)
Sheets("設比對條件清單").Select
Sheets("設比對條件清單").Name = "Sheet1"
Set d = CreateObject("Scripting.Dictionary")
With Sheet1
For Each a In .Range(.[A2], .[A101].End(xlUp))
For i = 0 To 1
Ar(i) = a.Offset(, i).Value
Next i
d(a & "") = Ar
Next
End With
Range("a1").Parent.Name = "設比對條件清單"
Sheets("比對後重複清單").Select
Sheets("比對後重複清單").Name = "Sheet2"
With Sheet2
For Each a In .Range(.[D2], .[D101].End(xlUp))
For Each ky In d.keys
If InStr(a, ky) > 0 Then a.Offset(, -3).Resize(, 1) = d(ky): Exit For
Next
Next
End With
Range("D2").Select
Selection.AutoFill Destination:=Range("D2:D101"), Type:=xlFillDefault
Range("D2:D101").Select
Range("D2").Select
Range("a1").Parent.Name = "比對後重複清單"
End Sub
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)