У Майка есть три ячейки (A1: A3), которые показывают результаты вычислений. Ему нужен способ определить максимальное значение, которое когда-либо появлялось в любой из этих ячеек, и сохранить это значение в ячейке E5. Он знает, как получить максимум из трех, но когда он пересчитывает рабочий лист, если значения в A1: A3 меньше максимального значения в E5 (на основе предыдущих определений максимума в A1: A3), тогда E5 не должно измениться. Другими словами, E5 должен изменяться только в том случае, если то, что указано в A1: A3, больше, чем в E5. Майк не знает, как произвести такой расчет.

Есть два способа решить эту проблему. Первый — создать простую формулу, которая будет помещена в ячейку E5:

=MAX(A1:A3,E5)

Функция MAX проверяет различные значения, на которые она ссылается, и затем возвращает максимум из них — именно то, что требуется. Однако, поскольку эта формула помещается в ячейку E5 и также ссылается на E5, она вернет ошибку. Это потому, что формула создает круговую ссылку. Excel может справиться с этим, но для этого нужно внести небольшое изменение в конфигурацию:

  1. Выберите «Параметры» в меню «Инструменты». Excel отображает диалоговое окно «Параметры».

  2. Откройте вкладку «Расчет». (См. Рис. 1.)

  3. Убедитесь, что установлен флажок Итерация.

  4. Щелкните ОК.

Теперь Excel будет обрабатывать циклические ссылки, такие как простая формула, которую вы поместили в ячейку E5.

Второй подход — использовать макрос для выполнения вычислений. Этот подход может быть предпочтительным, потому что вы можете не захотеть (по какой-то причине) включать циклические ссылки в своей книге. Следующее — это фактически обработчик событий, добавленный в код для рабочего листа. (Самый простой способ:

Щелкните правой кнопкой мыши вкладку листа, откройте окно кода из появившегося контекстного меню и добавьте макрос в это окно кода.)

Private Sub Worksheet_Calculate()

Dim dMax As Double     dMax = Application.WorksheetFunction.Max(Range("A1:A3"))

If dMax > Range("E5") Then         Application.EnableEvents = False         Range("E5") = dMax         Application.EnableEvents = True     End If End Sub

Макрос запускается каждый раз при пересчете рабочего листа. Он берет максимум A1: A3 и сравнивает его с тем, что есть в E5. Только если оно больше, это значение помещается в E5.

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

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

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

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

Этот совет (10915) применим к Microsoft Excel 97, 2000, 2002 и 2003.

Вы можете найти версию этого совета для ленточного интерфейса Excel (Excel 2007 и новее) здесь:

link: / excelribbon-Only_Showing_the_Maximum_of_Multiple_Iterations [Отображается только максимальное количество множественных итераций].