Вы можете действительно легко сделать это, используя Vlookup:
=IF(ISERROR(VLOOKUP(C1,Sheet2!A:A,1,FALSE)),"Not Available","Available")
Но поскольку вы запросили VBA, вот функция, которая сделает это, используя объект словаря и вариантные массивы для эффективности и скорости.
- Дамп столбца C и столбца A в вариантный массив
- Создание словаря значений столбца A
- Поиск в записях столбца C, чтобы увидеть, существуют ли они в A
- Переменная i также является номером строки, поэтому довольно просто поместить текст в столбец D.
Sub TestAvailability()
Application.ScreenUpdating = False
Dim varrayC As Variant, varrayA As Variant
Dim lastRow As Long
Dim dict As Object
Set dict = CreateObject("scripting.dictionary")
lastRow = Sheets(2).range("A" & Rows.count).End(xlUp).Row
varrayA = Sheets(2).range("A1:A" & lastRow).Value
lastRow = Sheets(1).range("C" & Rows.count).End(xlUp).Row
varrayC = Sheets(1).range("C1:C" & lastRow).Value
On Error Resume Next
For i = 1 To UBound(varrayA, 1)
dict.Add varrayA(i, 1), 1
Next
For i = 1 To UBound(varrayC, 1)
If dict.exists(varrayC(i, 1)) = True Then
Sheets(1).cells(i, 4).Value = "Available"
Else
Sheets(1).cells(i, 4).Value = "Not Available"
End If
Next
Application.ScreenUpdating = True
End Sub
Технически вы можете создать новый массив доступности и транспонировать его.в колонке D, но я не хотел делать это слишком сложным.