Другой способ использования Vlookup
Надеюсь, это то, что вы пытаетесь?
ПРОВЕРЕНО И ИСПЫТАНО
Option Explicit
Sub Sample()
Dim ws1 As Worksheet, ws2 As Worksheet
Dim ws1LastRow As Long, ws2LastRow As Long, i As Long
Dim SearchRange As Range
Set ws1 = Sheets("Sheet1")
ws1LastRow = ws1.Range("A" & ws1.Rows.Count).End(xlUp).Row
Set SearchRange = ws1.Range("A1:B" & ws1LastRow)
Set ws2 = Sheets("Sheet2")
With ws2
ws2LastRow = .Range("A" & .Rows.Count).End(xlUp).Row
For i = 2 To ws2LastRow
On Error Resume Next
If Not IsError(Application.WorksheetFunction.VLookup(.Range("A" & i).Value, SearchRange, 2, False)) Then
.Range("B" & i).Value = .Range("B" & i).Value - _
Application.WorksheetFunction.VLookup(.Range("A" & i).Value, SearchRange, 2, False)
End If
On Error GoTo 0
Next i
End With
'~~> Clear Sheet1 for next input
ws1.Cells.ClearContents
'~~> Clean Up
Set SearchRange = Nothing
Set ws1 = Nothing
Set ws2 = Nothing
End Sub
SNAPSHOT
![enter image description here](https://i.stack.imgur.com/K74W2.jpg)
FOLLOWUP
Чистка, которую вы делаете в данный момент, не является правильной.Если я выполняю очистку вручную, лист должен выглядеть следующим образом?
![enter image description here](https://i.stack.imgur.com/abuGs.png)
Также, если вы заметили, что числа сохраняются в виде текста или имеют пробелы.Vlookup завершится с ошибкой в этих сценариях.
![enter image description here](https://i.stack.imgur.com/nnDnc.png)
В таком случае я рекомендую следующее
1) Вам необходимо иметьмакрос в местах, который более эффективно очищает ваши данные для ввода
2) Либо вы перемещаете "SKU" перед "QTY", а затем используете Vlookup ИЛИ , используйтеАльтернативный метод.
3) Если вас интересует альтернативный метод, см. ( Раздел 4 ) по этой ссылке
http://www.siddharthrout.com/2011/07/14/find-and-findnext-in-excel-vba/