#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
оператор, если только он не находится в одной строке