Функция установки макроса VBA в операторе triple if

#vba #excel #macros

#vba #excel #макросы

Вопрос:

Я пытаюсь использовать функцию «instring», чтобы создать тройной фильтр для счетчика. Основная идея состоит в том, чтобы определить диапазон, а затем проверить каждую ячейку следующим образом:

1) Найдите содержимое «0111» в ячейке

2) Если найдено содержимое «0111» в ячейке, проверьте в столбце слева от этой ячейки, существует ли содержимое «127»

3) Проверьте, не является ли строка текущей ячейки красной (цвет 3)

4) Если все вышесказанное верно, увеличьте счетчик.

Мой код выглядит следующим образом:

 Set SrchRng4 = Range("J1:J100")

 For Each cel In SrchRng4
   If InStr(1, cel.Value, "0111", 1) > 0 Then
   If InStr(1, ActiveCell(Offset(-1,0), "127", 1) > 0 And  cel.EntireRow.Interior.ColorIndex <> 3 Then
        count_K = count_K   1

    End If
Next cel
  

Она работает для поиска «111» и исключения красных строк, но не работает после добавления фильтра «127».
Кто-нибудь может внести свой вклад в это? Я полагаю, это какая-то проблема с синтаксисом?

С уважением, Маркус

Комментарии:

1. попробуйте с If InStr(1, cel.Offset(-1,0), "127", 1) > 0 And ...

2. @KazimierzJawor5 дал вам решение, за исключением cel.Offset(-1,0) должно быть cel.Offset(0,-1) . Кроме того, если у вас возникнут проблемы с производительностью time, вы можете выполнить фильтрацию по первым двум условиям, а затем перебирать отфильтрованные ячейки только для проверки последнего

3. Привет, ребята, спасибо вам за ответы. Цикл, похоже, не завершается, теперь ошибка находится в последней строке кода: «ошибка компиляции: Следующий без For»

Ответ №1:

 For Each cel In Range("J1:J100")
    If InStr(cel, "0111") And InStr(cel( ,0), "127") _ 
        And cel.EntireRow.Interior.Color <> vbRed Then count_K = count_K   1
Next 
  
  • Числовые значения, отличные от 0, вычисляются равными True , поэтому > 0 это необязательно
  • cel(,0) аналогично cel.Offset(0,-1) для получения ячейки, оставшейся от cel
  • vbRed и rgbRed являются константами для красного цвета, но .ColorIndex <> 3 тоже подходит
  • у каждого If .. Then оператора должен быть соответствующий End If оператор, если только он не находится в одной строке