Как избавиться от ошибки н/д в цикле - VBA

Узнай цену своей работы

Формулировка задачи:

Есть список, нужно маркировать члены этого списка в соответствии со списком на другом листе буквой B, если они есть в этом списке. В Exel работает элементарная формула: =ЕСЛИ(B1=ИНДЕКС(Список!$A$2:$A$38;ПОИСКПОЗ(B1;Список!$A$2:$A$38;0);1);"B";0) В VBA она не работает никак, потому что если наименование не присутствует во втором списке, стоит ошибка н/д, и цикл спотыкается на первом же члене. Вариации с Err у меня не получаются. Или цикл не идет, или работает неправильно. Что делать в этом случае? Файл примера прилагается.

Решение задачи: «Как избавиться от ошибки н/д в цикле»

textual
Листинг программы
  1. Sub tt()
  2.     Dim a(), i&
  3.  
  4.     With CreateObject("Scripting.Dictionary")
  5.         .CompareMode = 1
  6.  
  7.         a = Sheets("Список").[A1].CurrentRegion.Value
  8.         For i = 1 To UBound(a)
  9.             .Item(Trim(a(i, 1))) = vbNullString
  10.         Next
  11.  
  12.         a = Sheets("Лист1").[A1].CurrentRegion.Columns(2).Value
  13.         ReDim b(1 To UBound(a), 1 To 1)
  14.         For i = 1 To UBound(a)
  15.             If .exists(Trim(a(i, 1))) Then b(i, 1) = "B"
  16.         Next
  17.  
  18.     End With
  19.  
  20.     Sheets("Лист1").[C1].Resize(UBound(b), 1) = b
  21.  
  22. End Sub

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


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

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

15   голосов , оценка 4.067 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы