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

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

=MAX(A1:A3,E5)

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

  1. Откройте диалоговое окно «Параметры Excel». (В Excel 2007 нажмите кнопку «Office», а затем нажмите «Параметры Excel. В Excel 2010 и более поздних версиях откройте вкладку« Файл »на ленте, а затем нажмите« Параметры ».)

  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.

Этот совет (10916) применим к Microsoft Excel 2007, 2010, 2013, 2016, 2019 и Excel в Office 365. Вы можете найти версию этого совета для старого интерфейса меню Excel здесь:

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