Создание циклов в Excel VBA

Привет, я пытаюсь создать цикл с функцией 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
Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
0
0
88
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Просто избавьтесь от Exit For. В первой ячейке, которая выполняет первое If, вы выходите из цикла.

Также обратите внимание, что у вас могут быть переменные цикла, начинающиеся с 6, поэтому вам не нужно писать RR + 5 при обращении к номерам строк внутри цикла.

Это не часть вопроса, но после внесения предложенного мной изменения, скорее всего, вы получите ошибку при попытке преобразовать MM в Int. Если MM является строкой, то CInt(MM) выдаст ошибку. Итак, прежде чем оценивать CInt(MM), вы должны иметь ветку, If IsNumeric(MM) = False и придумать форматирование для этого случая (или ничего не делать в этом случае).

Кроме того, Integer — это небольшой тип данных, вместо него используйте Long. Вы можете конвертировать в Long с помощью CLng.

Спасибо! Это сработало сразу! Знаете ли вы, есть ли у меня способ запрограммировать функцию, которая будет считывать цвет этих ячеек в каждой строке и в зависимости от того, все ли цвета зеленые (38), изменять цвет другой ячейки? еще раз спасибо

cistrat 09.04.2019 12:58

Свойство Range.Interior.ColorIndex, которое вы уже используете, также доступно для чтения. Если вы хотите в RGB, то вам нужно Range.Interior.Color

z32a7ul 09.04.2019 13:48

Другие вопросы по теме