Россия

Организация циклов по списку данных в электронной таблице Excel

Дата публикации: 04.01.2016

Для выполнения цикла по списку данных в электронной таблице существует несколько способов которые зависят от поставленных задач:

  • цикл по списку содержащему известное, постоянное количество строк,
  • цикл по динамическому списку или списку с неизвестным количеством строк,
  • цикл по списку, содержащий конкретную запись.

В следующих примерах кода предполагается, что строка заголовка списка начинается в ячейке 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