Как избавиться от ошибки н/д в цикле - 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

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4.067 из 5
Похожие ответы