Как найти два минимальных значения в 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. Вставьте код в новый модуль (Insert → Module).
  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).