VBA для выполнения действия, пока ячейка не будет соответствовать критериям

Мне не удалось это найти, надеюсь, вы все можете помочь.

Я пытаюсь выполнить в Excel следующее:

Если ячейка соответствует значению из таблицы1, выделите эту ячейку. Затем выделите ячейку под ней и продолжайте выделять ячейки под ней, пока не дойдете до ячейки, которая соответствует значению из таблицы2.

Я не могу понять, как работать с функцией цикла для этого

заранее спасибо

Пожалуйста, обновите свой вопрос конкретным примером.

Gary's Student 01.05.2018 18:11

Посмотрите примеры Do Loopздесь

Scott Holtzman 01.05.2018 18:14
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
3
2
79
1

Ответы 1

Я написал простой цикл for, который выполняет итерацию по диапазону данных. Моя таблица данных состоит из целых чисел от 1 до 15, названных «Данные». Начальная точка называется «Точка_1», а конечная точка - «Точка_2».

Код ниже с аннотациями для ясности. По сути, это просто включение выделения, когда ячейка соответствует Point_1, и выделение, пока оно не будет выключено обратно, когда ячейка соответствует Point_2.

Sub HighlightRange()
Dim cel As Range
Dim dataRange As Range
Dim highlighting As Boolean

highlighting = False

With Application.ActiveWorkbook.Sheets("Sheet1")

    Set dataRange = .Range("Data") 'This is your data range. I named mine 'Data'

    For Each cel In dataRange
        'Check for beginning or end values
        If cel = .Range("Point_1").Value Then 'This is your starting value. I named mine 'Point_1'
            highlighting = True
        ElseIf cel = .Range("Point_2").Value Then 'This is your ending value. I named mine 'Point_2'
            highlighting = False
        End If

        'While highlighting is activated, highlight the current cell
        If highlighting = True Then
            cel.Interior.ColorIndex = 5
        End If

    Next cel 'Check all cells in dataRange

End With

End Sub

Примечательно, что конечная точка не выделяется. Однако вы можете переместить оператор ElseIf, который отключает выделение, в конец цикла for после команды выделения. Это отключит выделение ПОСЛЕ выделения Point_2, а не непосредственно перед ним. Код для этого случая ниже.

Sub HighlightRange()
Dim cel As Range
Dim dataRange As Range
Dim highlighting As Boolean

highlighting = False

With Application.ActiveWorkbook.Sheets("Sheet1")
'This code also highlights Point_2.

    Set dataRange = .Range("Data") 'This is your data range. I named mine 'Data'

    For Each cel In dataRange
        'Check for beginning or end values
        If cel = .Range("Point_1").Value Then 'This is your starting value. I named mine 'Point_1'
            highlighting = True
        End If

        'While highlighting is activated, highlight the current cell
        If highlighting = True Then
            cel.Interior.ColorIndex = 5
        End If

        If cel = .Range("Point_2").Value Then 'This is your ending value. I named mine 'Point_2'
            highlighting = False
        End If

    Next cel 'Check all cells in dataRange

End With

End Sub

Надеюсь, это помогло! Вы можете изменить цвет выделения с синего (colorIndex = 5) на любой понравившийся вам цвет. Если вы нажмете «Записать макрос» и отформатируете ячейку так, как хотите, вы можете скопировать сгенерированный код в этот макрос вместо следующей строки:

cel.Interior.ColorIndex = 5

Ура и удачи!

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