Привет, я пытаюсь создать цикл с функцией if, которая считывает данные, а затем форматирует цвет ячейки в зависимости от результата. Я могу заставить цикл работать с начальной точки, но он не будет продолжать цикл по всей моей таблице. Есть ли способ решить эту проблему?
Sub Loop
Range("G6:AM37").Interior.ColorIndex = 0 'No fill colour for all cells in the range to clear the last colouring
Dim ColRange As Range
For RR = 1 To 33 'Loop through Rows
For CC = 1 To 31 'Loop through col.
''''''''''''''''''''''''''''''''''''''''''
Dim MM As Variant
Set ColRange = Cells(RR + 5, CC + 6)
MM = Mid(ColRange, 9, 2)
If MM = "" Then
ColRange.Interior.ColorIndex = 0 ' no colour
Exit For
ElseIf CInt(MM) > 39 Then
ColRange.Interior.ColorIndex = 50
ElseIf CInt(MM) < 40 Then
ColRange.Interior.ColorIndex = 38
End If
''''''''''''''''''''''''''''''''''''''''''
Next
Next
Просто избавьтесь от Exit For
.
В первой ячейке, которая выполняет первое If
, вы выходите из цикла.
Также обратите внимание, что у вас могут быть переменные цикла, начинающиеся с 6, поэтому вам не нужно писать RR + 5 при обращении к номерам строк внутри цикла.
Это не часть вопроса, но после внесения предложенного мной изменения, скорее всего, вы получите ошибку при попытке преобразовать MM в Int. Если MM является строкой, то CInt(MM)
выдаст ошибку. Итак, прежде чем оценивать CInt(MM), вы должны иметь ветку, If IsNumeric(MM) = False
и придумать форматирование для этого случая (или ничего не делать в этом случае).
Кроме того, Integer — это небольшой тип данных, вместо него используйте Long. Вы можете конвертировать в Long с помощью CLng
.
Свойство Range.Interior.ColorIndex
, которое вы уже используете, также доступно для чтения. Если вы хотите в RGB, то вам нужно Range.Interior.Color
Спасибо! Это сработало сразу! Знаете ли вы, есть ли у меня способ запрограммировать функцию, которая будет считывать цвет этих ячеек в каждой строке и в зависимости от того, все ли цвета зеленые (38), изменять цвет другой ячейки? еще раз спасибо