Как избавиться от ошибки н/д в цикле - VBA
Формулировка задачи:
Есть список, нужно маркировать члены этого списка в соответствии со списком на другом листе буквой B, если они есть в этом списке. В Exel работает элементарная формула:
=ЕСЛИ(B1=ИНДЕКС(Список!$A$2:$A$38;ПОИСКПОЗ(B1;Список!$A$2:$A$38;0);1);"B";0)
В VBA она не работает никак, потому что если наименование не присутствует во втором списке, стоит ошибка н/д, и цикл спотыкается на первом же члене. Вариации с Err у меня не получаются. Или цикл не идет, или работает неправильно. Что делать в этом случае?
Файл примера прилагается.
Решение задачи: «Как избавиться от ошибки н/д в цикле»
textual
Листинг программы
- Sub tt()
- Dim a(), i&
- With CreateObject("Scripting.Dictionary")
- .CompareMode = 1
- a = Sheets("Список").[A1].CurrentRegion.Value
- For i = 1 To UBound(a)
- .Item(Trim(a(i, 1))) = vbNullString
- Next
- a = Sheets("Лист1").[A1].CurrentRegion.Columns(2).Value
- ReDim b(1 To UBound(a), 1 To 1)
- For i = 1 To UBound(a)
- If .exists(Trim(a(i, 1))) Then b(i, 1) = "B"
- Next
- End With
- Sheets("Лист1").[C1].Resize(UBound(b), 1) = b
- End Sub
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д