Vba excel циклические ссылки

Содержание

  1. Предупреждение о циклической ссылке
  2. Как найти циклическую ссылку
  3. Параметры вычислений
  4. Руководство по проверке данных Excel
  5. Контроль достоверности данных
  6. Важное ограничение
  7. Определение правил проверки данных
  8. Параметры проверки данных
  9. Простое выпадающее меню
  10. Проверка данных с помощью пользовательской формулы
  11. Формулы устранения неполадок
  12. Примеры формул проверки данных
  13. Как автоматически выделять диапазоны для выборки ячеек из таблицы?
  14. Динамическое определение границ выборки ячеек
  15. Заполнение диапазона
  16. Перемещение диапазона
  17. Копировать/вставить диапазон
  18. Примеры использования функции АГРЕГАТ в Excel
  19. Панель формул
  20. Ручной ввод функции
  21. Расчет среднего значения
  22. Использование арифметического выражения
  23. Использование функции СРЗНАЧ
  24. Присвоение диапазона ячеек переменной
  25. Адресация ячеек в диапазоне
  26. Заключение

Предупреждение о циклической ссылке

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

При нажатии на кнопку ОК, сообщение будет закрыто, а в ячейке содержащей циклическую ссылку в большинстве случаев появиться 0.

Предупреждение, как правило, появляется при первоначальном создании циклической ссылки, или открытии книги содержащей циклические ссылки. Если предупреждение принято, то при дальнейшем возникновении циклических ссылок оно может не появляться.

Как найти циклическую ссылку

Циклические ссылки в excel могут создаваться преднамеренно, для решения тех или иных задач финансового моделирования, а могут возникать случайно, в виде технических ошибок и ошибок в логике построения модели.

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

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

Найти циклическую ссылку можно несколькими способами. Например, чисто визуально формулы и ячейки участвующие в образовании циклических ссылок в excel отмечаются синими стрелками, как показано на первом рисунке.

Если циклическая ссылка одна на листе, то в строке состояния будет выведено сообщение о наличии циклических ссылок с адресом ячейки.

Если циклические ссылки есть еще на других листах кроме активного, то будет выведено сообщение без указания ячейки.

Если или на активном листе их более одной, то будет выведено сообщение с указанием ячейки, где циклическая ссылка появляется в первый раз, после ее удаления – ячейка, содержащая следующую циклическую ссылку и т.д.

Найти циклическую ссылку можно также при помощи инструмента поиска ошибок.

На вкладке Формулы в группе Зависимости формул выберите элемент Поиск ошибок и в раскрывающемся списке пункт Циклические ссылки.

Вы увидите адрес ячейки с первой встречающейся циклической ссылкой. После ее корректировки или удаления – со второй и т.д.

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

Параметры вычислений

Следующий список поясняет опции, которые доступны в разделе Calculation options (Параметры вычислений):

  • Automatic (Автоматически) – пересчитывает все зависимые формулы и обновляет все открытые или внедрённые диаграммы при любом изменении значения, формулы или имени. Данная настройка установлена по умолчанию для каждого нового рабочего листа Excel.
  • Automatic except for data tables (Автоматически, кроме таблиц данных) – пересчитывает все зависимые формулы и обновляет все открытые или внедрённые диаграммы, за исключением таблиц данных. Для пересчета таблиц данных, когда данная опция выбрана, воспользуйтесь командой Calculate Now (Пересчет), расположенной на вкладке Formulas (Формулы) или клавишей F9.
  • Manual (Вручную) – пересчитывает открытые рабочие листы и обновляет открытые или внедрённые диаграммы только при нажатии команды Calculate Now (Пересчет) или клавиши F9, а так же при использовании комбинации клавиши Ctrl+F9 (только для активного листа).
  • Recalculate workbook before saving (Пересчитывать книгу перед сохранением) – пересчитывает открытые рабочие листы и обновляет открытые или внедрённые диаграммы при их сохранении даже при включенной опции Manual (Вручную). Если Вы не хотите, чтобы при каждом сохранении зависимые формулы и диаграммы пересчитывались, просто отключите данную опцию.
  • Enable iterative calculation (Включить итеративные вычисления) – разрешает итеративные вычисления, т.е. позволяет задавать предельное количество итераций и относительную погрешность вычислений, когда формулы будут пересчитываться при подборе параметра или при использовании циклических ссылок. Более детальную информацию о подборе параметров и использовании циклических ссылок можно найти в справке Microsoft Excel.
  • Maximum Iterations (Предельное число итераций) – определяет максимальное количество итераций (по умолчанию – 100).
  • Maximum Change (Относительная погрешность) – устанавливает максимально допустимую разницу между результатами пересчета (по умолчанию – 0.001).

Вы также можете переключаться между тремя основными режимами вычислений, используя команду Calculation Options (Параметры вычислений) в разделе Calculation (Вычисление) на вкладке Formulas (Формулы). Однако, если необходимо настроить параметры вычислений, все же придется обратиться к вкладке Formulas (Формулы) диалогового окна Excel Options (Параметры Excel).

Проверка данных — это функция в Excel, используемая для контроля того, что пользователь может ввести в ячейку. Например, вы можете использовать проверку данных, чтобы убедиться, что:

  • значение является числом от 1 до 6
  • дата произойдет в следующие 30 дней
  • текстовая запись содержит менее 25 символов

Проверка данных может просто отображать сообщение пользователю с информацией, что разрешено, как показано ниже:

Сообщение отображается автоматически при выборе ячейки

Проверка данных также может остановить неправильный ввод данных пользователем. Например, если код сотрудника не проходит проверку, вы можете увидеть следующее сообщение:

Пример сообщения об ошибке

Кроме того, проверка данных может использоваться для предоставления пользователю определенного выбора в раскрывающемся меню:

Пример раскрывающегося меню проверки данных

Это очень удобно, так как можно дать пользователю именно те значения, которые уже соответствуют требованиям.

Контроль достоверности данных

Проверка данных осуществляется с помощью правил, определенных в пользовательском интерфейсе Excel на вкладке «Данные» на ленте.

Элементы управления проверкой данных на вкладке ДАННЫЕ

Важное ограничение

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

Определение правил проверки данных

Проверка данных определяется в окне с 3 вкладками: Параметры, Сообщение для ввода и Сообщение об ошибке:

Окно проверки данных имеет три основные вкладки

На вкладке Параметры вы можете ввести критерии проверки. Существует ряд встроенных правил проверки с различными параметрами, также можно выбрать «Другой» и использовать собственную формулу для проверки ввода, как показано ниже:

Пример вкладки настроек проверки данных

Вкладка «Сообщение для ввода» определяет сообщение, отображаемое при выборе ячейки с правилами проверки. Оно не является обязательным.

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

Входное сообщение не влияет на то, что пользователь может ввести — оно просто отображает сообщение, чтобы сообщить пользователю, что разрешено или ожидается.

Вкладка настройки сообщения проверки данных

Вкладка «Сообщение об ошибке» определяет, как выполняется проверка. Например, когда вид установлен на «Останов», неверные данные вызывают окно с сообщением, и ввод не разрешен.

Вкладка предупреждения об ошибке проверки данных

Пользователь видит сообщение, подобное этому:

Пример сообщения об ошибке проверки данных

Когда в поле «Вид» установлено значение «Сообщение» или «Предупреждение», изменяется значок, отображаемый с пользовательским сообщением. Пользователь может игнорировать сообщение и вводить значения, которые не проходят проверку. Ниже обобщено поведение каждого вида предупреждения об ошибке.

Не позволяет пользователям вводить недопустимые данные в ячейку. Пользователи могут повторить попытку, но должны ввести значение, которое проходит проверку данных. В окне предупреждения «Останов» есть три опции: «Повторить», «Отмена» и «Справка».

Предупреждает пользователей о том, что данные неверны. Предупреждение ничего не делает, чтобы остановить ввод неверных данных. В окне «Предупреждение» есть три параметра: «Да» (для принятия недействительных данных), «Нет» (для редактирования недействительных данных), «Отмена» (для удаления недействительных данных) и «Справка».

Параметры проверки данных

При создании правила проверки данных доступно восемь параметров:

Любое значение — проверка не выполняется. Примечание: если проверка данных ранее применялась с установленным входным сообщением, сообщение все равно будет отображаться при выборе ячейки, даже если выбрано любое значение.

Целое число — разрешены только целые числа. Как только опция целого числа выбрана, другие опции становятся доступными для дальнейшего ограничения ввода. Например, вам может потребоваться целое число от 1 до 10.

Действительное — работает как опция целого числа, но допускает десятичные значения. Например, если для параметра «Действительное» задано значение от 0 до 3, допустимы все значения, такие как 0,5 и 2,5.

Список — разрешены только значения из предварительно определенного списка. Значения представляются пользователю как выпадающее меню. Допустимые значения могут быть жестко заданы непосредственно на вкладке «Параметры» или указаны в виде диапазона на рабочем листе.

Дата — разрешены только даты. Например, вам может потребоваться дата между 1 января 2018 года и 31 декабря 2021 года или дата после 1 июня 2018 года.

Время — разрешено только время. Например, вы можете указать время между 9:00 и 17:00 или разрешить время только после 12:00.

Длина текста — проверяет ввод на основе количества символов или цифр. Например, вам может потребоваться код из 5 цифр.

Другой — проверяет ввод с использованием пользовательской формулы. Другими словами, вы можете написать собственную формулу для проверки ввода. Пользовательские формулы значительно расширяют возможности проверки данных. Например, вы можете использовать формулу, чтобы обеспечить значение в верхнем регистре, или значение, которое содержит «АБВ».

На вкладке параметров также есть два флажка:

Игнорировать пустые ячейки — говорит Excel не проверять ячейки, которые не содержат значений. На практике этот параметр влияет только на команду «Обвести неверные данные». Когда эта опция включена, пустые ячейки не обведены, даже если они не прошли проверку.

Распространить изменения на другие ячейки с тем же условием — этот параметр обновит проверку, примененную к другим ячейкам, когда она будет соответствовать (оригинальной) проверке редактируемых ячеек.

Простое выпадающее меню

Вы можете предоставить пользователю раскрывающееся меню опций, жестко закодировав значения в поле настроек или выбрав диапазон на листе. Например, чтобы ограничить записи действиями «ПРИНЯТ», «В ОБРАБОТКЕ» или «ОТГРУЖЕН», вы можете ввести эти значения через точку с запятой:

Раскрывающееся меню проверки данных с жестко заданными значениями

При применении к ячейке на рабочем листе раскрывающееся меню работает следующим образом:

Читайте также: Как сделать строку в excel 2003 неподвижной?

Используются жестко заданные значения выпадающего меню проверки данных

Другой способ ввода значений в раскрывающееся меню — использование ссылки на рабочий лист. Например, с размерами (то есть маленький, средний и т.д.) в диапазоне F4:F6. Вы можете указать этот диапазон непосредственно в окне настроек проверки данных:

Значения выпадающего меню проверки данных со ссылкой на диапазон

Обратите внимание, что диапазон вводится как абсолютный адрес, чтобы предотвратить его изменение, поскольку проверка данных применяется к другим ячейкам.

Подсказка. Щелкните значок маленькой стрелки в дальнем правом углу поля «Источник», чтобы сделать выбор непосредственно на рабочем листе, чтобы вам не приходилось вводить диапазон вручную.

Вы также можете использовать именованные диапазоны для указания значений. Например, с именованным диапазоном под названием «размер» для F4:F6, вы можете ввести имя непосредственно в окне, начиная со знака равенства:

Значения выпадающего меню проверки данных с именованным диапазоном

Именованные диапазоны автоматически являются абсолютными, поэтому они не изменятся.

Вы также можете создавать зависимые выпадающие списки с пользовательской формулой.Совет.

Если вы используете таблицу для раскрывающихся значений, Excel будет автоматически расширять или сокращать таблицу при добавлении или удалении значений.

Другими словами, Excel будет автоматически синхронизировать раскрывающийся список со значениями в таблице при изменении, добавлении или удалении значений.

Проверка данных с помощью пользовательской формулы

Формулы проверки данных должны быть логическими формулами, которые возвращают ИСТИНА, если ввод действителен, и ЛОЖЬ, если ввод недействителен. Например, чтобы разрешить ввод любого числа в ячейку A1, вы можете использовать функцию ЕЧИСЛО (ISNUMBER) в формуле, подобной этой:

= ЕЧИСЛО (А1)

Если пользователь вводит значение 10 в A1, ЕЧИСЛО (ISNUMBER) возвращает ИСТИНА, и проверка данных завершается успешно. Если вводится значение типа «яблоко» в A1, ЕЧИСЛО (ISNUMBER) возвращает ЛОЖЬ, и проверка данных завершается неудачно.

Чтобы включить проверку данных с помощью формулы, выберите «Другой» на вкладке «Параметры», затем введите формулу, начиная со знака равенства (=), как обычно.

Формулы устранения неполадок

Excel игнорирует формулы проверки данных, которые возвращают ошибки.

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

Фиктивные формулы — это просто формулы проверки данных, введенные непосредственно на листе, чтобы вы могли легко увидеть, что они возвращают. На приведенном ниже экране показан пример:

Проверка достоверности данныхс помощью фиктивных формул

После того, как фиктивная формула заработает так, как вы хотите, просто скопируйте и вставьте ее в область формулы проверки данных.

Примеры формул проверки данных

Возможности для проверки данных пользовательских формул практически не ограничены. Вот несколько примеров для вдохновения:

Чтобы разрешить только 5 символьных значений, начинающихся с «z», вы можете использовать:

= И (ЛЕВСИМВ (А1) = «z»; ДЛСТР (A1) = 5)

Эта формула возвращает ИСТИНА только тогда, когда код длиной 5 цифр и начинается с «z». Два значения в примере выше возвращают ЛОЖЬ с этой формулой.

Чтобы разрешить ввод даты в течение 30 дней с сегодняшнего дня:

= И (А1> СЕГОДНЯ (), А1

Как автоматически выделять диапазоны для выборки ячеек из таблицы?

Задание является следующим. В одном из столбцов в разных ячейках находятся какие-то значения (в данном случае текстовые строки “граница”). Они определяют начало и конец секторов (диапазонов). Эти значения вставлены автоматически и могут появляться в разных ячейках. Их размеры и количество в них ячеек также может быть разным. Например, на рисунке ниже выбран сектор данных (диапазон) номер 2.

Все, что следует сейчас сделать – это создать возможность легкого и быстрого выбора диапазона, который нас интересует (вписывая номер диапазона в одну из ячеек для выбора).

Динамическое определение границ выборки ячеек

Для наглядности приведем решение этой задачи с использованием вспомогательного столбца. В первую ячейку в вспомогательном столбце (A7) вводим формулу:

и копируем ее вниз в оставшиеся ячейки. Везде, где в ячейках соседнего столбца находится значение “граница”, функция возвращает номер строки. В противном случае возвращает пустую строку.

Следующим шагом будет динамическое определение адреса для выборки диапазона данных из исходного списка в соответствии с критерием отбора.

Изменяемое значение критерия для управления выборкой данных из таблицы будет указано в ячейке C1. Там мы указываем порядковый номер диапазона, данные которого нас интересуют в конкретный момент.

Заполнение диапазона

Чтобы заполнить диапазон, следуйте инструкции ниже:

  1. Введите значение 2 в ячейку B2.
  2. Выделите ячейку В2, зажмите её нижний правый угол и протяните вниз до ячейки В8.

    Результат:

    Эта техника протаскивания очень важна, вы будете часто использовать её в Excel. Вот еще один пример:

  3. Введите значение 2 в ячейку В2 и значение 4 в ячейку B3.
  4. Выделите ячейки B2 и B3, зажмите нижний правый угол этого диапазона и протяните его вниз.

    Excel автоматически заполняет диапазон, основываясь на шаблоне из первых двух значений. Классно, не правда ли? Вот еще один пример:

  5. Введите дату 13/6/2013 в ячейку В2 и дату 16/6/2013 в ячейку B3 (на рисунке приведены американские аналоги дат).
  6. Выделите ячейки B2 и B3, зажмите нижний правый угол этого диапазона и протяните его вниз.

Перемещение диапазона

Чтобы переместить диапазон, выполните следующие действия:

  1. Выделите диапазон и зажмите его границу.
  2. Перетащите диапазон на новое место.

Копировать/вставить диапазон

Чтобы скопировать и вставить диапазон, сделайте следующее:

  1. Выделите диапазон, кликните по нему правой кнопкой мыши и нажмите Copy (Копировать) или сочетание клавиш Ctrl+C.
  2. Выделите ячейку, где вы хотите разместить первую ячейку скопированного диапазона, кликните правой кнопкой мыши и выберите команду Paste (Вставить) в разделе Paste Options (Параметры вставки) или нажмите сочетание клавиш Ctrl+V.

Примеры использования функции АГРЕГАТ в Excel

Пример 1. В классе провели контрольную по математике. Необходимо определить среднюю оценку для учеников, которые присутствовали на контрольной. Напротив некоторых фамилий оценка не указана по причине неn допуска к написанию или отсутствия.

Вид таблицы с данными:

Для расчета используем следующую формулу:

=АГРЕГАТ(1;3;B3:B13)

Описание параметров:

  • 1 – число, соответствующее функции СРЗНАЧ;
  • 3 – число, указывающее на способ расчета (не учитывать скрытые строки и коды ошибок);
  • B3:B13 – диапазон ячеек с данными для определения среднего значения.

Полученный результат:

В результате формула вернула правильное число среднего значения в обход значениям с ошибками #Н/Д.

Панель формул

Существует ещё третий способ запустить функцию «СРЗНАЧ». Для этого, переходим во вкладку «Формулы». Выделяем ячейку, в которой будет выводиться результат. После этого, в группе инструментов «Библиотека функций» на ленте жмем на кнопку «Другие функции». Появляется список, в котором нужно последовательно перейти по пунктам «Статистические» и «СРЗНАЧ».

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

Дальнейшие действия точно такие же.

Ручной ввод функции

Но, не забывайте, что всегда при желании можно ввести функцию «СРЗНАЧ» вручную. Она будет иметь следующий шаблон: «=СРЗНАЧ(адрес_диапазона_ячеек(число); адрес_диапазона_ячеек(число)).

Конечно, этот способ не такой удобный, как предыдущие, и требует держать в голове пользователя определенные формулы, но он более гибкий.

Расчет среднего значения

Когда среднее значение нужно не только определить, но и зафиксировать в отдельной выбранной для этого ячейке, можно использовать несколько методов. Ниже мы подробно рассмотрим каждый из них.

Использование арифметического выражения

Как мы знаем, среднее значение равняется сумме чисел, разделенных на их количество. Данную формулу можно использовать и в Экселе.

  1. Встаем в нужную ячейку, ставим знак “равно” и пишем арифметическое выражение по следующем принципу:
    =(Число1+Число2+Число3...)/Количество_слагаемых.
    Примечание: в качестве числа может быть указано как конкретное числовое значение, так и ссылка на ячейку. В нашем случае, давайте попробуем посчитать среднее значение чисел в ячейках B2,C2,D2 и E2.
    Конечный вид формулы следующий: =(B2+E2+D2+E2)/4.
  2. Когда все готово, жмем Enter, чтобы получить результат.

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

Использование функции СРЗНАЧ

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

  1. Встаем в ячейку, куда планируем выводить результат. Кликаем по значку “Вставить функци” (fx) слева от строки формул.
  2. В открывшемся окне Мастера функций выбираем категорию “Статистические”, в предлагаемом перечне кликаем по строке “СРЗНАЧ”, после чего нажимаем OK.
  3. На экране отобразится окно с аргументами функции (их максимальное количество – 255). Указываем в качестве значения аргумента “Число1” координаты нужного диапазона. Сделать это можно вручную, напечатав с клавиатуры адреса ячеек. Либо можно сначала кликнуть внутри поля для ввода информации и затем с помощью зажатой левой кнопки мыши выделить требуемый диапазон в таблице. При необходимости (если нужно отметить ячейки и диапазоны ячеек в другом месте таблицы) переходим к заполнению аргумента “Число2” и т.д. По готовности щелкаем OK.
  4. Получаем результат в выбранной ячейке.
  5. Среднее значение не всегда может быть “красивым” за счет большого количества знаков после запятой. Если нам такая детализация не нужна, ее всегда можно настроить. Для этого правой кнопкой мыши щелкаем по результирующей ячейке. В открывшемся контекстном меню выбираем пункт “Формат ячеек”.
  6. Находясь во вкладке “Число” выбираем формат “Числовой” и с правой стороны окна указываем количество десятичных знаков после запятой. В большинстве случаев, двух цифр более, чем достаточно. Также при работе с большими числами можно поставить галочку “Разделитель групп разрядов”. После внесение изменений жмем кнопку OK.
  7. Все готово. Теперь результат выглядит намного привлекательнее.

Присвоение диапазона ячеек переменной

Чтобы переменной присвоить диапазон ячеек, она должна быть объявлена как Variant, Object или Range:

Dim myRange1 As Variant

Dim myRange2 As Object

Dim myRange3 As Range

Чтобы было понятнее, для чего переменная создана, объявляйте ее как Range.

Присваивается переменной диапазон ячеек с помощью оператора Set:

Set myRange1 = Range(“B5:E16”)

Set myRange2 = Range(Cells(3, 4), Cells(26, 18))

Set myRange3 = Selection

В выражении Range(Cells(3, 4), Cells(26, 18)) вместо чисел можно использовать переменные.

Для присвоения диапазона ячеек переменной можно использовать встроенное диалоговое окно Application.InputBox, которое позволяет выбрать диапазон на рабочем листе для дальнейшей работы с ним.

Адресация ячеек в диапазоне

К ячейкам присвоенного диапазона можно обращаться по их индексам, а также по индексам строк и столбцов, на пересечении которых они находятся.

Индексация ячеек в присвоенном диапазоне осуществляется слева направо и сверху вниз, например, для диапазона размерностью 5х5:

1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
21 22 23 24 25

Индексация строк и столбцов начинается с левой верхней ячейки. В диапазоне этого примера содержится 5 строк и 5 столбцов. На пересечении 2 строки и 4 столбца находится ячейка с индексом 9. Обратиться к ней можно так:

‘обращение по индексам строки и столбца

myRange.Cells(2, 4)

‘обращение по индексу ячейки

myRange.Cells(9)

Обращаться в переменной диапазона можно не только к отдельным ячейкам, но и к части диапазона (поддиапазону), присвоенного переменной, например,

обращение к первой строке присвоенного диапазона размерностью 5х5:

myRange.Range(“A1:E1”)

‘или

myRange.Range(Cells(1, 1), Cells(1, 5))

и обращение к первому столбцу присвоенного диапазона размерностью 5х5:

myRange.Range(“A1:A5”)

‘или

myRange.Range(Cells(1, 1), Cells(5, 1))

Заключение

Таким образом, в Экселе существует немало способов для нахождения среднего значения как по отдельным строкам и столбцам, так и по целым диапазонам ячеек, которые, к тому же, могут быть разбросаны по таблице. А использование того или иного метода определяется удобством и целесообразностью его использования в каждом конкретном случае.

Источники

  • http://excel-training.ru/tsiklicheskie-ssyilki-v-excel/
  • https://office-guru.ru/excel/kak-upravljat-rezhimami-avtomaticheskih-i-mnogopotochnyh-vychislenii-v-excel-2013-57.html
  • https://iiorao.ru/excel/kak-sdelat-proverku-dannyh-v-excel.html
  • https://exceltable.com/formuly/dinamicheskoe-vydelenie-diapazona
  • https://office-guru.ru/excel/diapazon-v-excel-370.html
  • https://exceltable.com/funkcii-excel/funkciya-agregat-propusk-oshibok
  • https://lumpics.ru/how-calculate-average-value-in-excel/
  • https://MicroExcel.ru/srednee-znachenie/
  • https://vremya-ne-zhdet.ru/vba-excel/peremennaya-diapazona-as-range/

Нельзя внутри функции пытаться вычислять значение ячейки на основе её же самой.
Почитайте на досуге:

Что такое функция пользователя(UDF)?

Добавьте параметр в функцию и сделайте её по правилам — функция на то и функция, чтобы возвращать значение. А у Вас она пытается в активную ячейку записать значение. Да и в таких случаях лучше файл с функцией выкладывать, а не тупо код. У Вас слишком много других ячеек используется — тестировать не на чем.
Что-то вроде этого. Не пытался особо оптимизировать и вникать(тестировать все равно не на чем) — просто чуть изменил под «рабочий» вариант и убрал GoTo(они у Вас явно излишни были). Да и Вам так будет удобнее понять.

Код
Function Tonnaj()
 Dim rMeCell As Range
 Set rMeCell = Application.Caller 'назначаем переменной ячейку с функцией
 If rMeCell.Offset(0, -4) = "-" Then
 Tonnaj = "-"
 Exit Function
 End If
 a5 = Mid(rMeCell.Offset(0, -5), 9, Len(rMeCell.Offset(0, -5)))
 b5 = rMeCell.Offset(0, -3)
 c5 = rMeCell.Offset(0, -2)
 
 Set b6 = Sheets(3).Columns("A:A").Find(What:=a5)
 If b6 Is Nothing Then
 e5 = ""
 Else
 c6 = b6.Address
 End If
 
 For j5 = 1 To 200
 d5 = Sheets(3).Range(c6).Offset(0, 2)
 If b5 < d5 Then
 Tonnaj = Sheets(3).Range(c6).Offset(0, 3)
 Exit Function
 End If
 If Sheets(3).Range(c6).Offset(1, 0) = Sheets(3).Range(c6) Then
 f5 = Range(c6).Row
 f6 = Range(c6).Column
 c6 = Cells(f5 + 1, f6).Address
 Else:
 Tonnaj = "-"
 Exit Function
 End If
 Next j5
End Function

Как удалить или разрешить циклическую ссылку

​Смотрите также​Run-time error ’28’:​ Ты про отключение​ ячейками. Буду пока​ задачу.​ числу либо к​ не делал просто​«​ самой ячейки (в​ удобнее проверить формулу,​ в одной ячейки​ область на листе?​

Формула, из-за которой возникает циклическая ссылка

​Итеративное вычисление может иметь​ сами задать предельное​ любой открытой книге.​или​ ячейке B1, которая​Вы ввели формулу, но​Out of stack​ событий?​ пробовать так. Но,​Есть три столбца:​​ тексту, но для​​ открыл файл при​Вычислить формулу»​ которой пишем формулу)​ когда визуально видны​​ от другой.​​Чтобы узнать, в каком​

​ три исход:​ число итераций и​Пользователь удаляет все циклические​Зависимые ячейки​ снова ссылается на​ она не работает.​ space​

​_Boroda_​ если вдруг есть​ Сумма, скидка и​

  • ​ того чтобы показать,​ закритии сочет сохранить​- считает по​ – получится циклическая​ все ячейки, указанные​Нужно отметить, что второй​ именно диапазоне находится​Решение сходится, что означает​ относительную погрешность.​ ссылки во всех​на вкладке​ ячейку А1. Если​ Вместо этого появляется​И при нажатии​

​: Ага​ какие варианты попроще​ сумма со скидкой.​ нужен файл в​ файл…​ формуле, но выдает​ ссылка.​ в формуле.​ способ более визуально​ такая формула, прежде​ получение надежного конечного​Если вы работаете в​

  • ​ открытых книгах, после​Формулы​​ это сбивает с​​ сообщение о «циклической​ на кнопку «Debug»​​Попробуй в А2​​ — буду очень​​Сумма со скидкой​​ формате Exsel, а​ни где не​

    Команда

  • ​ результат, постепенно считая​Циклическая ссылка в Excel​Кнопка​ нагляден, но в​ всего, жмем на​ результата. Это самый​​ Excel 2010 или более​​ чего создает новую​

  • ​.​ толку вас, представьте,​ ссылке». Миллионы людей​ попадаю на страницу​ что-то ввести. Поставь​ признателен.​ равняется Сумма минус​

​ не картинка. Нужно​​ могу найти ответа​

  • ​ каждое действие, каждый​– это, когда​«​​ то же время​​ кнопку в виде​ желательный исход.​ поздней версии, последовательно​

    ​ циклическую ссылку.​Когда Excel впервые находит​ что происходит с​ сталкиваются с этой​ с кодом, где​ только стопор на​

  • ​Спасибо.​ Скидка.​ видеть реальный формат​ спасибо_)​ этап вычисления.​ в формуле указан​Влияющие ячейки»​ не всегда даёт​ белого крестика в​Решение расходится, т. е.​​ выберите элементы​​Пользователь закрывает все книги,​​ циклическую ссылку, отображается​​ Excel.​​ проблемой. Это происходит,​​ часть кода желтым​

    Влияющие ячейки

Предупреждение о циклической ссылке

​ первой строке и​gling​Скидка равняется Сумма​ данных и тогда​​gling​​У нас такая​ адрес ячейки, в​

​- показывает стрелками,​ четкую картину цикличности,​ красном квадрате в​ при каждой последующей​Файл​ создает новую и​ предупреждающее сообщение. Нажмите​Если найти ошибку не​ когда формула пытается​ выделена.​ через F8 погоняй.​: Здравствуйте. Но проще​ минус Сумма со​ определить к чему​: Ответ в файле.​ формула.​ которой записана эта​ из каких ячеек​ в отличие от​ диалоговом окне предупреждения,​ итерации разность между​ >​ вводит в нее​ кнопку​

​ удается, на вкладке​ посчитать собственную ячейку​Это я что-то​AlexM​ некуда. Имхо.​ скидкой.​

  • ​ приводить удобнее к​ Вкладка Формулы—Проверка наличия​Мы её проверяем.​

​ формула, т.е. ячейка​​ цифры считаются формулой​ первого варианта, особенно​ тем самым закрывая​ текущим и предыдущим​Параметры​ формулу с циклической​ОК​Формулы​ при отключенной функции​ не та сделал???​

  • ​: Тут без отключения​kontrabasss​И т.д.​

  • ​ тексту или к​ ошибок—Источник ошибки. Должна​ Выделяем ячейку с​ ссылается сама на​ в выделенной ячейки.​

  • ​ в сложных формулах.​ его.​ результатами увеличивается.​ >​ ссылкой.​

  • ​или закройте окно​щелкните стрелку рядом​

  • ​ итеративных вычислений. Вот​RAN​ не зацикливается. Почему???​: Ну, проще для​Получились цикличесские ссылки​

Итеративные вычисления

​ числу. Но это​ быть прописана ячейка​ этой формулой, нажимаем​ себя.​Здесь, в ячейке Е52​Как видим, отыскать циклическую​Переходим во вкладку​Решение колеблется между двумя​Формулы​Пользователь открывает книгу, содержащую​ сообщения.​ с кнопкой​ как это выглядит:​: Как вариант -​

​RAN​ тех, кто хорошо​ — поставил галочку​ в новой теме,​ с циклической ссылкой.​ кнопку «Вычислить формулу».​Так делать нельзя,​ стоит формула. Стрелками​ ссылку в Эксель​«Формулы»​ значениями, например, после​. Если вы работаете​ циклическую ссылку.​Если вы закроете сообщение,​Проверка ошибок​Формула =D1+D2+D3 не работает,​ плохо читаете.​: Я, конечно, видел,​ знает Excel. Я​ напротив Включить интеративные​ так как этот​ Исправьте ошибку, чтобы​ Появилось такое диалоговое​ это ошибка, п.ч.​ показаны ячейки, которые​ довольно просто, особенно​. На ленте в​ первой итерации получается​ в Excel для​

  1. ​При отсутствии других открытых​ то Excel отобразит​, выберите пункт​ поскольку она расположена​​kontrabasss​​ что уйдет, но​​ вот только на​​ вычисления.​​ вопрос не имеет​​ формула не зацикливалась,​ окно.​ при вычислении по​​ посчитались, чтобы получился​​ если знать алгоритм​​ блоке инструментов​​ значение 1, после​​ Mac, откройте меню​​ книг пользователь открывает​

    ​ в ячейке либо​Циклические ссылки​​ в ячейке D3​ Изображение кнопки Office​: RAN, спасибо. Помогло.​​ скачал и запустил.​​ уровне пользователя. Может​​Например если я​​ отношения к циклической​

  2. ​ т.е. в расчете​​В нем подчеркнут адрес​​ такой формуле будут​​ результат в ячейке​​ поиска. Можно воспользоваться​«Зависимости формул»​​ второй — значение 10,​​Excel​

  3. ​ книгу и создает​​ нулевое значение, либо​​и щелкните первую​ и ссылается на​ Пойду учиться читать​(останов не ставил).​ подскажете, как создается​ ввожу данные, то​ ссылке.​

  4. ​ формулы не должна​​ первой ячейки, указанной​​ происходить бесконечные вычисления.​ Е52.​ одним из двух​имеется кнопка​ после третьей — снова​, выберите пункт​ в ней циклическую​ последнее вычисленное значение.​ ячейку в подменю.​ саму себя. Чтобы​

​ хорошо.​Не ушло. Не​

  • ​ такой алгоритм???​ все считается. Но,​Сегодня впервые столкнулся с​ участвовать результирующая ячейка.​

  • ​ в формуле. Нажимаем​ Тогда выходит окно​Кнопка «Зависимые ячейки»​ способов нахождения подобных​«Проверка наличия ошибок»​

  • ​ 1 и т. д.​Настройки​ ссылку.​ В некоторых случаях​Проверьте формулу в ячейке.​ устранить проблему, вы​AlexM​

​ успело. Excel вылетел.​

support.office.com

Поиск циклической ссылки в Excel

Циклическая ссылка в Microsoft Excel

​AlexM​ при этом стираются​ такой проблемой как​ Сохранение файла может​ кнопку «Вычислить».​ с предупреждением о​- показывает стрелками,​ зависимостей. Несколько сложнее​. Кликаем на пиктограмму​К началу страницы​и щелкните элемент​Иногда вам могут потребоваться​ формула может успешно​ Если вам не​ можете переместить формулу​: Тогда так​AlexM​:​ формулы при вводе​ циклические ссылки. Документ​ требоваться если в​Вместо адреса ячейки D52​ циклической ссылке.​ в каких ячейках​ определить, нужна ли​ в виде перевернутого​

​Циклические ссылки представляют собой​Вычисление​

Выявление циклических связей

​ циклические ссылки, потому​ работать до тех​ удается определить, является​ в другую ячейку​200?’200px’:»+(this.scrollHeight+5)+’px’);»>Private Sub Worksheet_Calculate()​: А на моем​200?’200px’:»+(this.scrollHeight+5)+’px’);»>Private Sub Worksheet_Change(ByVal Target​ данных. Т.е. если​ Excel открывается без​ формулах файла есть​ (были подчеркнуты) теперь​Нам нужно найти эту​

Способ 1: кнопка на ленте

  1. ​ (в каких формулах)​ данная формула в​ треугольника рядом с​ формулу, в которой​.​ что они заставляют​ пор, пока она​ ли эта ячейка​ (в строке формул​Application.EnableEvents = False​

    Закрытие диалогового окна в Microsoft Excel

  2. ​ старом ПК зацикливание​​ As Range)​​ я захочу что-то​ проблем, но в​​ изменяющиеся данные, например​​ стоит цифра из​​ формулу, где есть​​ используется цифра из​ действительно или это​ этой кнопкой. В​ одна ячейка через​Если у вас Excel​ функции выполнять итерации,​​ не попытается вычислить​​ причиной циклической ссылки,​ нажмите сочетание клавиш​Range(«C2») = Range(«A2»)​ было таким незаметным.​If Target.Address(0, 0)​ после изменить, то​ одной из книг​ функция ТДАТА() или​ этой ячейки. Теперь​ циклическая ссылка, и​

    Нахождение циклических ссылок в Microsoft Excel

  3. ​ этой ячейки.​ просто ошибка, а​ появившемся меню выбираем​ последовательность связей с​

    Удаление циклической ссылки в Microsoft Excel

  4. ​ 2007, нажмите​ т. е. повторять​ себя. Например, формула,​ выберите в подменю​CTRL+X​ — Range(«B2″)​200?’200px’:»+(this.scrollHeight+5)+’px’);»>Private Sub Worksheet_Change(ByVal Target​ = «A2» Then​

Повторная проверка на циличность ссылки в Microsoft Excel

Способ 2: стрелка трассировки

​ уже не получится.​ существует циклическая ссылка.​ СЕГОДНЯ(). При открытии​

  1. ​ подчеркнут адрес ячейки​ исправить её.​Здесь, в примере, ячейка​ также исправить ошибочную​​ пункт​​ другими ячейками, в​

    Диалоговое окно в Microsoft Excel

  2. ​кнопку Microsoft Office​ вычисления до тех​ использующая функцию «ЕСЛИ»​Циклические ссылки​

Стрелка трассировки в Microsoft Excel

​, чтобы вырезать формулу,​Application.EnableEvents = True​ As Range)​ Range(«C2») = Target.Value​Как сделать такую​ Лист серого цвета,​ файла эти значения​ Е52. Нажимаем кнопку​Как найти циклическую ссылку​

​ D49 установлена только​ ссылку.​«Циклические ссылки»​ конечном итоге ссылается​, щелкните​ пор, пока не​ может работать до​следующую ячейку.​ выберите другую ячейку​End Sub​Application.EnableEvents = False​ — Range(«B2»)​ формулу, чтобы расчет​ без ячеек. Кто​

​ меняются и формулы​

lumpics.ru

Как проверить формулы в Excel.

​ «Вычислить». Получилось так.​​ в Excel.​ в одной формуле,​Автор: Максим Тютюшев​​. После перехода по​ сама на себя.​Параметры Excel​ будет выполнено заданное​ тех пор, пока​Продолжайте находить и исправлять​ и нажмите сочетание​Private Sub Worksheet_Change(ByVal​If Target.Address(0, 0)​If Target.Address(0, 0)​ мог производиться из​ сталкивался — тот​
​ пересчитываются, от сюда​Если нажмем ещё раз​Нажимаем в диалоговом​ расположенной в ячейке​Рассмотрим,​
​ этой надписи в​​ В некоторых случаях​и выберите категорию​​ числовое условие. Это​
​ пользователь не введет​ циклические ссылки в​ клавиш​ Target As Range)​ = «A2» Then​ = «B2» Then​ полученных любых двух​ знает что это​ возникает и вопрос​ кнопку «Вычислить», то​ окне «Предупреждение о​
​ D52.​​как проверить формулу в​​ виде меню показываются​​ пользователи осознано применяют​Формулы​ может привести к​ аргумент (данные, необходимые​​ книге, повторяя действия​CTRL+V​Application.EnableEvents = False​ Range(«C2») = Target.Value​ Range(«C2») = Range(«A2»)​ значений и потом​
​ такое, остальным объяснять​​ о сохранении. Для​ первые две цифры​ циклической ссылке» кнопку​А здесь, от цифры​ Excel, как найти​
​ все координаты ссылок​ подобный инструмент для​.​ снижению производительности компьютера,​ для нормальной работы​​ 1–3, пока из​).​If Target.Address(0, 0)​ — Range(«B2»)​ — Target.Value​ эти значения можно​ без толку.​
​ того чтобы понять,​​ сосчитаются по формуле.​​ «Отмена». Нажимаем на​​ в ячейке D52​
​ циклическую ссылку​​ циклического характера в​ вычислений. Например, такой​В разделе​​ поэтому по умолчанию​​ формулы), который заставит​​ строки состояния не​Другая распространенная ошибка связана​
​ = «B2» Then​
Формулы в Excel.​If Target.Address(0, 0)​​If Target.Address(0, 0)​ было бы потом​Попробовал поступить, как​​ что происходит у​ У нас, в​
​ стрелку, расположенную рядом​ зависит результат двух​, т. д. Когда​ данной книге. При​ подход может помочь​Параметры вычислений​ итеративные вычисления в​ формулу попытаться вычислить​
​ исчезнет сообщение «Циклические​​ с использованием функций,​ Range(«C2») = Range(«A2»)​ = «B2» Then​ = «C2» Then​ корректировать.​ говорится в Помощи,​ Вас в файле​
​ примере, 6-2=4. Получилось​ с кнопкой «Проверка​ ячеек. В двух​ формулы большие, трудно​ клике на координаты​ при моделировании. Но,​установите флажок​ Excel выключены.​Циклическая ссылка в Excel.​ саму себя. Если​ ссылки».​ которые включают ссылки​ — Target.Value​
​ Range(«C2») = Range(«A2»)​ Range(«B2») = Range(«A2»)​
​Заранее всем спасибо!!!​ но ничего не​ нудно увидеть этот​ так.​ наличия ошибок» (на​ формулах, в ячейках​ понять, на каком​ конкретной ячейки, она​ в большинстве случаев,​Включить итеративные вычисления​Если вы не знакомы​ это произойдет, Excel​Советы​ на самих себя,​
​If Target.Address(0, 0)​ — Target.Value​ — Target.Value​
​AlexM​ добился. Знающие люди,​ файл, а не​И так до конца​ рисунке обведена зеленым​ D53 и Е52,​ этапе вычисления сделали​ становится активной на​ данная ситуация –​. На компьютере Mac​ с итеративными вычислениями,​ оставит в ячейке​
Циклические ссылки в Excel.​    ​ например ячейка F3​
​ = «C2» Then​​If Target.Address(0, 0)​​End Sub​​: Знаю как с​ помогите пожалуйста.​ картинку которую Вы​ формулы.​ цветом), наводим мышку​​ указана ячейка D52.​ ошибку. Но в​​ листе.​ это просто ошибка​ щелкните​ вероятно, вы не​ последнее успешно вычисленное​В строке состояния в​​ может содержать формулу​ Range(«B2») = Range(«A2»)​ = «C2» Then​Worksheet_Change​​ макросом​Brownie​ прикрепили.​О других, часто​ на слова «Циклические​Кнопка​ Excel есть функция,​
​Путем изучения результата устанавливаем​ в формуле, которую​Использовать итеративное вычисление​ захотите оставлять активных​ значение.​ левом нижнем углу​ =СУММ(A3:F3). Пример:​Как проверить формулу в Excel.​ — Target.Value​ Range(«B2») = Range(«A2»)​
​это событие (изменение​kontrabasss​: Привет! Просто какой-то​art22​ встречающихся ошибках в​ ссылки» и рядом​«​
​ которая поможет это​ зависимость и устраняем​ юзер допустил по​.​ циклических ссылок. Если​Если есть подозрение, что​

excel-office.ru

Предупреждение о циклической ссылке как убрать? (Формулы/Formulas)

​ отображается сообщение​​Вы также можете попробовать​Application.EnableEvents = True​ — Target.Value​ на листе), при​: AlexM, спасибо.​ ячейке в формуле​
​: Спасибо огромное!) Оказывается​ формулах, что они​ появляется адрес ячейки,​Убрать стрелки»​ сделать. «Как написать​ причину цикличности, если​ невнимательности или по​
​В поле​ же они вам​ циклическая ссылка содержится​

​Циклические ссылки​​ один из описанных​End Sub​Application.EnableEvents = True​ котором автоматически запускается​Все верно и​ ссылка на саму​ на 2 -3​ означают и как​ где находится эта​убирает стрелки.​ формулу в Excel»​ она вызвана ошибкой.​ другим причинами. В​Предельное число итераций​ нужны, необходимо решить,​ в ячейке, которая​и адрес ячейки​ ниже способов.​kontrabasss​End Sub​ макрос.​ все работает.​ себя. Открой Вид​ страницах я сохранял​ их справить, читайте​ циклическая ссылка.​Чтобы​ смотрите, какими способами​

​После выполнения необходимых действий​​ связи с этим,​введите количество итераций​ сколько раз может​ не возвращает значение​ с одной из​
​Если вы только что​: AlexM, спасибо. Опять​kontrabasss​Target.Address(0, 0)​Осталось только узнать​ — Панели инструментов​ какие то цифры…​ в статье «Ошибки​В нашем случае, в​вместо чисел, в ячейках​ и какие формулы​ снова переходим по​

​ чтобы удалить ошибку,​​ для выполнения при​ повторяться вычисление формулы.​ 0, попробуйте такое​ них.​ ввели формулу, сначала​ научным тыком, почти​: Большое всем спасибо.​это адрес ячейки​ что же это​ — Зависимости. Включай/выключай​ из-за них было…​ в формулах Excel».​ ячейке Е43 стоит​ Excel были написаны​ можно написать.​ кнопке проверки ошибок​ следует сразу найти​ обработке формул. Чем​ Если включить итеративные​ решение:​

excelworld.ru

Excel. Циклические ссылки.

​При наличии циклических ссылок​ проверьте ячейку, в​ не осознавая, что​ Методом научного тыка​ где событие произошло​ такое — Макросы…​ кнопки Влияющие ячейки,​Еще через программу​В Excel можно​ такая формула.​ формулы​Если формула составлена​ циклических ссылок. На​
​ саму циклическую ссылку.​ больше предельное число​ вычисления, не изменив​Щелкните формулу в строке​ на других листах,​

​ которой она расположена.​​ я делаю воткнул​ я, вроде, разобрался,​Target.Value​AlexM​ Зависящие ячейки и​ сохраняет цифры в​ проводить подсчет, анализ​Ячейка ссылается сама на​, нажимаем​ с ошибкой, то​ этот раз соответствующий​ Посмотрим, как это​

​ итераций, тем больше​​ предельное число итераций​ формулы и нажмите​ кроме активного, в​ Проверьте, не ссылается​ это в свою​

Циклические ссылки и нестирающиеся формулы (Формулы/Formulas)

​ как это сделать.​​это измененное значение.​: Кликните по ярлычку​ походи по ячейкам​ ексел, и выхрдят​
​ данных, составляя формулы​ себя. Нашли ошибку​кнопку «Показать формулы»​
​ в ячейке с​ пункт меню должен​ делается.​
​ времени потребуется для​ и относительную погрешность,​ клавишу ВВОД.​
​ строке состояния выводится​
​ ли формула на​ таблицу.​ Но! Возникла следующая​Далее делаем проверку​
​ листа правой кнопкой.​ таблицы. Стрелки помогут​ такие предупреждения… в​ с определенными условиями.​ – в ячейке​(на рисунке обведена​ формулой будет стоять​ быть вообще не​Скачать последнюю версию​
​ пересчета листа.​ приложение Excel прекратит​Внимание!​ сообщение «Циклические ссылки»​ собственную ячейку. Например,​Мне это нужно​ проблема. Если я​ (if) адреса ячейки,​
​ В контекстном меню​

​ найти циклическую ссылку.​​ настройках я отключал​ Смотрите статью «Функция​

​ Е43 стоит ссылка​​ красным цветом).​
​ зеленый треугольник.​ активен.​
​ Excel​В поле​ вычисление после 100​

​    Во многих случаях​​ без адресов ячеек.​ ячейка A3 может​ для расчета сторон,​ в ячейке A2​
​ которую изменили. По​ выбрать «Исходный текст»​ Удачи.​

​ их но все​​ «СЧЁТЕСЛИ» в Excel».​ на ячейку Е43​Получилось так.​Есть несколько способов​Существует и другой способ​Если в книге присутствует​Относительная погрешность​ итераций либо после​ при создании дополнительных​Вы можете перемещаться по​ содержать формулу =(A1+A2)/A3.​ высот, углов геометрических​
​ вбиваю все руками,​

​ результату проверки выбираем​​Откроется редактор VBA.​Не нажимать​

​ равно эти ошибки​​art22​ (саму на себя).​Чтобы​проверить поэтапный расчет формул​ определения подобных нежелательных​ циклическая ссылка, то​введите наименьшее значение,​

​ того, как изменение​​ формул с циклическими​​ ячейкам в циклической​ Такие формулы, как​
​ фигур. )))​ то все просчитывается​ действие, что из​ В модуле листа​
​: Создай новую книгу,​ существуют можно как​: когда открываю файл​ Исправили ошибку так​
​убрать формулы и показать​ в Excel​ зависимостей.​ уже при запуске​
​ до достижения которого​
​ всех значений в​​ ссылками предупреждающее сообщение​ ссылке с помощью​ =A1+1 (в ячейке​Там много используется​
​ нормально. Но если​​ чего вычитаем и​ увидите макрос.​
​ скопируй туда свои​​ то сделать так​
​ с данными пишет​ – изменили ссылку​ результат в ячейках​.​В диалоговом окне, сообщающем​ файла программа в​ следует продолжать итерации.​

​ циклической ссылке с​​ в приложении Excel​ двойных щелчков по​ A1) также приводят​

​ тригонометрических формул Excel.​​ ячейка А2 рассчитывается​ куда заносим.​kontrabasss​

​ данные, циклическую ссылку​​ чтобы было все​
​ «Предупреждение о циклической​ в формуле с​ Excel​Итак, заходим на​ о наличии циклических​

​ диалоговом окне предупредит​​ Это наименьшее приращение​ каждой итерацией составит​

​ больше не отображается.​​ стрелке трассировки, которая​ к ошибкам циклической​Например можно построить​:D​ автоматически, то остальные​
​_Boroda_​: Круто. Я не​:p

​ — не копируй,​​ равно число или​ ссылке»… как его​ ячейки Е43 на​​, снова нажимаем на​ закладку «Формулы» в​
​ ссылок, жмем на​
​ об этом факте.​ в любом вычисляемом​ меньше 0,001 (в​ Ниже перечислены некоторые,​
​ указывает на ячейки,​ ссылки.​ треугольник по трем​ столбцы не меняются...​
​: Алексей, так ты​ очень силен в​ все должно получиться...​ текст в ячейке...​
​ убрать?? надоел уже​
​ ячейку D43. Получилось​

​ кнопку «Показать формулы».​​ раздел «Зависимости формул».​ кнопку​ Так что с​ значении. Чем меньше​ зависимости от того,​ но не все,​ влияющие на значение​Проверьте наличие непрямых ссылок.​ сторонам, а можно​kontrabasss​ в бесконечный цикл​ этом, но получилось​kontrabasss​

​gling​​ каждый раз выходит!​ так.​Если пишем много​
​ Сначала выделяем ячейку,​
​«OK»​ определением самого наличия​

​ число, тем точнее​ какое из этих​ ситуации, в которых​ в текущей ячейке.​ Они возникают, когда​ по двум и​
​: А еще стало​ провалишься​

​ просто скопировать и​​: Здравствуйте. Все никак​: Можно при расчете​

​И при закрити​​Все исправили, все считает​ разных формул, то​ затем нажимаем кнопку​

​.​​ такой формулы проблем​​ результат и тем​
​ условий будет выполнено​
​ предупреждение появится.​ Чтобы отобразить стрелку​
​ формула, расположенная в​
​ углу между ними.​
​ вылетать окно с​AlexM​
​ вставить в другом​
​ не могу решить,​ формулы приводить значение​ документа пишет сохранить​ правильно.​
​ можем ошибочно в​ соответствующей функции. При​Появляется стрелка трассировки, которая​ не возникнет. Как​
​ больше времени потребуется​
​ раньше). Тем не​

​Пользователь создает первый экземпляр​​ трассировки, нажмите кнопку​ ячейке А1, использует​Может подскажете, какая​ надписью:​: Не получается провалиться.​ листе с другими​
​ казалось бы, простую​ ячейки либо к​ файл? я ничего​Кнопка​
​ формулу поставить адрес​ работе с формулами,​
​ указывает зависимости данных​ же найти проблемную​ Excel для вычислений.​ менее, вы можете​ циклической ссылки в​
​Влияющие ячейки​ другую формулу в​

excelworld.ru

​ функция у Range?​

У меня есть таблица следующим образом. Это указывает на связи (или ребра) между значениями в столбце Name.

+-------+-------------------+
| Name  | from              |
+-------+-------------------+
| G     | X; Y; HG; WP      |
| X     | U                 |
| Y     |                   |
| U     | V                 |
| V     |                   |
| K     | M; N              |
| M     |                   |
| N     |                   |
| G1    | G                 |
| G2    | G1                |
| G3    | G2                |
| G4a   | G3                |
| J     | G4a               |
| G4b   | G3                |
| G5b   | G4b               |
| H     | G5b               |
| R     | H; J              |
| R1    | R                 |
| R2    | R1                |
| O     | R2                |
| O1    | O                 |
| O2    | O1                |
| O3    | O2                |
| F     | H; K; TR          |
| P     | G; Z              |
| Z     |                   |
| HG    | VB; NH            |
| WP    |                   |
| TR    | Z                 |
| VB    | ICH; OL; NZ; LO   |
| NH    |                   |
| ICH   | NZ                |
| NZ    |                   |
| LO    |                   |
| OL    | TZ; HG            |
| TZ    |                   |
| BN    | WD; PO            |
| WD    | RZ; UX            |
| PO    | QA; IU; BV; MM; BN|
| RZ    |                   |
| UX    |                   |
| IU    |                   |
| QA    |                   |
| BV    |                   |
| MM    |                   |
+-------+-------------------+

Я хочу посмотреть, существуют ли значения в столбце Name как предшественники, если мы последовательно ищем значения в столбце from. Другими словами, я хочу увидеть, есть ли какие-либо циклические ссылки.

Как это сделать с VBA кодом в Excel?

В этом примере HG, VB, OL, BN, PO имеют циклические ссылки. Я хочу выделить только те ячейки в столбце «Имя».

Один из способов — найти все предшественники для каждой строки в отдельном столбце следующим образом.

+-------+--------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------+
| GName | from               | predecessors                                                                                                                                        |
+-------+--------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------+
| G     | X; Y; HG; WP       | X; U; V; Y; HG; VB; NH; ICH; NZ; LO; OL; TZ; WP                                                                                                     |
| X     | U                  | U; V                                                                                                                                                |
| Y     |                    |                                                                                                                                                     |
| U     | V                  | V                                                                                                                                                   |
| V     |                    |                                                                                                                                                     |
| K     | M; N               | M; N                                                                                                                                                |
| M     |                    |                                                                                                                                                     |
| N     |                    |                                                                                                                                                     |
| G1    | G                  | G; X; Y; HG; WP; U; VB; NH; V; ICH; NZ; LO; OL; TZ                                                                                                  |
| G2    | G1                 | G1; G; X; Y; HG; WP; U; VB; NH; V; ICH; NZ; LO; OL; TZ                                                                                              |
| G3    | G2                 | G2; G1; G; X; Y; HG; WP; U; VB; NH; V; ICH; NZ; LO; OL; TZ                                                                                          |
| G4a   | G3                 | G3; G2; G1; G; X; Y; HG; WP; U; VB; NH; V; ICH; NZ; LO; OL; TZ                                                                                      |
| J     | G4a                | G4a; G3; G2; G1; G; X; Y; HG; WP; U; VB; NH; V; ICH; NZ; LO; OL; TZ                                                                                 |
| G4b   | G3                 | G3; G2; G1; G; X; Y; HG; WP; U; VB; NH; V; ICH; NZ; LO; OL; TZ                                                                                      |
| G5b   | G4b                | G4b; G3; G2; G1; G; X; Y; HG; WP; U; VB; NH; V; ICH; NZ; LO; OL; TZ                                                                                 |
| H     | G5b                | G5b; G4b; G3; G2; G1; G; X; Y; HG; WP; U; VB; NH; V; ICH; NZ; LO; OL; TZ                                                                            |
| R     | H; J               | J; G4a; G3; G2; G1; G; X; Y; HG; WP; U; VB; NH; V; ICH; NZ; LO; OL; TZ; H; G5b; G4b; G3; G2; G1; G; X; Y; HG; WP; U; VB; NH; V; ICH; NZ; LO; OL; TZ |
| R1    | R                  | R; J; H; G4a; G5b; G3; G4b; G2; G1; G; X; Y; HG; WP; U; VB; NH; V; ICH; NZ; LO; OL; TZ                                                              |
| R2    | R1                 | R1; R; J; H; G4a; G5b; G3; G4b; G2; G1; G; X; Y; HG; WP; U; VB; NH; V; ICH; NZ; LO; OL; TZ                                                          |
| O     | R2                 | R2; R1; R; J; H; G4a; G5b; G3; G4b; G2; G1; G; X; Y; HG; WP; U; VB; NH; V; ICH; NZ; LO; OL; TZ                                                      |
| O1    | O                  | O; R2; R1; R; J; H; G4a; G5b; G3; G4b; G2; G1; G; X; Y; HG; WP; U; VB; NH; V; ICH; NZ; LO; OL; TZ                                                   |
| O2    | O1                 | O1; O; R2; R1; R; J; H; G4a; G5b; G3; G4b; G2; G1; G; X; Y; HG; WP; U; VB; NH; V; ICH; NZ; LO; OL; TZ                                               |
| O3    | O2                 | O2; O1; O; R2; R1; R; J; H; G4a; G5b; G3; G4b; G2; G1; G; X; Y; HG; WP; U; VB; NH; V; ICH; NZ; LO; OL; TZ                                           |
| F     | H; KTR             | K; M; N; H; G5b; G4b; G3; G2; G1; G; X; Y; HG; WP; U; VB; NH; V; ICH; NZ; LO; OL; TZ; TR; Z                                                         |
| P     | G; Z               | G; X; Y; HG; WP; U; VB; NH; V; ICH; NZ; LO; OL; TZ; Z                                                                                               |
| Z     |                    |                                                                                                                                                     |
| HG    | VB; NH             | VB; ICH; NZ; LO; OL; HG; TZ; NH; NH                                                                                                                 |
| WP    |                    |                                                                                                                                                     |
| TR    | Z                  | Z                                                                                                                                                   |
| VB    | ICH; OL; NZ; LO    | ICH; NZ; NZ; LO; OL; HG; TZ; VB; NH; ICH; NZ; LO                                                                                                    |
| NH    |                    |                                                                                                                                                     |
| ICH   | NZ                 | NZ                                                                                                                                                  |
| NZ    |                    |                                                                                                                                                     |
| LO    |                    |                                                                                                                                                     |
| OL    | TZ; HG             | HG; VB; NH; ICH; NZ; LO; OL; TZ; TZ                                                                                                                 |
| TZ    |                    |                                                                                                                                                     |
| BN    | WD; PO             | WD; RZ; UX; PO; BN; IU; QA; BV; MM; WD; RZ; UX                                                                                                      |
| WD    | RZ; UX             | RZ; UX                                                                                                                                              |
| PO    | QA; IU; BV; MM; BN | BN; WD; PO; RZ; UX; IU; QA; BV; MM; IU; QA; BV; MM                                                                                                  |
| RZ    |                    |                                                                                                                                                     |
| UX    |                    |                                                                                                                                                     |
| IU    |                    |                                                                                                                                                     |
| QA    |                    |                                                                                                                                                     |
| BV    |                    |                                                                                                                                                     |
| MM    |                    |                                                                                                                                                     |
+-------+--------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------+

Теперь поиск значений в столбце Name в соответствующей ячейке в столбце predecessors даст желаемый результат.

Как этого добиться, используя VBA код в Excel?

РЕДАКТИРОВАТЬ . Как я понимаю, это проблема сети. Вот схема сети для большей наглядности.

enter image description here

EDIT2 . Вот моя попытка (здесь VBA noob) в направлении, предложенном @GSerg . Застрял в выборочных местах предшественников. Ошибка Argument not optional.

Public Function NetworkCyclicityCheck(node As String, col As Range) As String

Dim dicP As Object: Set dicP = CreateObject("Scripting.Dictionary")

If Trim(node) <> "" Then
        For Each x In Split(cl.Value2, ";")
            Key = Trim(x)
            With Range
            pcell = .Find(What:=Key, LookAt:=xlWhole, MatchCase:=False)
            dicP(pcell) = dicP(pcell) & "," & cl.Address(0, 0)
        Next x
End If

Set NetworkCyclicityCheck = dicP
Set dicP = Nothing

End Function

2 ответа

Лучший ответ

Некоторым это может показаться странным, но этот вопрос действительно заинтриговал меня, учитывая, что я никогда не сталкивался с ситуацией, когда мне нужно было писать рекурсивный код раньше.

Не уверен, насколько он эффективен, но в моем ограниченном тестировании он работает мгновенно. Вставьте это в новый модуль, и он должен работать просто отлично.

Option Explicit

Private DestinationByLocation As Object

Sub Test()

  HighlightTheCycles Sheets("Sheet1").Range("A2:B46"), , True, True

End Sub

Public Sub HighlightTheCycles(ByVal TableRange As Range, Optional ClearExistingFill As Boolean = True, Optional OutputTheLoopPath As Boolean = False, Optional AlertIfNoCycles As Boolean = False)

  Dim InputData As Variant, OutputRange As Range
  Dim x As Long, y As Long, Temp As Variant

  Dim LoopLocations As Object
  Set DestinationByLocation = CreateObject("Scripting.Dictionary")
  Set LoopLocations = CreateObject("Scripting.Dictionary")
  DestinationByLocation.CompareMode = 1
  LoopLocations.CompareMode = 1

'Set fill to 'no-fill'
  If ClearExistingFill Then
    If OutputTheLoopPath Then
      TableRange.Resize(TableRange.Rows.Count, 3).Interior.Pattern = xlNone
    Else
      TableRange.Interior.Pattern = xlNone
    End If
  End If

'Establish all possible destinations
  InputData = TableRange.Value
  For x = 1 To UBound(InputData, 1)
    If Len(InputData(x, 2)) > 0 Then
      Temp = Split(InputData(x, 2), ";")
      For y = 0 To UBound(Temp, 1)
        Temp(y) = Trim(Temp(y))
        If DestinationByLocation.Exists(Temp(y)) Then
          DestinationByLocation(Temp(y)) = DestinationByLocation(Temp(y)) & ";" & InputData(x, 1)
        Else
          DestinationByLocation.Add Temp(y), InputData(x, 1)
        End If
      Next y
    End If
  Next x

'Look for loops
  Dim TempPath As Variant
  Temp = DestinationByLocation.Keys
  For x = 1 To UBound(Temp, 1)
    TempPath = TakeATrip(Temp(x))
    If Right(TempPath, 3) = ";;;" Then
      TempPath = Split(Left(TempPath, Len(TempPath) - 3), ";")
      If TempPath(UBound(TempPath, 1)) = Temp(x) Then
        LoopLocations.Add Temp(x), TempPath
      End If
    End If
  Next x

'Mark the cells that result in a loop
  If LoopLocations.Count > 0 Then
    If OutputTheLoopPath Then

      'Output the loop path found in a third column
      ReDim Temp(1 To UBound(InputData, 1), 1 To 1)
      For x = 1 To UBound(InputData, 1)
        If LoopLocations.Exists(InputData(x, 1)) Then
          If OutputRange Is Nothing Then
            Set OutputRange = TableRange.Cells(x, 1).Resize(1, 3)
          Else
            Set OutputRange = Union(OutputRange, TableRange.Cells(x, 1).Resize(1, 3))
          End If
          Temp(x, 1) = Join(LoopLocations(InputData(x, 1)), ";")
          Temp(x, 1) = Replace(Right(Temp(x, 1), Len(Temp(x, 1)) - 1), ";", " ;")
        End If
      Next x
      TableRange.Cells(1, 1).Offset(0, 2).Resize(UBound(Temp, 1), 1).Value = Temp

    Else

      'Do not output a third column
      For x = 1 To UBound(InputData, 1)
        If LoopLocations.Exists(InputData(x, 1)) Then
          If OutputRange Is Nothing Then
            Set OutputRange = TableRange.Cells(x, 1).Resize(1, 2)
          Else
            Set OutputRange = Union(OutputRange, TableRange.Cells(x, 1).Resize(1, 2))
          End If
        End If
      Next x

    End If

    OutputRange.Interior.Color = RGB(255, 0, 0)

  ElseIf AlertIfNoCycles Then

    MsgBox _
      "No cycles found in " & TableRange.Address(0, 0, , True), _
      vbInformation

  End If

End Sub

Private Function TakeATrip(ByVal MyLocation As Variant, Optional ExistingPath As Variant = "") As Variant

  Dim MyJourneys As Variant, x As Long
  Dim MyPaths As Variant

'If no new destinations, record the trip
  If DestinationByLocation.Exists(MyLocation) Then
    If DestinationByLocation(MyLocation) = "" Then
      TakeATrip = ExistingPath & ";" & MyLocation
      Exit Function
    End If
  Else
    TakeATrip = ExistingPath & ";" & MyLocation
    Exit Function
  End If

'Prepare for multiple routes
  MyJourneys = Split(DestinationByLocation(MyLocation), ";")
  ReDim MyPaths(0 To UBound(MyJourneys))

  For x = 0 To UBound(MyJourneys)
    If Len(MyJourneys(x)) > 0 Then
      If ExistingPath & ";" & MyLocation Like "*;" & MyJourneys(x) & ";*" Then
        TakeATrip = ExistingPath & ";" & MyLocation & ";" & MyJourneys(x) & ";;;"
        Exit Function 'a loop is found, we're done
      End If
      'explore new found path
      MyPaths(x) = TakeATrip(MyJourneys(x), ExistingPath & ";" & MyLocation)
    End If
    If Right(MyPaths(x), 3) = ";;;" Then
      TakeATrip = MyPaths(x)
      Exit Function
    End If
  Next x

  TakeATrip = Join(MyPaths, "|")

End Function

ОБРАТИТЕ ВНИМАНИЕ . В словарях по умолчанию учитывается регистр. Если вам нужен этот код, чтобы игнорировать регистр, добавьте к своим объявлениям вверху:

option compare text

И измените это

  Set DestinationByLocation = CreateObject("Scripting.Dictionary")
  Set LoopLocations = CreateObject("Scripting.Dictionary")

К этому

  Set DestinationByLocation = CreateObject("Scripting.Dictionary")
  Set LoopLocations = CreateObject("Scripting.Dictionary")
  DestinationByLocation.CompareMode = 1
  LoopLocations.CompareMode = 1

Спасибо Crops за выявление ошибки, когда петли не найдены; Я исправил код, добавив проверку отсутствия циклов и дополнительный вывод сообщения.


1

Judge
19 Ноя 2019 в 13:09

Расширение моего комментария,

Option Explicit

Public Sub GenerateFormulas()
  Dim NodeNames As Range
  Set NodeNames = Range("A2:A56")

  ' Assumed that the "from" column is immediately to the right,
  ' and that the column after it is the one where the formulas will appear

  Dim dict As Object
  Set dict = CreateObject("Scripting.Dictionary")

  Dim c As Range
  For Each c In NodeNames.Cells
    dict(c.value) = c.Offset(0, 2).Address(False, False, xlA1)
  Next

  For Each c In NodeNames.Cells
    c.Offset(0, 2).Formula = ListToFormula(dict, c.Offset(0, 1).value)
  Next
End Sub

Private Function ListToFormula(ByVal dict As Object, ByVal list As String) As String
  Dim nodes() As String
  nodes = Split(list, ";")

  ListToFormula = "="""""

  Dim i As Long
  For i = LBound(nodes) To UBound(nodes)
    ListToFormula = ListToFormula & " & " & dict(Trim$(nodes(i)))
  Next
End Function

Теперь вы можете посмотреть на Worksheet.CircularReference, и он тоже будет хорошо отображаться на листе:

enter image description here


1

GSerg
13 Ноя 2019 в 11:35

Содержание

  1. VBA Excel
  2. Предупреждение о циклической ссылке
  3. Как найти циклическую ссылку
  4. Параметры вычислений
  5. Руководство по проверке данных Excel
  6. Контроль достоверности данных
  7. Важное ограничение
  8. Определение правил проверки данных
  9. Параметры проверки данных
  10. Простое выпадающее меню
  11. Проверка данных с помощью пользовательской формулы
  12. Формулы устранения неполадок
  13. Примеры формул проверки данных
  14. Как автоматически выделять диапазоны для выборки ячеек из таблицы?
  15. Динамическое определение границ выборки ячеек
  16. Заполнение диапазона
  17. Перемещение диапазона
  18. Копировать/вставить диапазон
  19. Примеры использования функции АГРЕГАТ в Excel
  20. Панель формул
  21. Ручной ввод функции
  22. Расчет среднего значения
  23. Использование арифметического выражения
  24. Использование функции СРЗНАЧ
  25. Присвоение диапазона ячеек переменной

VBA Excel

Предупреждение о циклической ссылке

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

При нажатии на кнопку ОК, сообщение будет закрыто, а в ячейке содержащей циклическую ссылку в большинстве случаев появиться 0.

Предупреждение, как правило, появляется при первоначальном создании циклической ссылки, или открытии книги содержащей циклические ссылки. Если предупреждение принято, то при дальнейшем возникновении циклических ссылок оно может не появляться.

Как найти циклическую ссылку

Циклические ссылки в excel могут создаваться преднамеренно, для решения тех или иных задач финансового моделирования, а могут возникать случайно, в виде технических ошибок и ошибок в логике построения модели.

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

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

Найти циклическую ссылку можно несколькими способами. Например, чисто визуально формулы и ячейки участвующие в образовании циклических ссылок в excel отмечаются синими стрелками, как показано на первом рисунке.

Если циклическая ссылка одна на листе, то в строке состояния будет выведено сообщение о наличии циклических ссылок с адресом ячейки.

Если циклические ссылки есть еще на других листах кроме активного, то будет выведено сообщение без указания ячейки.

Если или на активном листе их более одной, то будет выведено сообщение с указанием ячейки, где циклическая ссылка появляется в первый раз, после ее удаления – ячейка, содержащая следующую циклическую ссылку и т.д.

Найти циклическую ссылку можно также при помощи инструмента поиска ошибок.

На вкладке Формулы в группе Зависимости формул выберите элемент Поиск ошибок и в раскрывающемся списке пункт Циклические ссылки.

Вы увидите адрес ячейки с первой встречающейся циклической ссылкой. После ее корректировки или удаления – со второй и т.д.

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

Параметры вычислений

Следующий список поясняет опции, которые доступны в разделе Calculation options (Параметры вычислений):

  • Automatic (Автоматически) – пересчитывает все зависимые формулы и обновляет все открытые или внедрённые диаграммы при любом изменении значения, формулы или имени. Данная настройка установлена по умолчанию для каждого нового рабочего листа Excel.
  • Automatic except for data tables (Автоматически, кроме таблиц данных) – пересчитывает все зависимые формулы и обновляет все открытые или внедрённые диаграммы, за исключением таблиц данных. Для пересчета таблиц данных, когда данная опция выбрана, воспользуйтесь командой Calculate Now (Пересчет), расположенной на вкладке Formulas (Формулы) или клавишей F9.
  • Manual (Вручную) – пересчитывает открытые рабочие листы и обновляет открытые или внедрённые диаграммы только при нажатии команды Calculate Now (Пересчет) или клавиши F9, а так же при использовании комбинации клавиши Ctrl+F9 (только для активного листа).
  • Recalculate workbook before saving (Пересчитывать книгу перед сохранением) – пересчитывает открытые рабочие листы и обновляет открытые или внедрённые диаграммы при их сохранении даже при включенной опции Manual (Вручную). Если Вы не хотите, чтобы при каждом сохранении зависимые формулы и диаграммы пересчитывались, просто отключите данную опцию.
  • Enable iterative calculation (Включить итеративные вычисления) – разрешает итеративные вычисления, т.е. позволяет задавать предельное количество итераций и относительную погрешность вычислений, когда формулы будут пересчитываться при подборе параметра или при использовании циклических ссылок. Более детальную информацию о подборе параметров и использовании циклических ссылок можно найти в справке Microsoft Excel.
  • Maximum Iterations (Предельное число итераций) – определяет максимальное количество итераций (по умолчанию – 100).
  • Maximum Change (Относительная погрешность) – устанавливает максимально допустимую разницу между результатами пересчета (по умолчанию – 0.001).

Вы также можете переключаться между тремя основными режимами вычислений, используя команду Calculation Options (Параметры вычислений) в разделе Calculation (Вычисление) на вкладке Formulas (Формулы). Однако, если необходимо настроить параметры вычислений, все же придется обратиться к вкладке Formulas (Формулы) диалогового окна Excel Options (Параметры Excel).

Руководство по проверке данных Excel

Проверка данных — это функция в Excel, используемая для контроля того, что пользователь может ввести в ячейку. Например, вы можете использовать проверку данных, чтобы убедиться, что:

  • значение является числом от 1 до 6
  • дата произойдет в следующие 30 дней
  • текстовая запись содержит менее 25 символов

Проверка данных может просто отображать сообщение пользователю с информацией, что разрешено, как показано ниже:

Сообщение отображается автоматически при выборе ячейки

Проверка данных также может остановить неправильный ввод данных пользователем. Например, если код сотрудника не проходит проверку, вы можете увидеть следующее сообщение:

Пример сообщения об ошибке

Кроме того, проверка данных может использоваться для предоставления пользователю определенного выбора в раскрывающемся меню:

Пример раскрывающегося меню проверки данных

Это очень удобно, так как можно дать пользователю именно те значения, которые уже соответствуют требованиям.

Контроль достоверности данных

Проверка данных осуществляется с помощью правил, определенных в пользовательском интерфейсе Excel на вкладке «Данные» на ленте.

Элементы управления проверкой данных на вкладке ДАННЫЕ

Важное ограничение

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

Определение правил проверки данных

Проверка данных определяется в окне с 3 вкладками: Параметры, Сообщение для ввода и Сообщение об ошибке:

Окно проверки данных имеет три основные вкладки

На вкладке Параметры вы можете ввести критерии проверки. Существует ряд встроенных правил проверки с различными параметрами, также можно выбрать «Другой» и использовать собственную формулу для проверки ввода, как показано ниже:

Пример вкладки настроек проверки данных

Вкладка «Сообщение для ввода» определяет сообщение, отображаемое при выборе ячейки с правилами проверки. Оно не является обязательным.

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

Входное сообщение не влияет на то, что пользователь может ввести — оно просто отображает сообщение, чтобы сообщить пользователю, что разрешено или ожидается.

Вкладка настройки сообщения проверки данных

Вкладка «Сообщение об ошибке» определяет, как выполняется проверка. Например, когда вид установлен на «Останов», неверные данные вызывают окно с сообщением, и ввод не разрешен.

Вкладка предупреждения об ошибке проверки данных

Пользователь видит сообщение, подобное этому:

Пример сообщения об ошибке проверки данных

Когда в поле «Вид» установлено значение «Сообщение» или «Предупреждение», изменяется значок, отображаемый с пользовательским сообщением. Пользователь может игнорировать сообщение и вводить значения, которые не проходят проверку. Ниже обобщено поведение каждого вида предупреждения об ошибке.

Не позволяет пользователям вводить недопустимые данные в ячейку. Пользователи могут повторить попытку, но должны ввести значение, которое проходит проверку данных. В окне предупреждения «Останов» есть три опции: «Повторить», «Отмена» и «Справка».

Предупреждает пользователей о том, что данные неверны. Предупреждение ничего не делает, чтобы остановить ввод неверных данных. В окне «Предупреждение» есть три параметра: «Да» (для принятия недействительных данных), «Нет» (для редактирования недействительных данных), «Отмена» (для удаления недействительных данных) и «Справка».

Параметры проверки данных

При создании правила проверки данных доступно восемь параметров:

Любое значение — проверка не выполняется. Примечание: если проверка данных ранее применялась с установленным входным сообщением, сообщение все равно будет отображаться при выборе ячейки, даже если выбрано любое значение.

Целое число — разрешены только целые числа. Как только опция целого числа выбрана, другие опции становятся доступными для дальнейшего ограничения ввода. Например, вам может потребоваться целое число от 1 до 10.

Действительное — работает как опция целого числа, но допускает десятичные значения. Например, если для параметра «Действительное» задано значение от 0 до 3, допустимы все значения, такие как 0,5 и 2,5.

Список — разрешены только значения из предварительно определенного списка. Значения представляются пользователю как выпадающее меню. Допустимые значения могут быть жестко заданы непосредственно на вкладке «Параметры» или указаны в виде диапазона на рабочем листе.

Дата — разрешены только даты. Например, вам может потребоваться дата между 1 января 2018 года и 31 декабря 2021 года или дата после 1 июня 2018 года.

Время — разрешено только время. Например, вы можете указать время между 9:00 и 17:00 или разрешить время только после 12:00.

Длина текста — проверяет ввод на основе количества символов или цифр. Например, вам может потребоваться код из 5 цифр.

Другой — проверяет ввод с использованием пользовательской формулы. Другими словами, вы можете написать собственную формулу для проверки ввода. Пользовательские формулы значительно расширяют возможности проверки данных. Например, вы можете использовать формулу, чтобы обеспечить значение в верхнем регистре, или значение, которое содержит «АБВ».

На вкладке параметров также есть два флажка:

Игнорировать пустые ячейки — говорит Excel не проверять ячейки, которые не содержат значений. На практике этот параметр влияет только на команду «Обвести неверные данные». Когда эта опция включена, пустые ячейки не обведены, даже если они не прошли проверку.

Распространить изменения на другие ячейки с тем же условием — этот параметр обновит проверку, примененную к другим ячейкам, когда она будет соответствовать (оригинальной) проверке редактируемых ячеек.

Простое выпадающее меню

Вы можете предоставить пользователю раскрывающееся меню опций, жестко закодировав значения в поле настроек или выбрав диапазон на листе. Например, чтобы ограничить записи действиями «ПРИНЯТ», «В ОБРАБОТКЕ» или «ОТГРУЖЕН», вы можете ввести эти значения через точку с запятой:

Раскрывающееся меню проверки данных с жестко заданными значениями

При применении к ячейке на рабочем листе раскрывающееся меню работает следующим образом:

Используются жестко заданные значения выпадающего меню проверки данных

Другой способ ввода значений в раскрывающееся меню — использование ссылки на рабочий лист. Например, с размерами (то есть маленький, средний и т.д.) в диапазоне F4:F6. Вы можете указать этот диапазон непосредственно в окне настроек проверки данных:

Значения выпадающего меню проверки данных со ссылкой на диапазон

Обратите внимание, что диапазон вводится как абсолютный адрес, чтобы предотвратить его изменение, поскольку проверка данных применяется к другим ячейкам.

Подсказка. Щелкните значок маленькой стрелки в дальнем правом углу поля «Источник», чтобы сделать выбор непосредственно на рабочем листе, чтобы вам не приходилось вводить диапазон вручную.

Вы также можете использовать именованные диапазоны для указания значений. Например, с именованным диапазоном под названием «размер» для F4:F6, вы можете ввести имя непосредственно в окне, начиная со знака равенства:

Значения выпадающего меню проверки данных с именованным диапазоном

Именованные диапазоны автоматически являются абсолютными, поэтому они не изменятся.

Вы также можете создавать зависимые выпадающие списки с пользовательской формулой.Совет.

Если вы используете таблицу для раскрывающихся значений, Excel будет автоматически расширять или сокращать таблицу при добавлении или удалении значений.

Другими словами, Excel будет автоматически синхронизировать раскрывающийся список со значениями в таблице при изменении, добавлении или удалении значений.

Проверка данных с помощью пользовательской формулы

Формулы проверки данных должны быть логическими формулами, которые возвращают ИСТИНА, если ввод действителен, и ЛОЖЬ, если ввод недействителен. Например, чтобы разрешить ввод любого числа в ячейку A1, вы можете использовать функцию ЕЧИСЛО (ISNUMBER) в формуле, подобной этой:

Если пользователь вводит значение 10 в A1, ЕЧИСЛО (ISNUMBER) возвращает ИСТИНА, и проверка данных завершается успешно. Если вводится значение типа «яблоко» в A1, ЕЧИСЛО (ISNUMBER) возвращает ЛОЖЬ, и проверка данных завершается неудачно.

Чтобы включить проверку данных с помощью формулы, выберите «Другой» на вкладке «Параметры», затем введите формулу, начиная со знака равенства (=), как обычно.

Формулы устранения неполадок

Excel игнорирует формулы проверки данных, которые возвращают ошибки.

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

Фиктивные формулы — это просто формулы проверки данных, введенные непосредственно на листе, чтобы вы могли легко увидеть, что они возвращают. На приведенном ниже экране показан пример:

Проверка достоверности данныхс помощью фиктивных формул

После того, как фиктивная формула заработает так, как вы хотите, просто скопируйте и вставьте ее в область формулы проверки данных.

Примеры формул проверки данных

Возможности для проверки данных пользовательских формул практически не ограничены. Вот несколько примеров для вдохновения:

Чтобы разрешить только 5 символьных значений, начинающихся с «z», вы можете использовать:

= И (ЛЕВСИМВ (А1) = «z»; ДЛСТР (A1) = 5)

Эта формула возвращает ИСТИНА только тогда, когда код длиной 5 цифр и начинается с «z». Два значения в примере выше возвращают ЛОЖЬ с этой формулой.

Чтобы разрешить ввод даты в течение 30 дней с сегодняшнего дня:

= И (А1> СЕГОДНЯ (), А1

Как автоматически выделять диапазоны для выборки ячеек из таблицы?

Задание является следующим. В одном из столбцов в разных ячейках находятся какие-то значения (в данном случае текстовые строки “граница”). Они определяют начало и конец секторов (диапазонов). Эти значения вставлены автоматически и могут появляться в разных ячейках. Их размеры и количество в них ячеек также может быть разным. Например, на рисунке ниже выбран сектор данных (диапазон) номер 2.

Все, что следует сейчас сделать – это создать возможность легкого и быстрого выбора диапазона, который нас интересует (вписывая номер диапазона в одну из ячеек для выбора).

Динамическое определение границ выборки ячеек

Для наглядности приведем решение этой задачи с использованием вспомогательного столбца. В первую ячейку в вспомогательном столбце (A7) вводим формулу:

и копируем ее вниз в оставшиеся ячейки. Везде, где в ячейках соседнего столбца находится значение “граница”, функция возвращает номер строки. В противном случае возвращает пустую строку.

Следующим шагом будет динамическое определение адреса для выборки диапазона данных из исходного списка в соответствии с критерием отбора.

Изменяемое значение критерия для управления выборкой данных из таблицы будет указано в ячейке C1. Там мы указываем порядковый номер диапазона, данные которого нас интересуют в конкретный момент.

Заполнение диапазона

Чтобы заполнить диапазон, следуйте инструкции ниже:

  1. Введите значение 2 в ячейку B2.
  2. Выделите ячейку В2, зажмите её нижний правый угол и протяните вниз до ячейки В8.

Эта техника протаскивания очень важна, вы будете часто использовать её в Excel. Вот еще один пример:

  • Введите значение 2 в ячейку В2 и значение 4 в ячейку B3.
  • Выделите ячейки B2 и B3, зажмите нижний правый угол этого диапазона и протяните его вниз.

    Excel автоматически заполняет диапазон, основываясь на шаблоне из первых двух значений. Классно, не правда ли? Вот еще один пример:

  • Введите дату 13/6/2013 в ячейку В2 и дату 16/6/2013 в ячейку B3 (на рисунке приведены американские аналоги дат).
  • Выделите ячейки B2 и B3, зажмите нижний правый угол этого диапазона и протяните его вниз.
  • Перемещение диапазона

    Чтобы переместить диапазон, выполните следующие действия:

    1. Выделите диапазон и зажмите его границу.
    2. Перетащите диапазон на новое место.

    Копировать/вставить диапазон

    Чтобы скопировать и вставить диапазон, сделайте следующее:

    1. Выделите диапазон, кликните по нему правой кнопкой мыши и нажмите Copy (Копировать) или сочетание клавиш Ctrl+C.
    2. Выделите ячейку, где вы хотите разместить первую ячейку скопированного диапазона, кликните правой кнопкой мыши и выберите команду Paste (Вставить) в разделе Paste Options (Параметры вставки) или нажмите сочетание клавиш Ctrl+V.

    Примеры использования функции АГРЕГАТ в Excel

    Пример 1. В классе провели контрольную по математике. Необходимо определить среднюю оценку для учеников, которые присутствовали на контрольной. Напротив некоторых фамилий оценка не указана по причине неn допуска к написанию или отсутствия.

    Вид таблицы с данными:

    Для расчета используем следующую формулу:

    • 1 – число, соответствующее функции СРЗНАЧ;
    • 3 – число, указывающее на способ расчета (не учитывать скрытые строки и коды ошибок);
    • B3:B13 – диапазон ячеек с данными для определения среднего значения.

    В результате формула вернула правильное число среднего значения в обход значениям с ошибками #Н/Д.

    Панель формул

    Существует ещё третий способ запустить функцию «СРЗНАЧ». Для этого, переходим во вкладку «Формулы». Выделяем ячейку, в которой будет выводиться результат. После этого, в группе инструментов «Библиотека функций» на ленте жмем на кнопку «Другие функции». Появляется список, в котором нужно последовательно перейти по пунктам «Статистические» и «СРЗНАЧ».

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

    Дальнейшие действия точно такие же.

    Ручной ввод функции

    Но, не забывайте, что всегда при желании можно ввести функцию «СРЗНАЧ» вручную. Она будет иметь следующий шаблон: «=СРЗНАЧ(адрес_диапазона_ячеек(число); адрес_диапазона_ячеек(число)).

    Конечно, этот способ не такой удобный, как предыдущие, и требует держать в голове пользователя определенные формулы, но он более гибкий.

    Расчет среднего значения

    Когда среднее значение нужно не только определить, но и зафиксировать в отдельной выбранной для этого ячейке, можно использовать несколько методов. Ниже мы подробно рассмотрим каждый из них.

    Использование арифметического выражения

    Как мы знаем, среднее значение равняется сумме чисел, разделенных на их количество. Данную формулу можно использовать и в Экселе.

    1. Встаем в нужную ячейку, ставим знак “равно” и пишем арифметическое выражение по следующем принципу:
      =(Число1+Число2+Число3. )/Количество_слагаемых .
      Примечание: в качестве числа может быть указано как конкретное числовое значение, так и ссылка на ячейку. В нашем случае, давайте попробуем посчитать среднее значение чисел в ячейках B2,C2,D2 и E2.
      Конечный вид формулы следующий: =(B2+E2+D2+E2)/4 .
    2. Когда все готово, жмем Enter, чтобы получить результат.

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

    Использование функции СРЗНАЧ

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

    1. Встаем в ячейку, куда планируем выводить результат. Кликаем по значку “Вставить функци” (fx) слева от строки формул.
    2. В открывшемся окне Мастера функций выбираем категорию “Статистические”, в предлагаемом перечне кликаем по строке “СРЗНАЧ”, после чего нажимаем OK.
    3. На экране отобразится окно с аргументами функции (их максимальное количество – 255). Указываем в качестве значения аргумента “Число1” координаты нужного диапазона. Сделать это можно вручную, напечатав с клавиатуры адреса ячеек. Либо можно сначала кликнуть внутри поля для ввода информации и затем с помощью зажатой левой кнопки мыши выделить требуемый диапазон в таблице. При необходимости (если нужно отметить ячейки и диапазоны ячеек в другом месте таблицы) переходим к заполнению аргумента “Число2” и т.д. По готовности щелкаем OK.
    4. Получаем результат в выбранной ячейке.
    5. Среднее значение не всегда может быть “красивым” за счет большого количества знаков после запятой. Если нам такая детализация не нужна, ее всегда можно настроить. Для этого правой кнопкой мыши щелкаем по результирующей ячейке. В открывшемся контекстном меню выбираем пункт “Формат ячеек”.
    6. Находясь во вкладке “Число” выбираем формат “Числовой” и с правой стороны окна указываем количество десятичных знаков после запятой. В большинстве случаев, двух цифр более, чем достаточно. Также при работе с большими числами можно поставить галочку “Разделитель групп разрядов”. После внесение изменений жмем кнопку OK.
    7. Все готово. Теперь результат выглядит намного привлекательнее.

    Присвоение диапазона ячеек переменной

    Чтобы переменной присвоить диапазон ячеек, она должна быть объявлена как Variant, Object или Range:

    Источник

    Понравилась статья? Поделить с друзьями:
  • Vba excel цикл продолжить
  • Vba excel цикл по ячейкам диапазона
  • Vba excel цикл по файлам в папке
  • Vba excel цикл по листам книги
  • Vba excel цикл по диапазону ячеек в excel