Для выполнения цикла по списку данных в электронной таблице существует несколько способов которые зависят от поставленных задач:
- цикл по списку содержащему известное, постоянное количество строк,
- цикл по динамическому списку или списку с неизвестным количеством строк,
- цикл по списку, содержащий конкретную запись.
В следующих примерах кода предполагается, что строка заголовка списка начинается в ячейке A1, а данные начинаются в ячейке A2.
Поиск в списке с постоянным известным количеством строк
Этот код перемещает столбец A в конец списка:
Sub Test1() Dim x As Integer ' numrows := чисто строк данных. NumRows = Range("A2", Range("A2").End(xldown)).Rows.Count ' Выбор ячейки a1. Range("A2").Select ' Организация цикла "For" с числом повторений "numrows". For x = 1 To NumRows ' Вставьте код сюда. ' Выбор ячейки на 1 строку ниже активной. ActiveCell.Offset(1, 0).Select Next End Sub
Поиск в динамическом списке или списке с неизвестным количеством строк
Этот код перемещает столбец A в конец списка. (Предполагается, что каждая ячейка в столбце А содержит записи до конца.)
Sub Test2() ' Выбор ячейки A2, *первой строки данных*. Range("A2").Select ' Организация цикла Do до первой пустой ячейки. Do Until IsEmpty(ActiveCell) ' Вставьте код сюда. ' Перемещение на 1 строку ниже текущего местонахождения. ActiveCell.Offset(1, 0).Select Loop End Sub
Примечание: Если в данных столбца А попадаются пустые ячейки, измените код с учетом этого обстоятельства. Убедитесь, что пустые ячейки расположены на постоянном удалении друг от друга. Например, если каждая вторая ячейка в столбце А пуста (например, эта ситуация может возникать в том случае, когда каждая "запись" использует две строки, причем вторая строка имеет отступ в одну ячейку), код можно изменить следующим образом:
' Организация цикла Do до первых двух последоветельных ячеек. Do Until IsEmpty(ActiveCell) and IsEmpty(ActiveCell.Offset(1, 0)) ' Вставьте код сюда. ' ' Перемещение на 2 строки ниже текущего местонахождения. ActiveCell.Offset(2, 0).Select Loop
Поиск конкретной записи в списке
Этот код перемещает столбец A в конец списка:
Sub Test3() Dim x As String Dim found As Boolean ' Выбор первой строки данных. Range("A2").Select ' Установка значения для переменной поиска. x = "test" ' Установка значения "ложь" для логической переменной "found". found = False ' Организация цикла Do до первой пустой ячейки. Do Until IsEmpty(ActiveCell) ' Проверка активной ячейки на совпадение с переменной поиска. If ActiveCell.Value = x Then found = TRUE Exit Do End If ' Перемещение на 1 строку ниже текущего местонахождения. ActiveCell.Offset(1, 0).Select Loop ' Каково состояние переменной found? If found = True Then Msgbox "Значение найдено в ячейке " & ActiveCell.Address Else Msgbox "Значение не найдено" End If End Sub
Источник: Сайт технической поддержки Майкрософт
|