MyTetra Share
Делитесь знаниями!
Циклы и оператор if
09.12.2017
17:58
Раздел: VBA - Для начинающих

Вы уже знаете основные объекты VBA Excel и действия с ними. Пора переходить к настоящей автоматизации.

 

Циклы

Циклы - повторяющиеся действия. Бывает нужно сделать одно и то же действие определенное количество раз (например, на пяти листах вставить столбец с одинаковыми данными или заголовком), а бывает, что нужно делать какое-то действие "до тех пор, пока ..." (например, пока не найдется строка с нужными данными). В VBA для двух этих случаев есть два цикла: "for" - для повторения действий заданное число раз, и "while" - для повторения действий "до тех пор, пока ...". Разница между двумя циклами только одна: в первом случае вы знаете, сколько раз надо повторить цикл, а во втором - не знаете, но знаете, когда нужно остановиться. Есть и другие циклы, но их можно легко заменить этими двумя.

 

Цикл for

Возьмем наш пример: нужно на пять листов вставить, например, первый столбец, пустой.

 

    For i=1 to 5                           ' присваивает значения переменной i в первый раз 1,

                                            ' затем прибавляя по 1 с каждым новым заходом в

                                            ' цикл. Значение 5 будет последним.

         Sheets(i).Activate             ' активируем очередной лист

         Columns(1).Insert             ' вставляем первый столбец

    Next i                                   ' конец цикла, то есть конец списка действий,

                                            ' которые нужно сделать 5 раз подряд

 

Цикл While

Цикл While используется чаще, чем For, потому что часто мы не знаем, сколько раз нужно сделать какое-то действие. Он используется, например, при поиске строчки с заданными критериями. Рассмотрим такой пример: в столбцах есть данные - фамилия (1 столбец), имя (2 столбец), отчество (3), год рождения (4). Нам нужно найти Иванова и, например, удалить его из базы. Допустим, мы знаем, что такой человек один. Тогда программа может быть такой:

 

    i=2        ' определяем, с какой строки начинается база (в первой строке расположены заголовки)

    Do While Cells(i,1)<>"Иванов"                  ' делать до тех пор, пока

    i=i+1                                                            ' фамилия<>Иванов

    Loop                                    

                       

В итоге цикл закончится на искомой строчке. После этого можно делать с этой строчкой всё, что угодно.

 

Или, может быть, мы не знаем, сколько Ивановых в нашей базе и хотим удалить их всех. Здесь нам понадобится условный оператор If


Оператор If

Условный оператор If (если) называется так, потому что проверяет выполнение условия. Принцип его работы понять очень просто: если условие выполняется, то делаем так, иначе делаем так. Рассмотрим наш пример: нам нужно пробежать по всей базе, то есть до тех пор, пока строчки не пусты, т.е:


    Do While Cells(i,1)<>""


Заметим, что важно, чтобы не было пропусков. Если в вашей базе есть строки с пустыми ячейками, то можно указывать более сложное условие, например 


    Do While Сells(i,1)<>"" and Сells(i+1,1)<>"" and Сells(i+2,1)<>""


то есть нужно, чтобы три строки подряд были пустыми в первом столбце. Или


    Do While Сells(i,1)<>"" and Сells(i,2)<>"" and Сells(i,3)<>""


то есть нужно, чтобы в первом, втором и третьем столбцах строки было пусто.

Воспользуемся этим условием

 

    i=2

    Do While Сells(i,1)<>"" and Сells(i,2)<>"" and Сells(i,3)<>""

        If Cells(i,1)="Иванов" then     ' Если в строке Иванов

            Rows(i).Delete                  ' тогда удаляем эту строку

            i=i-1                                ' возвращаемся на строку выше

        End If                                ' закрываем условие

        i=i+1                               ' переходим к следующей строке

    Loop

 

Обрати внимание на необходимость возвращаться на строку выше при удалении строки. В программе мы указываем номер строки, а переходим к следующей, прибавляя единичку. Если удалить строку номер 5, то на её место "въедут" данные шестой строки, став снова пятой. Но так как эти данные мы не просмотрели, придется зайти в строку №5 снова. Чтобы это сделать, после удаления отнимаем единичку, потом при переходе прибавляем единичку и попадаем в строку с тем же номером.

Так же в этом разделе:
 
MyTetra Share v.0.52
Яндекс индекс цитирования