Имею некий конвертер, в котором нужно сопоставить товары с брендами. Для этого использую формулу ИНДЕКС ПОИСПОЗ. Но после сопоставления появляются #Н/Д. Прошу вас подсказать как в VBA удалить строки со значением ячейки #Н/Д.
Так же прошу подсказать, как мне всиавить формулу только в таблицу где есть значения. Вопрос связан с тем, что кол-во строк будет постоянно меняться и при протягивании формулы макрорекодер ссылается на диапозон ячеек. Пример приложил))
DT01, Составил код из двух частей, первая- немного изменил ваш код, который вставляет столбец с формулой, вторая - удаляет строки по условию, использовал код отсюда https://www.excel-vba.ru/chto-umeet-excel/kak-udalit-stroki-po-usloviyu/ (посмотрите, там много полезного найдете) Закомментировал для вас строки, чтобы вы понимали ход процесса.
Ту часть, которая переносила отфильтрованные данные на другой лист- убрал. Так как я понимаю, вы делали это для того, чтобы получить данные без ошибок. Если вдруг понадобится-добавьте) думаю справитесь) P/S Уверен, что можно это все и короче записать, но я не могу)
Код
Sub Delete_row()
Dim sSubStr As String 'искомое слово или фраза(может быть указанием на ячейку)
Dim lCol As Long 'номер столбца с просматриваемыми значениями
Dim lLastRow As Long, li As Long
Dim arr
Dim lngI As Long
lngI = Cells(Rows.Count, 9).End(xlUp).Row'тут определяем последнюю заполненную строку в столбце 9, заносим в переменную
Sheets("Данные из ВАРМ").Columns(9).Insert Shift:=xlToRight 'вставляем столбец
Range("I1").Value = "Brand" ' называем его
Range("I2").FormulaR1C1 = _
"=IFERROR(INDEX(Номенклатуры!R2C3:R213C3,MATCH('Данные из ВАРМ'!RC[-1],Номенклатуры!R2C2:R213C2,0)),0)" 'тут ошибку заменил на ноль
Range("I2").AutoFill Destination:=Range("I2:I" & lngI) ' протягиваем формулу до конца диапазона (используем переменную в которой хранится номер последней заполненной строки)
Range("I2:I" & lngI) = Range("I2:I" & lngI).Value ' тут меняем формулу на значения (не обязательно)
'теперь удаляем нули, которыми мы заменили ошибку #Н/Д
sSubStr = 0 ' значение которое ищем
lCol = 9 'столбец в котором ищем
lLastRow = ActiveSheet.UsedRange.Row - 1 + ActiveSheet.UsedRange.Rows.Count
arr = Cells(1, lCol).Resize(lLastRow).Value
Application.ScreenUpdating = 0
Dim rr As Range
For li = 1 To lLastRow 'цикл с первой строки до конца
If CStr(arr(li, 1)) = sSubStr Then
If rr Is Nothing Then
Set rr = Cells(li, 1)
Else
Set rr = Union(rr, Cells(li, 1))
End If
End If
Next li
If Not rr Is Nothing Then rr.EntireRow.Delete
Application.ScreenUpdating = 1
End Sub