Поделиться через


Циклический просмотр списка данных на листе с помощью макросов в Excel

Аннотация

При написании макроса Microsoft Visual Basic для приложений (VBA), возможно, придется выполнять циклический просмотр список данных на листе. Существует несколько методов выполнения этой задачи. Раздел “Дополнительная информация” этой статьи содержит сведения о методах, которые можно использовать для поиска в списках следующих типов:

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

Дополнительная информация

Корпорация Майкрософт предоставляет примеры программирования только в целях демонстрации без явной или подразумеваемой гарантии. Данное положение включает, но не ограничивается этим, подразумеваемые гарантии товарной пригодности или соответствия отдельной задаче. Эта статья предполагает, что пользователь знаком с представленным языком программирования и средствами, используемыми для создания и отладки процедур. Специалисты технической поддержки Майкрософт могут пояснить работу той или иной процедуры, но модификация примеров и их адаптация к задачам разработчика не предусмотрена. В следующих примерах кода предполагается, что в списке есть строка заголовка, которая начинается в ячейке A1, и данные, которые начинаются в ячейке A2.

Поиск списка с постоянным, известным числом строк

Этот код перемещает столбец А в конец списка:

   Sub Test1()
      Dim x As Integer
      ' Set numrows = number of rows of data.
      NumRows = Range("A2", Range("A2").End(xldown)).Rows.Count
      ' Select cell a1.
      Range("A2").Select
      ' Establish "For" loop to loop "numrows" number of times.
      For x = 1 To NumRows
         ' Insert your code here.
         ' Selects cell down 1 row from active cell.
         ActiveCell.Offset(1, 0).Select
      Next
   End Sub

Поиск динамического списка или списка с неизвестным количеством строк

Этот код перемещает столбец А в конец списка. (Этот код предполагает, что каждая ячейка в столбце А содержит запись до конца.)

   Sub Test2()
      ' Select cell A2, *first line of data*.
      Range("A2").Select
      ' Set Do loop to stop when an empty cell is reached.
      Do Until IsEmpty(ActiveCell)
         ' Insert your code here.
         ' Step down 1 row from present location.
         ActiveCell.Offset(1, 0).Select
      Loop
   End Sub

Примечание Если в столбце A есть пустые ячейки в данных, измените этот код, чтобы учесть это условие. Убедитесь, что пустые ячейки находятся на одинаковом расстоянии друг от друга. Например, если каждая другая ячейка в столбце А пуста (например, такая ситуация может возникнуть, если каждая запись "Record" использует две строки с отступом второй строки), этот цикл может быть изменен следующим образом:

     ' Set Do loop to stop when two consecutive empty cells are reached.
     Do Until IsEmpty(ActiveCell) and IsEmpty(ActiveCell.Offset(1, 0))
        ' Insert your code here.
        '
       ' Step down 2 rows from present location.
       ActiveCell.Offset(2, 0).Select
     Loop

Поиск списка для конкретной записи

Этот код перемещает столбец А в конец списка:

   Sub Test3()
      Dim x As String
      Dim found As Boolean
      ' Select first line of data.
      Range("A2").Select
      ' Set search variable value.
      x = "test"
      ' Set Boolean variable "found" to false.
      found = False
      ' Set Do loop to stop at empty cell.
      Do Until IsEmpty(ActiveCell)
         ' Check active cell for search value.
         If ActiveCell.Value = x Then
            found = TRUE
            Exit Do
         End If
         ' Step down 1 row from present location.
         ActiveCell.Offset(1, 0).Select
      Loop
   ' Check for found.
      If found = True Then
         Msgbox "Value found in cell " & ActiveCell.Address
      Else
         Msgbox "Value not found"
      End If
   End Sub