Если вы используете циклы For …​ Next в макропрограммировании (а кто этого не делает?), То вы должны знать, что они могут занять много времени. Вы можете минимизировать это, проверяя только то, что вам нужно. Например, рассмотрим следующий код, который проверяет массив, чтобы узнать, существует ли значение. Если нет, то он добавляет значение в конец массива. Если да, то стоимость не добавляется.

AddIt = False For J = 1 to NumEntries     If NumValues(J) = ToAdd Then AddIt = True Next J If AddIt Then     NumEntries = NumEntries + 1     NumValues(NumEntries) = ToAdd End If

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

AddIt = False For J = 1 to NumEntries     If NumValues(J) = ToAdd Then         AddIt = True         Exit For     End If Next J If AddIt Then     NumEntries = NumEntries + 1     NumValues(NumEntries) = ToAdd End If

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

_Примечание: _

Если вы хотите узнать, как использовать макросы, описанные на этой странице (или на любой другой странице на сайтах ExcelTips), я подготовил специальную страницу, содержащую полезную информацию.

link: / excelribbon-ExcelTipsMacros [Щелкните здесь, чтобы открыть эту специальную страницу в новой вкладке браузера].

ExcelTips — ваш источник экономичного обучения Microsoft Excel.

Этот совет (2260) относится к Microsoft Excel 97, 2000, 2002 и 2003. Вы можете найти версию этого совета для ленточного интерфейса Excel (Excel 2007 и более поздних версий) здесь:

link: / excelribbon-Exiting_a_For_Next_Loop_Early [Ранний выход из цикла For …​ Следующий цикл].