Макрос excel цикл по строкам: Выполните циклический просмотр списка данных на листе с помощью макросов — Office

Выполните циклический просмотр списка данных на листе с помощью макросов — Office





Twitter




LinkedIn




Facebook




Адрес электронной почты










  • Статья



  • Применяется к:

    Microsoft Office Excel 2007, Microsoft Office Excel 2003, Excel 2010

Аннотация

При написании макроса 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






Проход по диапазону ячеек | Microsoft Learn





Twitter




LinkedIn




Facebook




Адрес электронной почты










  • Статья



При использовании Visual Basic часто требуется выполнить один и тот же блок операторов в каждой ячейке диапазона. Для этого необходимо объединить оператор цикла и один или несколько методов для идентификации каждой ячейки по отдельности и выполнить операцию.

Один из способов пройти по диапазону — использовать цикл For…Next со свойством Cells. С помощью свойства Cells можно заменить номера индексов ячеек счетчиком циклов (или другими переменными или выражениями). В следующем примере индекс строки заменяется переменной counter. Процедура проходит по диапазону ячеек C1:C20, присваивая значение 0 (ноль) каждому числу, абсолютное значение которого меньше 0,01.

Sub RoundToZero1() 
 For Counter = 1 To 20 
 Set curCell = Worksheets("Sheet1").Cells(Counter, 3) 
 If Abs(curCell.Value) < 0.01 Then curCell.Value = 0 
 Next Counter 
End Sub

Еще один простой способ пройти по диапазону — использовать цикл For Each…Next с коллекцией ячеек, указанной в свойстве Range. Visual Basic автоматически присваивает объектную переменную для следующей ячейки при каждом выполнении цикла. Следующая процедура проходит по диапазону ячеек A1:D10, присваивая значение 0 (ноль) каждому числу, абсолютное значение которого меньше 0,01.

Sub RoundToZero2() 
 For Each c In Worksheets("Sheet1").Range("A1:D10").Cells 
 If Abs(c.Value) < 0.01 Then c.Value = 0 
 Next 
End Sub

Если вы не знаете границы диапазона, по которому нужно пройти, можно использовать свойство CurrentRegion, чтобы возвратить диапазон, окружающий активную ячейку. Например, при запуске на листе следующая процедура выполняет проход по диапазону, окружающему активную ячейку, присваивая значение 0 (ноль) каждому числу, абсолютное значение которого меньше 0,01.

Sub RoundToZero3() 
 For Each c In ActiveCell.CurrentRegion.Cells 
 If Abs(c.Value) < 0.01 Then c.Value = 0 
 Next 
End Sub

Поддержка и обратная связь

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.






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

Твиттер

LinkedIn

Фейсбук

Электронная почта

  • Статья
  • Применимо к:
    Microsoft Office Excel 2007, Microsoft Office Excel 2003, Excel 2010

Сводка

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

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

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

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

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

 Sub Test1()
      Dim x как целое число
      ' Установите numrows = количество строк данных. 
      NumRows = Диапазон ("A2", Диапазон ("A2"). Конец (xldown)). Строки. Количество
      ' Выделите ячейку а1.
      Диапазон("A2").Выбрать
      ' Установите цикл "For" для цикла "numrows" количество раз.
      Для x = 1 до NumRows
         'Вставьте сюда свой код.
         ' Выбирает ячейку на 1 строку ниже активной ячейки.
         ActiveCell.Смещение(1, 0).Выбрать
      Следующий
   Конец сабвуфера
 

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

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

 Sub Test2()
      ' Выберите ячейку A2, *первая строка данных*.
      Диапазон("A2").Выбрать
      ' Настроить цикл Do так, чтобы он останавливался при достижении пустой ячейки.
      Делать до тех пор, пока не станет пустым (ActiveCell)
         'Вставьте сюда свой код.
         ' Шаг вниз на 1 строку от текущего местоположения.
         ActiveCell. Смещение(1, 0).Выбрать
      Петля
   Конец сабвуфера
 

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

 ' Установить Выполните цикл, чтобы остановиться, когда будут достигнуты две последовательные пустые ячейки.
     Делать до IsEmpty(ActiveCell) и IsEmpty(ActiveCell.Offset(1, 0))
        'Вставьте сюда свой код.
        '
       ' Спуститесь на 2 строки ниже текущего местоположения.
       ActiveCell.Смещение(2, 0).Выбрать
     Петля
 

Для поиска определенной записи в списке

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

 Sub Test3()
      Dim x As String
      Dim найдено как Boolean
      ' Выберите первую строку данных. 
      Диапазон("A2").Выбрать
      ' Установить значение переменной поиска.
      х = "тест"
      ' Установить логическую переменную "Найдено" в false.
      найдено = Ложь
      ' Настройте цикл Do так, чтобы он останавливался на пустой ячейке.
      Делать до тех пор, пока не станет пустым (ActiveCell)
         ' Проверить активную ячейку на наличие искомого значения.
         Если ActiveCell.Value = x Тогда
            найдено = ИСТИНА
            Выход Сделать
         Конец, если
         ' Шаг вниз на 1 строку от текущего местоположения.
         ActiveCell.Смещение(1, 0).Выбрать
      Петля
   ' Проверить найдено.
      Если найдено = Верно Тогда
         Msgbox «Значение найдено в ячейке» и ActiveCell.Address
      Еще
         Msgbox "Значение не найдено"
      Конец, если
   Конец сабвуфера
 

Цикл по диапазону с использованием VBA (столбцы, строки и используемый диапазон)

Home / VBA / Цикл по диапазону с использованием VBA (столбцы, строки и используемый диапазон)

Цикл по всему столбцу и строке с использованием VBA

Цикл по динамическому диапазону

Дополнительные руководства

Чтобы пройти по диапазону в VBA, вам нужно использовать «For Each Loop». Используя этот цикл, вы можете написать код, в котором вы указываете VBA просмотреть каждую ячейку в диапазоне, столбце или строке и выполнить определенное действие.

  Sub  vba_loop_range()
  Dim  iCell  Как  Диапазон
  Для   Каждая  iCell  В диапазоне  ("A1:A10"). Ячейки
iCell.Value = "Да"
  Следующий  iCell
  End   Sub  

Ниже приведены шаги для циклического прохождения диапазона:

  1. Сначала объявите переменную, которая будет использоваться в качестве ячейки диапазона для цикла.
  2. После этого запустите цикл «Для каждого» и используйте переменную «iCell» для представления каждой ячейки в диапазоне во время цикла.
  3. Далее вам нужно написать строку кода, чтобы выполнить некоторые действия с каждой ячейкой, которую мы зацикливаем в диапазоне.
  4. В конце завершите код цикла.

Цикл по всему столбцу и строке с использованием VBA

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

Примечание. Прежде чем выполнять цикл по всему столбцу или строке, необходимо понимать, что выполнение цикла может занять довольно много времени, и это может привести к тому, что ваш Excel зависнет на несколько минут.

  Sub  vba_loop_range()
  Dim  iCell  Как  Диапазон
  Для   Каждая  iCell  В диапазоне  ("A:A"). Ячейки
iCell.Value = "Да"
  Следующий  iCell
  Конец   Подчиненный  

Точно так же вы можете использовать полную строку в качестве диапазона для циклического прохождения.

  Sub  vba_loop_range()
Dim iCell Как Диапазон
Для Каждая iCell В диапазоне ("1:1").