Как найти два минимальных значения в Excel: от базовых функций до продвинутых приёмов

Почему поиск двух минимальных значений — частая задача в Excel

Работа с числовыми данными в Microsoft Excel часто требует анализа экстремальных значений — не только самого маленького, но и второго по величине. Например, при обработке результатов тестирования может понадобиться выделить двух аутсайдеров, а в финансовом отчёте — две наименьшие статьи расходов. Стандартная функция МИН возвращает только одно значение, что создаёт иллюзию ограниченности инструментов. На деле же в Excel существует как минимум 5 способов решить эту задачу — от элементарных формул до автоматизированных макросов.

Важно понимать, что подходы отличаются не только сложностью, но и гибкостью. Одни методы подойдут для статических данных, другие — для динамически обновляемых таблиц с тысячами строк. В этой статье мы разберём все варианты, включая малоизвестные функции НАИМЕНЬШИЙ и ИНДЕКС-ПОИСКПОЗ, а также покажем, как обойти типичные ошибки при работе с дубликатами или пустыми ячейками. Спойлер: самый надёжный способ для больших массивов данных — комбинация функций массива, но она требует знания синтаксиса формул CSE (вводимых через Ctrl+Shift+Enter).

Способ 1: Функция НАИМЕНЬШИЙ — самый простой вариант

Если вам нужно быстро найти два минимальных значения без углублённых знаний Excel, функция НАИМЕНЬШИЙ (англ. SMALL) станет идеальным решением. Она возвращает k-е наименьшее значение в диапазоне, где k — это порядковый номер (1 для минимума, 2 для второго минимума и т.д.). Синтаксис прост:

=НАИМЕНЬШИЙ(диапазон; k)

Пример: чтобы найти второе минимальное значение в столбце A1:A100, используйте:

=НАИМЕНЬШИЙ(A1:A100; 2)
  • Плюсы: не требует дополнительных вычислений, работает во всех версиях Excel (начиная с 2007).
  • ⚠️ Ограничения: если в диапазоне есть повторяющиеся минимальные значения, функция вернёт дубликат (например, дважды 5, если это минимальное значение встречается дважды).
  • 📌 Совет: для визуального контроля используйте Условное форматирование с правилом "Первые 2 значения" → "Самые маленькие".
⚠️ Внимание: Функция НАИМЕНЬШИЙ игнорирует пустые ячейки и текстовые значения, но если в диапазоне есть ошибки (например, #ДЕЛ/0!), она вернёт ошибку. Чтобы этого избежать, оберните её в ЕСЛИОШИБКА:
=ЕСЛИОШИБКА(НАИМЕНЬШИЙ(A1:A100; 2); "Нет данных")
📊 Какой версией Excel вы пользуетесь?
2010-2013
2016-2019
2021/365
Другая

Способ 2: Комбинация МИН + ЕСЛИ для динамических диапазонов

Когда данные обновляются часто или нужно учитывать дополнительные условия (например, игнорировать нулевые значения), приходит на помощь формула массива. Этот метод сложнее, но гибче: он позволяет найти второе минимальное значение с учётом фильтров. Базовая структура:

=МИН(ЕСЛИ(диапазон<>МИН(диапазон); диапазон))

Чтобы формула заработала, её нужно ввести как формулу массива:

  1. Введите формулу в ячейку.
  2. Нажмите Ctrl+Shift+Enter (в Excel 365 просто Enter).

Пример для диапазона B2:B50 с игнорированием нулей:

=МИН(ЕСЛИ((B2:B50<>0)*(B2:B50<>МИН(B2:B50)); B2:B50))

Убедитесь, что в диапазоне нет текстовых значений|

Проверьте наличие дубликатов минимального значения|

Используйте Ctrl+Shift+Enter в Excel 2010-2019|

В Excel 365 формула работает без специального ввода

-->

Сценарий Формула Примечание
Простое второе минимум =МИН(ЕСЛИ(B2:B50<>МИН(B2:B50); B2:B50)) Требует CSE-ввода
Игнорировать нули =МИН(ЕСЛИ((B2:B50<>0)*(B2:B50<>МИН(B2:B50)); B2:B50)) Подходит для финансовых данных
С условием (например, категория "A") =МИН(ЕСЛИ((A2:A50="A")*(B2:B50<>МИН(ЕСЛИ(A2:A50="A"; B2:B50))); B2:B50)) Двойной CSE-ввод

Способ 3: Функции ИНДЕКС и ПОИСКПОЗ для поиска позиций

Если вам мало самих значений и нужны их адреса в таблице (например, чтобы подсветить строки или извлечь связанные данные), используйте связку ИНДЕКС + ПОИСКПОЗ. Этот метод возвращает не только значения, но и их положение в массиве.

Алгоритм действий:

  1. Найдите первое минимальное значение: =МИН(B2:B50).
  2. Найдите его позицию: =ПОИСКПОЗ(МИН(B2:B50); B2:B50; 0).
  3. Исключите первую позицию и найдите второе значение:
    =ИНДЕКС(B2:B50; НАИМЕНЬШИЙ(ЕСЛИ(B2:B50<>МИН(B2:B50); СТРОКА(B2:B50)-1); 1))

Критичный нюанс: если в данных есть дубликаты минимального значения, этот метод вернёт позицию первого встреченного дубликата второго минимума. Чтобы получить все позиции, потребуется макрос (см. Способ 5).

Способ 4: Power Query для обработки больших данных

Когда речь идёт о таблицах с десятками тысяч строк, стандартные формулы Excel начинают "тормозить". Здесь на помощь приходит инструмент Power Query (доступен в Excel 2016+ и 365). Он позволяет сортировать данные и извлекать топовые значения без формул.

Пошаговая инструкция:

  1. Выделите диапазон данных и перейдите на вкладку ДанныеИз таблицы/диапазона.
  2. В открывшемся редакторе Power Query отсортируйте столбец по возрастанию.
  3. Щёлкните правой кнопкой по заголовку столбца → Дублировать столбец.
  4. В новом столбце оставьте только первые 2 строки (удалите остальные через Удалить строкиУдалить альтернативные строки).
  5. Нажмите Закрыть и загрузить — результат появится на новом листе.

Преимущество этого метода — мгновенная обработка даже миллиона строк. Кроме того, Power Query сохраняет шаги преобразования, поэтому при обновлении исходных данных результат пересчитается автоматически.

⚠️ Внимание: Power Query создаёт связанную таблицу, которая обновляется при изменении данных. Если вам нужен статический результат, скопируйте его на другой лист через Специальная вставкаЗначения.
Как ускорить Power Query для очень больших файлов?

Используйте параметр "Загрузить в модель данных" вместо создания таблицы на листе. Это снизит нагрузку на оперативную память и ускорит обработку в 3-5 раз.

Способ 5: VBA-макрос для автоматизации и сложных условий

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

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

Sub FindTwoMinValues()

Dim rng As Range

Dim arr() As Variant

Dim i As Long, min1 As Double, min2 As Double

' Проверяем, выделен ли диапазон

On Error Resume Next

Set rng = Selection

On Error GoTo 0

If rng Is Nothing Then Exit Sub

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

arr = rng.Value

min1 = arr(1, 1)

min2 = arr(1, 1)

' Ищем два минимальных значения

For i = 1 To UBound(arr, 1)

If arr(i, 1) < min1 Then

min2 = min1

min1 = arr(i, 1)

ElseIf arr(i, 1) < min2 And arr(i, 1) <> min1 Then

min2 = arr(i, 1)

End If

Next i

' Выводим результат

MsgBox "Первое минимальное: " & min1 & vbCrLf & _

"Второе минимальное: " & min2, vbInformation, "Результаты поиска"

End Sub

Чтобы использовать макрос:

  1. Нажмите Alt+F11, чтобы открыть редактор VBA.
  2. Вставьте код в новый модуль (InsertModule).
  3. Выделите диапазон на листе и запустите макрос через Alt+F8.

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

' Добавить в конец цикла:

If arr(i, 1) = min1 Or arr(i, 1) = min2 Then

Debug.Print "Значение: " & arr(i, 1) & ", Студент: " & arr(i, 2)

End If

Типичные ошибки и как их избежать

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

  • 🔄 Дубликаты минимума: Если минимальное значение встречается несколько раз, функция НАИМЕНЬШИЙ вернёт его же для k=2. Решение: используйте формулу массива с условием СЧЁТЕСЛИ:
    =МИН(ЕСЛИ(СЧЁТЕСЛИ($B$2:B2; B2:B50)<2; B2:B50))
  • Пустые ячейки: Функции МИН/НАИМЕНЬШИЙ игнорируют пустоты, но если в диапазоне только одна заполненная ячейка, НАИМЕНЬШИЙ(диапазон; 2) вернёт ошибку. Решение: добавьте проверку:
    =ЕСЛИ(СЧЁТ(B2:B50)>=2; НАИМЕНЬШИЙ(B2:B50; 2); "Недостаточно данных")
  • 📉 Скрытые строки: Стандартные функции учитывают скрытые строки. Чтобы их игнорировать, используйте VBA или фильтр перед применением формул.

Ещё одна частая проблема — некорректная сортировка при использовании НАИМЕНЬШИЙ с текстовыми данными. Excel сортирует текст по алфавиту ("10" идёт перед "2"), поэтому для числовых значений всегда проверяйте формат ячеек (Числовой, а не Текстовый).

FAQ: Ответы на частые вопросы

Можно ли найти два минимальных значения в Google Sheets?

Да, в Google Таблицах работает та же функция =SMALL(диапазон; 2) (аналог НАИМЕНЬШИЙ). Для формул массива используйте =ARRAYFORMULA вместо Ctrl+Shift+Enter:

=ARRAYFORMULA(MIN(IF(B2:B50<>MIN(B2:B50); B2:B50)))
Как найти два максимальных значения?

Замените НАИМЕНЬШИЙ на НАИБОЛЬШИЙ (англ. LARGE):

=НАИБОЛЬШИЙ(A1:A100; 1) ' первое максимальное

=НАИБОЛЬШИЙ(A1:A100; 2) ' второе максимальное

Почему формула массива возвращает #ЗНАЧ?

Ошибка #ЗНАЧ! возникает, если:

  • Вы забыли нажать Ctrl+Shift+Enter (для Excel 2010-2019).
  • В диапазоне есть текстовые значения (используйте ЕЧИСЛО для фильтрации).
  • Диапазоны в формуле разного размера (например, B2:B50 vs C2:C49).
Как найти два минимальных значения с учётом критериев (например, по категории)?

Используйте комбинацию НАИМЕНЬШИЙ + ЕСЛИ с несколькими условиями:

=НАИМЕНЬШИЙ(ЕСЛИ((A2:A50="Категория1")*(B2:B50<>0); B2:B50); 2)

Для Excel 365 подойдёт более простая формула с ФИЛЬТР:

=НАИМЕНЬШИЙ(ФИЛЬТР(B2:B50; (A2:A50="Категория1")*(B2:B50<>0)); 2)
Можно ли найти два минимальных значения в сводной таблице?

Сводные таблицы не поддерживают прямые формулы, но вы можете:

  1. Отсортировать данные по возрастанию.
  2. Добавить столбец с рангом (функция РАНГ).
  3. Отфильтровать первые 2 строки по рангу.

Или используйте Power Query (см. Способ 4).