每個月,我從SAP數據庫中導出2個列表,並將其保存爲單獨的Excel文件。列表A包含上個月發現的所有缺陷。清單B包含由外部供應商引起的所有缺陷。在完整的報告之前,我對ListA做了很多格式化,並且我有一個完美的大部分宏。我似乎無法得到列表比較片的工作。使用VBA比較2個列表
我的手動過程是在列表A中插入一個新列D,在012格中輸入=VLOOKUP(A2,ListB!$A$2:$N$946,1,FALSE)
,並將其複製到最後(查找表的範圍因ListB的大小而異)。然後,我將篩選列表以排除「#N/A」,並將其餘行中的「原因」列(現在列E)的值更改爲「供應商」。最後,我刪除了VLOOKUP列。
我認爲自動化這個過程很容易,但它給了我幾個migranes。我可以通過嵌套For循環完成工作like this,但我覺得必須有一個更有效的方法。
首先,我嘗試內的VLOOKUP Aplication功能For循環:
'ListA and ListB declared as Worksheets and set
Dim aRange as Range, bRange as Range
Dim last row As Integer
Set aRange = ListA.Range("A1")
Set aRange = Range(aRange, aRange.End(xlToRight))
Set aRange = Range(aRange, aRange.End(xlDown))
Set bRange = ListB.Range("A1")
Set bRange = Range(bRange, bRange.End(xlToRight))
Set bRange = Range(bRange, bRange.End(xlDown))
'I'm skipping over the stuff that would be here but don't need help with
lastrow = ListA.Range("A1").End(xlDown).Row
For i = 2 To lastrow
ListA.Cells(i, 4).Value = Application.WorksheetFunction.VLookup(ListA.Cells(i, 1), bRange, 3, False)
If ListA.Cells(i, 4).Value <> "#N/A" Then ListA.Cells(i, 5).Value = "Vendor"
Next i
不幸的是,這種方法在那個會返回#N/A錯誤的第一個單元格遇到了運行時錯誤。
對於我的第二次嘗試,我記錄一個宏會通過我的手動過程,而然後試圖從這個不斷變化的返回碼:
ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[-3],Sheet1!R2C1:R946C14,1,FALSE)"
Range("D2").Select
Selection.AutoFill Destination:=Range("D2:D1033"), Type:=xlFillDefault
Range("D2:D1033").Select
這樣:
Set aRange = ListA.Range("D2")
Set aRange = Range(aRange, aRange.End(xlDown))
Set bRange = ListB.Range("A1")
Set bRange = Range(bRange, bRange.End(xlToRight))
Set bRange = Range(bRange, bRange.End(xlDown))
Range("D2").FormulaR1C1 = "=VLOOKUP(RC[-3]," & bRange & ",1,FALSE)"
Range("D2").AutoFill Destination:=aRange, Type:=xlFillDefault
這種方法ISN」根據運行時錯誤,由於類型不匹配而無法工作。我只能假設它不喜歡我在公式中間粘貼可變範圍,但我不知道另一種確保查找表是正確大小的方法。
任何幫助(哪種方法更有效率,如何讓這些工作中的一種,甚至是我沒有想到的其他方法)都非常感謝。