Lost your password?


Хитрости »
Основные понятия (27)
Сводные таблицы и анализ данных (10)
Графики и диаграммы (5)
Работа с VB проектом (12)
Power BI и Power Query (23)
Условное форматирование (5)
Списки и диапазоны (5)
Макросы(VBA процедуры) (68)
Разное (43)
Баги и глюки Excel (5)

Как просмотреть этапы вычисления формул

Часто ли Вам приходилось разбирать чужой файл с непонятными на первый взгляд формулами? Вроде считают, но как? Вроде и разобраться хочется как работает какая-нибудь мега-формула - но как это сделать? Я хочу рассказать о паре простых шагов, которые необходимо сделать, чтобы разобраться в работе любой формулы. Давайте попробуем разобраться на примере формулы из моей статьи: Как получить список уникальных(не повторяющихся) значений?:
=ИНДЕКС($A$2:$A$51;НАИМЕНЬШИЙ(ЕСЛИ(СЧЁТЕСЛИ($C$1:C1;$A$2:$A$51)=0;СТРОКА($A$1:$A$50));1))
Что нам понадобится для начала:

  1. Знать что такое формула
  2. Знать что такое формула массива
  3. Не лениться заглядывать в справку по неизвестной функции. Как это сделать: ставим курсор мыши на интересующую формулу и жмем F1(в Excel 2003 и более ранних версиях только так можно). Начиная с Excel 2007 можно еще и иначе: ставим курсор внутрь функции - появится подсказка по функции. После чего нажимаем на имя функции из подсказки:
    Вызов справки
    Чем это поможет? Чтобы понять как работает формула в целом, необходимо знать, что делает каждая функция в неё вложенная и для чего предназначены её аргументы хотя бы в общих чертах.
  4. Не обязательно, но желательно скачать файл, приложенный к статье Как получить список уникальных(не повторяющихся) значений?, чтобы наглядно пройти все шаги, описанные ниже
    Скачать пример:

      Tips_All_ExtractUnique.xls (108,0 KiB, 19 006 скачиваний)

Если Вы не знакомы с функциями, используемыми в приведенной выше формуле и хотите разобраться - необходимо просмотреть справку по ним, иначе работу формулы не поймете даже с пояснениями

Вот теперь можно начать потрошить формулу. В принципе, самый сложный этап уже пройден. Теперь остается только воспользоваться встроенным средством Excel - окно просмотра этапов вычислений формулы. Выделяем ячейку с нужной формулой и:
для пользователей Excel 2007 и более поздних версий:
вкладка Формулы-группа кнопок Зависимости формул-Вычислить формулу(Formulas-Formula Auditing-Evaluate Formula)
для пользователей Excel 2003:
Сервис-Зависимости формул-Вычислить формулу

Появится форма
Этап 1
После каждого нажатия на кнопку Вычислить(Evaluate) будет произведен очередной этап вычислений формулы и в окне формы будет отображен этот этап. Вычисляемая в текущий момент часть формулы(этап) подчеркивается одинарной линией.
Что следует знать: сначала вычисляется самая глубоко вложенная функция, а уже потом самая первая. Самая первая и основная функция у нас будет ИНДЕКС, а самая глубоко вложенная - СЧЁТЕСЛИ. Поэтому на примере нашей формулы следующим этапом будет вычисление функции СЧЁТЕСЛИ и в скобках будет показан результат для этой функции: {0:0:0:0:0 ... 0:0:0}. Т.е. для каждого значения диапазона $A$2:$A$51 будет выведено количество - сколько раз это значение встречается в диапазоне $C$1:C1. Т.к. это первая строка формулы - то будут все нули:
Этап 2
Далее будет произведено вычисление логического выражения =0: сравнение результата функции СЧЁТЕСЛИ с нулем. Результатом будет ИСТИНА или ЛОЖЬ.
Этап 3
Этот результат(ИСТИНА, ЛОЖЬ) обрабатывается далее функцией ЕСЛИ. А в ЕСЛИ у нас условие: если СЧЁТЕСЛИ равно нулю (т.е. если результат ИСТИНА), то в ЕСЛИ возвращаем номер строки(СТРОКА($A$1:$A$50)), если нет - то вернет ЛОЖЬ.
Этап 4
Т.к. функция НАИМЕНЬШИЙ работает только с числами, игнорируя любые другие значения, то она не будет учитывать ЛОЖЬ(т.к. это логическое значение, а не число), а будет отбирать только числа - что и ложится в основу формулы.

Чтобы в этом примере было более просто разобраться(насколько это возможно), коротко расскажу о принципе работы этой формулы: если значение из диапазона $A$2:$A$51 встречается в диапазоне вывода формулы(на строку выше) $C$1:C1, то СЧЁТЕСЛИ вернет не нулевое значение и получится ЛОЖЬ. Если такого значения ещё нет - будет нуль и в НАИМЕНЬШИЙ будет передан номер строки. А уже номер строки передается в ИНДЕКС, которая возвращает непосредственно значение по номеру строки. Чтобы более точно понять подобные формулы надо рассмотреть не только формулу из первой ячейки, но и пару следующих.

Помимо кнопки Вычислить в этом окне есть и другие: Шаг с заходом(Step In) и Шаг с выходом(Step Out). Делают они почти тоже самое, но доступны не для всех видов формул, а лишь для тех, в которых участвуют ссылки на ячейки с другими функциями. Если вычисляемая в настоящий момент функция содержит внутри ссылку на ячейку, в которой записана другая функция или формула - то Шаг с заходом(Step In) выводит в окно вычисления эту функцию(формулу) и активирует ячейку с этой формулой. При этом доступна эта кнопка становится лишь тогда, когда при вычислении основной формулы шаг вычисления доходит до этой самой ссылки на вложенную формулу. Шаг с выходом(Step Out) при этом возвращает к вычислению предыдущей формулы.

Небольшой практический совет: если используете инструмент Вычислить формулу для поиска ошибки в своей формуле для поиска ошибки и в формуле используются слишком большие диапазоны, то просматривать по шагам такую формулу неудобно. Чтобы было проще - можно уменьшить диапазоны ячеек до 10, выделить ячейку с ошибочным результатом и посмотреть этап вычисления - все участвующие ячейки будут на виду и проще будет понять где ошибка.
Конечно, если формулу создал кто-то другой такой подход не всегда справедлив для сложных формул, т.к. изменение диапазонов без понимания для чего они может привести к нерабочей формуле и в этом случае смотреть этапы вычисления бесполезно.


Есть еще одна возможность анализировать этапы вычислений. Необходимо выделить ячейку с нужной формулой, перейти в строку формул и там выделить фрагмент формулы, результат вычисления которого требуется получить:
Вычисления в строке формул
после чего, не снимая выделения нажимаем клавишу F9. Выделенный блок формулы будет вычислен и результат будет помещен на место выделенного блока формулы:
Вычисления в строке формул - результат
Мне этот метод нравится меньше, т.к. он не показывает именно шаги вычисления, а вычисляет разом выделенный блок. Поэтому его можно применять в случаях, когда порядок вычисления известен и надо лишь убедиться, что интересующий блок формулы работает правильно.


Статья помогла? Поделись ссылкой с друзьями!
  Плейлист   Видеоуроки

Поиск по меткам

Access apple watch Multex Power Query и Power BI VBA управление кодами Бесплатные надстройки Дата и время Записки ИП Надстройки Печать Политика Конфиденциальности Почта Программы Работа с приложениями Разработка приложений Росстат Тренинги и вебинары Финансовые Форматирование Функции Excel акции MulTEx ссылки статистика
Обсуждение: 4 комментария
  1. Максим:

    Здравствуйте! Подскажите пожалуйста новичку! Почему при добавление новой строки перед массивом (Главная-> Вставить -> Вставить строки на лист) Все значения в формуле =ИНДЕКС($A$2:$A$51;НАИМЕНЬШИЙ(ЕСЛИ(СЧЁТЕСЛИ($C$1:C1;$A$2:$A$51)=0;СТРОКА($A$1:$A$50));1))
    меняются на новые:
    =ИНДЕКС($A$3:$A$52;НАИМЕНЬШИЙ(ЕСЛИ(СЧЁТЕСЛИ($C$1:C1;$A$3:$A$52)=0;СТРОКА($A$1:$A$51));1))
    корректирую до таких:
    =ИНДЕКС($A$3:$A$52;НАИМЕНЬШИЙ(ЕСЛИ(СЧЁТЕСЛИ($C$2:C2;$A$3:$A$52)=0;СТРОКА($A$2:$A$52));1)),
    а формула не работает?
    Заранее благодарен за помощь!

  2. Арсений:

    Только вот вы забыли упомянуть тот факт, что ИНДЕКС работает с номерами строк из указанного массива, а СТРОКА с номерами строк самого рабочего листа. Поэтому нельзя так просто взять и указать одинаковые диапазоны в этих двух функциях.

    • СТРОКА с номерами строк самого рабочего листа. Поэтому нельзя так просто взять и указать одинаковые диапазоны в этих двух функциях

      Изучите для начала мат.часть. Функция СТРОКА вернет номер строки листа, если не указано аргументов. Но если указан аргумент(ссылка на ячейку/диапазон) - функция вернет номер строки именно указанной ячейки. И приведенная мной формула, которая разбирается в статье работает на все 100%, что говорит о том, что все же можно вот так взять и указать одинаковые диапазоны в этих двух функциях. Главное понимать для чего это делается.

  3. 1:

    Интересное решение, но мне кажется более наглядным потрошить формулу руками, разделяя её по ячейкам. Тогда можно рядом с каждой описать смысл конкретного куска и понять общий механизм формулы, модифицировать... ну, или выявить ошибки. Может есть какой-то макрос, который бы раскидывал формулу таким образом (без описания, естественно)?..

Поделитесь своим мнением

Комментарии, не имеющие отношения к комментируемой статье, могут быть удалены без уведомления и объяснения причин. Если есть вопрос по личной проблеме - добро пожаловать на Форум


Для оформления сообщений Вы можете использовать следующие тэги:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Тренинги

Заказать
Юридическая информация

Использование материалов сайта

Политика Конфиденциальности

ИП Щербаков Дмитрий Валентинович
ОГРНИП: 318502700083307
ИНН: 504013350772

Наши партнеры

Перейти

Счетчики

Рейтинг@Mail.ru Яндекс.Метрика
© 2024 Excel для всех   Войти