Как определить минимальное значение в excel. Как найти минимальное значение по условию

  • 09.09.2022

В Excel имеется функция определения минимального значения. Однако, найти минимальное значение по условию проблематично. Справиться с этой задачей может функция из надстройки =МИНСЕСЛИ

(аналогична стандартной функции Excel СУММЕСЛИ).

В Excel версии 2016 и выше появилась встроенная функция МИНЕСЛИ , можете пользоваться ей. Если ваш Excel более ранней версии, то эту функцию можно использовать установив надстройку VBA-Excel .

У функции следующие аргументы =МИНЕСЛИ(ДИАПАЗОН;КРИТЕРИЙ;[ДИАПАЗОН_ПОИСКА ])

    ДИАПАЗОН - Диапазон проверяемых ячеек.

  • КРИТЕРИЙ - Условие в формате числа, выражения или текста, определяющее проверку минимального значения.
  • [ ДИАПАЗОН_ПОИСКА ] - Фактический диапазон для определения минимального значения. Если данный параметр не задан, будет использоваться ячейки, задаваемые параметром ДИАПАЗОН .

Пример 1

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

  1. Рассмотрим следующий пример в котором определяется минимальная оценка по литературе. Для этого в параметр КРИТЕРИЙ указано значение «Литература», а в параметр ДИАПАЗОН - список предметов.
  2. Если в качестве критерия указать логическое выражение «<>Русский» , то определится минимальная оценка по всем предметам за исключением русского языка.

Пример 2

В следующем примере параметр ДИАПАЗОН_ПОИСКА не задан, поэтому минимальное значение определяется среди ячеек указанных в параметре ДИАПАЗОН .

Создайте новый файл, нажав на кнопку Создать на панели быстрого доступа. Переименуем Лист 1 в Анализ затрат. Разработаем таблицу по анализу Инвестиционных затрат.

Рисунок 23. Анализ инвестиционных затрат

Задание: Рассчитайте столбец стоимость по формуле. Для столбцов «Цена за единицу» и «Стоимость» примените денежный формат.

В ячейке F12 рассчитайте общую сумму инвестиционных затрат. Это можно сделать 2 способами:

1 Способ:

Активизируйте ячейку F12;

Введите в нее формулу: =F5+F6+F7+F8+F9+F10+F11 и нажмите Enter.

2 Способ с применением функции:

Функция в MS Excel - это формула, в которой определенные математические действия заменены названиями функций. Например, чтобы сложить несколько значений используется функция СУММ.

Заменим в ячейке F12 обычную формулу на формулу с использованием СУММ:

Задание: Выявите максимальную стоимость инвестиционных расходов. Для этого:

Активизируйте ячейку, в которой нужно получить результат (F13);

Справа от кнопки Сумма в группе Редактирование на вкладке Главная нажмите стрелку с выпадающим списком функций и выдерите функцию Максимум (из выбранного диапазона выбирает самое большое значение);

В ячейке F13 появится формула = МАКС(F5:F11), однако F12 нужно исключить из данного диапазона. Наведите указатель мыши в виде белого жирного креста на середину первой ячейки диапазона (F5), протяните выделение до ячейки F11;

Нажмите Enter.

Задание: Выявите минимальное и среднее значение стоимости инвестиционных затрат.

Функция Минимум (=МИН) – выявляет наименьшее значение диапазона;

Функция Среднее значение (=СРЗНАЧ) – рассчитайте среднее значение диапазона, т.е. складывает все элементы и делит на количество элементов диапазона сложения.

Функция «Если»

Руководство предприятия, рассмотрев анализ инвестиционных затрат, решило в этом месяце оплатить только те позиции, стоимость которых менее 45000руб.

Добавим в таблице столбец «Оплата», в котором необходимо указать:

Если стоимость более 45 000руб. – «Отложить»;

Если стоимость менее 45 000руб. – «В оплату».

Активизируйте ячейку G5, откройте вкладку Формулы , нажмите кнопку Вставить функцию .

В диалоговом окне выберите категорию Логические , в списке функций – ЕСЛИ .

Рисунок 24. Функция ЕСЛИ

Протяните полученное в ячейке G5 значение до конца таблицы (до G11).

Использование нескольких условий при применении Функции «ЕСЛИ»

Перейти на второй лист Вашей книги и переименуйте его в Зарплата. Введите следующие данные:

Рисунок 25. Пример расчета премии за объем продаж

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

Если(условие; значение при истинности условий; значение при ложности условий)

Рассмотрим пример, когда условий два: если объем продаж сотрудника больше 50 000 руб., тогда премия составит 10% от объема продаж, в противном случае 5%.

Данная запись будет выглядеть для нашего примера следующим образом:

Рисунок 26.Пример расчета премии за объем продаж с одним условием

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

Если сотрудник продал товара на сумму больше или равной 90 000руб., его премия составит 10% от объема продаж, если сумма проданного товара составляет больше или равно 30 000руб., премия составит 5% от объема продаж, если сумма меньше 30 000руб., премия составит 3%.

Рисунок 27. Пример расчета премии за объем продаж с несколькими условиями

В этом случае условий несколько и запись функции будет выглядеть так:

Условное форматирование

Условное форматирование позволяет задать для ячейки разные форматы при разных условиях. Например, заливка ячеек, объем продаж в которых больше 30 000 руб. должны быть красной, меньше 30 000 руб. – желтой.

Выделить диапазон С2:С5;

На вкладке Главная в группе стили нажать на кнопку Условное форматирование и выбрать команду Правила выделения ячеек…Другие правила.

Задать формат, при значении ячеек больше 30000, нажать ОК.

Рисунок 28. Условное форматирование

Выполнить тоже действие и задать формат для ячеек со значением меньше 30 000 руб.

Попробуйте команды: Гистограммы, Цветовые шкалы и Наборы значков из пункта «Условное форматирование».

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

Расчет платежа по кредиту

Вычислим сумму платежа по кредиту, используя функцию ПЛТ.

Перейдете на Лист 2 и переименуйте его в «Кредит». Введите исходные данные для расчета. Обратите внимание, что в ячейке В2 – отображена годовая сумма процентов по кредиту. В ячейке В5 – формула.

Рисунок 29. Расчет платежа по кредиту

Для расчета ежемесячного платежа по кредиту нужно:

    Активизировать ячейку В6;

    На вкладке Формулы нажать кнопку Вставить функцию . В категории выбрать Полный алфавитный перечень , а ниже найти функцию ПЛТ .

Рисунок 30. Вставка функции ПЛТ

В поле Ставка укажите ежемесячную ставку, т.е. В2/В4;

В поле Кпер – необходимо указать общее количество периодов, т.е. В5;

В поле Пс (Приведенная стоимость) – необходимо указать запрашиваемую сумму кредита;

Бс – баланс наличности , который нужно достичь после последней выплаты, в нашем случае это 0;

Тип – 0 – выплаты производятся в конце периода, 1 – выплаты производятся в начале периода.

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

Абсолютная и относительная адресация

Перейдите в книге на Лист 3 и назовите его Потребление воды . Введите данные показания счетчика, построив таблицу:

Рисунок 31. Пример таблицы

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

Потребление воды рассчитывается как разность между показаниями счетчика текущего месяца и предыдущего:

Активизируйте D9, введите формулу: =В9-В8 и нажмите Enter.

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

Таким же образом рассчитайте Потребление горячей воды .

Сумма к оплате за ХВ за январь рассчитывается как произведение количества потребленной воды на стоимость м 3 . Формула для нашего примера:

    Активизируйте ячейку F9;

    Введите формулу: =D9*E4 и нажмите Enter%

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

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

Рисунок 32. Необходимость применения абсолютной адресации

Убедитесь, что автозаполнение не сработало, разберемся почему:

Активизируйте ячейку F9, в строке формул должна отобразиться формула: =D9*Е4;

Активизируйте ячейку F10. Excel, применяя автозаполнение, изменил формулу и сейчас значение ячейки F10 рассчитайте как =D10*E5. То есть, все ячейки, которые используются в формуле при копировании формулы автозаполнением вниз, также сдвигаются вниз. В нашем случае движение вниз по столбцу D – нужно, т.к. за каждый месяц разное значение потребления воды, но движение по столбцу Е – не нужно, т.к. умножать нужно на Е4.

Решение:

    Вернитесь в ячейку F9, посмотрите в строку формул: =D9*E4.

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

    В строке формул установите курсор в формуле между Е и 4. А затем нажмите на клавиатуре клавишу F4, формула примет вид =D*$E$4. Знаки $ для Excel означают закрепление этой ячейки или абсолютная адресация, при копировании данной формулы точкой автозаполнения, эта ячейка менять не будет.

    Нажмите Enter, вернитесь в ячейку F9 и протяните вниз точку автозаполнения. Выделите ячейку F10 – обратите внимание на формулу.

Задание: Заполните столбец Сумма к оплате за ГВ с применением абсолютной адресации и столбец Итого к оплате – как сумму по столбцам F и G.

Сохраните файл в Вашей папке под именем «Фунции».

ЧАСТНЫЕ СЛУЧАИ

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

Программа (C#):

Public static int FactGen(int n) { int fact = new int; fact = 1; for (int i = 1; i < n + 1; i++) fact[i] = i * fact; return fact; } public static int PermsGenerator(int arr, int num, int fact) { int i, j, f, newind, newnum, newval, size = arr.Length; int result = new int; Array.Copy(arr, result, size); for (i = 0, newnum = num; i < size - 1; i++) { newind = newnum / (f = fact); newnum = newnum - newind * f; newval = result; for (j = i + newind; j > i; j--) result[j] = result; result[i] = newval; } return result; } public static int SumAbs(int arr) { int sum = 0, prev = arr; foreach (int value in arr) { sum += Math.Abs(value - prev); prev = value; } return sum; } public static int MaxArr(int arr, bool detprn) { int i, j, sum, smax = -1, size = arr.Length; int perm, result = new int, fact = FactGen(size), sorted = new int, empire = new int; Array.Copy(arr, sorted, size); Array.Sort(sorted); for (i = 0; i < fact; i++) { if ((sum = SumAbs(perm = PermsGenerator(sorted, i, fact))) > smax) { smax = sum; result = perm; } if (detprn) { Console.Write("\nПерестановка: "); foreach (int value in perm) Console.Write(value + " "); Console.Write(" Сумма: {0} Максимальная сумма: {1}", sum, smax); } } Console.Write("\nИсходная выборка: "); foreach (int value in arr) Console.Write(value + " "); Console.Write("\nОтсортированная выборка: "); foreach (int value in sorted) Console.Write(value + " "); Console.Write("\nЛучшая перестановка: "); foreach (int value in result) Console.Write(value + " "); Console.WriteLine("\nМаксимальная сумма: {0}", smax); empire = sorted; empire = sorted; empire = sorted; for (i = 2, j = 0; i < size - 1; i++, j = (size) - 1 + ((i + 1) & 1) - j) empire[i] = sorted[j]; Console.Write("Эвристический алгоритм: "); foreach (int value in empire) Console.Write(value + " "); Console.WriteLine("\nСумма: {0}", SumAbs(empire)); return result; } static void Main(string args) { bool binc; int i, j, n, nmax = 10; int arr; Random rand = new Random(); MaxArr(new int { 1, 2, 3, 4 }, false); MaxArr(new int { 1, 2, 3, 4, 5 }, false); for (n = 6; n < nmax + 1; n++) { arr = new int[n]; for (i = 0; i < n;) { arr[i] = rand.Next(1, 5 * n); binc = true; for (j = 0; j < i; j++) binc &= (arr[i] != arr[j]); if (binc) i++; } MaxArr(arr, false); } }

Результаты:

Исходная выборка: 1 2 3 4 Отсортированная выборка: 1 2 3 4 Лучшая перестановка: 2 4 1 3 Максимальная сумма: 7 Эвристический алгоритм: 2 4 1 3 Сумма: 7 Исходная выборка: 1 2 3 4 5 Отсортированная выборка: 1 2 3 4 5 Лучшая перестановка: 2 4 1 5 3 Максимальная сумма: 11 Эвристический алгоритм: 2 4 1 5 3 Сумма: 11 Исходная выборка: 26 10 21 4 27 5 Отсортированная выборка: 4 5 10 21 26 27 Лучшая перестановка: 10 26 4 27 5 21 Максимальная сумма: 99 Эвристический алгоритм: 10 26 4 27 5 21 Сумма: 99 Исходная выборка: 34 3 32 16 28 27 26 Отсортированная выборка: 3 16 26 27 28 32 34 Лучшая перестановка: 26 28 3 32 16 34 27 Максимальная сумма: 97 Эвристический алгоритм: 26 28 3 34 16 32 27 Сумма: 97 Исходная выборка: 27 3 34 38 18 29 31 39 Отсортированная выборка: 3 18 27 29 31 34 38 39 Лучшая перестановка: 29 34 3 38 18 39 27 31 Максимальная сумма: 128 Эвристический алгоритм: 29 34 3 39 18 38 27 31 Сумма: 128 Исходная выборка: 40 27 4 9 32 35 41 39 2 Отсортированная выборка: 2 4 9 27 32 35 39 40 41 Лучшая перестановка: 32 2 39 4 40 9 41 27 35 Максимальная сумма: 223 Эвристический алгоритм: 27 35 2 41 4 40 9 39 32 Сумма: 221 Исходная выборка: 41 35 45 27 34 33 18 24 16 25 Отсортированная выборка: 16 18 24 25 27 33 34 35 41 45 Лучшая перестановка: 27 34 16 35 18 41 24 45 25 33 Максимальная сумма: 150 Эвристический алгоритм: 27 34 16 45 18 41 24 35 25 33 Сумма: 150

Таким образом:

  1. Нашлась более удачная комбинация для исходного массива.
  2. Контрпример для эвристического алгоритма нашёлся не сразу.

ОБЩЕЕ РЕШЕНИЕ (10.02.2018)

Пусть
a = {a 0 = M 1 , a 1 = M 2 , …, a n-2 = M n-1 , a n-1 = M n } - исходная последовательность,
b = {b 0 , b 1 , …, b n-2 , b n-1 } -та же последовательность в порядке возрастания,
с = {c 0 , c 1 , …, c n-2 , c n-1 } -требуемая последовательность.

Рассмотрим по отдельности случаи чётного и нечётного n.

Случай n = 2k

S(a) = S ц (a) - |a n-1 - a 0 |, где
S ц a) = |a 0 - a 1 | + |a 1 - a 2 | + … + |a n-3 - a n-2 | + |a n-2 - a n-1 | + |a n-1 - a 0 |.

S ц (a) - это алгебраическая сумма, которая содержит каждый исходный элемент a i дважды, и её максимальное значение равно

S ц_max = 2∑ i = 0, …, k-1 (h i - b i), где h i = b i+k , i = 0…k-1.

Это значение достигается в двух вариантах перестановок:
1) c 2i ∈ h (все наибольшие элементы имеют чётные индексы);
2) c 2i + 1 ∈ h (все наибольшие элементы имеют нечётные индексы).

В то же время, минимум |a n-1 - a 0 | = b k - b k-1 достигается при размещении пары медианных элементов на краях последовательности c.

Максимум суммы S равен S max = 2∑ i = 0, …, k-2 (b i+k - b i) + b k-1 - b k , или

S max = 2∑ i = 0, …, k-2 (b n-1-i - b i) + b n-k - b k-1 ,

и достигается в тех случаях, когда последовательность с содержит наибольшие элементы в шахматном порядке, причём медианные элементы b k-1 и b k находятся на краях последовательности.
Количество таких перестановок при попарно различных a i составляет 2(k-1)! 2 .

Случай n = 2k+1

Аналогичное рассмотрение показывает, что максимум S равен

S max = 2∑ i=0…k-2 (b k+2+i - b k) + b k+1 - b k-1 + max (b k+1 - b k , b k - b k-1), или

S max = 2∑ i=0…k-2 (b n-1-i - b i) + b n-k - b k-1 + max (b k+1 - b k , b k - b k-1),

и достигается в тех случаях, когда элементы с индексами больше k идут в шахматном порядке, а на краях последовательности оказываются медианный и ближайший к нему элемент.
Количество таких перестановок при попарно различных a i не меньше, чем (k-1)!k! (если медиана отличается от ближайших по значению соседей на одинаковую величину, то перестановок вдвое больше).

ПРОГРАММА (C#):

Public static void T(string text, Stopwatch timer) { TimeSpan ts = timer.Elapsed; string elapsedTime = String.Format("{0:00}:{1:00}:{2:00}.{3:00}", ts.Hours, ts.Minutes, ts.Seconds, ts.Milliseconds / 10); Console.Write(text + elapsedTime); } public static int FactGen(int n) { int fact = new int; fact = 1; for (int i = 1; i < n + 1; i++) fact[i] = i * fact; return fact; } public static int PermsGenerator(int arr, int num, int fact) { int i, j, f, newind, newnum, newval, size = arr.Length; int result = new int; Array.Copy(arr, result, size); for (i = 0, newnum = num; i < size - 1; i++) { f = fact; newind = i; while (newnum >= f) { newind++; newnum -= f; } newval = result; for (j = newind; j > i; j--) result[j] = result; result[i] = newval; } return result; } public static int SumAbs(int arr) { int sum = 0, prev = arr; foreach (int value in arr) { sum += Math.Abs(value - prev); prev = value; } return sum; } public static int CalcOptQuant (int n) { int k = (n - 1) / 2, k2 = Math.Max(k-2, 0); int fact = FactGen(k + 2); return 2*fact[k] * ((n - k - k < 2) ? fact : fact[k]); } public static int CalcMaxSum(int brr) { int i, size = brr.Length, k = size / 2, sum = 0; for (i = 0; i < k - 1; i++) sum += brr - brr[i]; sum = 2 * sum + brr - brr; if (size - 2 * k > 0) sum += Math.Max(brr - brr[k], brr[k] - brr); return sum; } public static int MaxArr(int arr, bool detprn) { int i, j, sum, smax = -1, size = arr.Length; int perm, result = new int, fact = FactGen(size), sorted = new int, empire = new int; Stopwatch sw = new Stopwatch(); Console.WriteLine("\nИсходная выборка: "); foreach (int value in arr) Console.Write(value + " "); sw.Restart(); for (i = 0; i < fact; i++) { perm = PermsGenerator(arr, i, fact); sum = SumAbs(perm); if (sum > smax) { smax = sum; result = perm; } } if (detprn) Console.Write("\nЛучшие перестановки"); for (i = 0, j = 0; i < fact; i++) { perm = PermsGenerator(arr, i, fact); sum = SumAbs(perm); if (sum == smax) { j++; if (detprn) { Console.Write("\n#{0}: ", j); foreach (int value in perm) Console.Write(value + " "); } } } Array.Copy(arr, sorted, size); Array.Sort(sorted); Console.WriteLine("\nОтсортированная выборка: "); foreach (int value in sorted) Console.Write(value + " "); Console.Write("\nФакт Наибольшая сумма: {0} Лучших перестановок: {1}" + "\nРасчёт Наибольшая сумма: {2} Лучших перестановок, не менее: {3}", smax, j, CalcMaxSum(sorted), CalcOptQuant(size)); T("\nRuntime = ", sw); sw.Reset(); return result; } static void Main(string args) { bool binc; int i, j, n, nmax = 12; int arr = new int; Random rand = new Random(); MaxArr(new int { 0, 1, 2, 3, 4, 5 }, true); MaxArr(new int { 5, 1, 3, 5, 7, 9 }, true); MaxArr(new int { 0, 1, 2, 3, 4 }, true); MaxArr(new int { 0, 1, 2, 3 }, true); MaxArr(new int { 0, 1, 2 }, true); for (n = 3; n <= nmax; n++) { Array.Resize(ref arr, n); for (i = 0; i < n;) { arr[i] = rand.Next(10, 99); binc = true; for (j = 0; j < i; j++) binc &= (arr[i] != arr[j]); if (binc) i++; } MaxArr(arr, false); } }

РЕЗУЛЬТАТЫ:

Исходная выборка: 0 1 2 3 4 5 Лучшие перестановки #1: 2 4 0 5 1 3 #2: 2 4 1 5 0 3 #3: 2 5 0 4 1 3 #4: 2 5 1 4 0 3 #5: 3 0 4 1 5 2 #6: 3 0 5 1 4 2 #7: 3 1 4 0 5 2 #8: 3 1 5 0 4 2 Отсортированная выборка: 0 1 2 3 4 5 Факт Наибольшая сумма: 17 Лучших перестановок: 8 Расчёт Наибольшая сумма: 17 Лучших перестановок, не менее: 8 Runtime = 00:00:00.01 Исходная выборка: 5 1 3 5 7 9 Лучшие перестановки #1: 5 1 7 3 9 5 #2: 5 1 9 3 7 5 #3: 5 3 7 1 9 5 #4: 5 3 9 1 7 5 #5: 5 7 1 9 3 5 #6: 5 7 3 9 1 5 #7: 5 9 1 7 3 5 #8: 5 9 3 7 1 5 #9: 5 1 7 3 9 5 #10: 5 1 9 3 7 5 #11: 5 3 7 1 9 5 #12: 5 3 9 1 7 5 #13: 5 7 1 9 3 5 #14: 5 7 3 9 1 5 #15: 5 9 1 7 3 5 #16: 5 9 3 7 1 5 Отсортированная выборка: 1 3 5 5 7 9 Факт Наибольшая сумма: 24 Лучших перестановок: 16 Расчёт Наибольшая сумма: 24 Лучших перестановок, не менее: 8 Runtime = 00:00:00.01 Исходная выборка: 0 1 2 3 4 Лучшие перестановки #1: 1 3 0 4 2 #2: 1 4 0 3 2 #3: 2 0 4 1 3 #4: 2 1 4 0 3 #5: 2 3 0 4 1 #6: 2 4 0 3 1 #7: 3 0 4 1 2 #8: 3 1 4 0 2 Отсортированная выборка: 0 1 2 3 4 Факт Наибольшая сумма: 11 Лучших перестановок: 8 Расчёт Наибольшая сумма: 11 Лучших перестановок, не менее: 4 Runtime = 00:00:00.01 Исходная выборка: 0 1 2 3 Лучшие перестановки #1: 1 3 0 2 #2: 2 0 3 1 Отсортированная выборка: 0 1 2 3 Факт Наибольшая сумма: 7 Лучших перестановок: 2 Расчёт Наибольшая сумма: 7 Лучших перестановок, не менее: 2 Runtime = 00:00:00.00 Исходная выборка: 0 1 2 Лучшие перестановки #1: 0 2 1 #2: 1 0 2 #3: 1 2 0 #4: 2 0 1 Отсортированная выборка: 0 1 2 Факт Наибольшая сумма: 3 Лучших перестановок: 4 Расчёт Наибольшая сумма: 3 Лучших перестановок, не менее: 2 Runtime = 00:00:00.01 Исходная выборка: 25 51 87 Отсортированная выборка: 25 51 87 Факт Наибольшая сумма: 98 Лучших перестановок: 2 Расчёт Наибольшая сумма: 98 Лучших перестановок, не менее: 2 Runtime = 00:00:00.00 Исходная выборка: 78 10 34 64 Отсортированная выборка: 10 34 64 78 Факт Наибольшая сумма: 166 Лучших перестановок: 2 Расчёт Наибольшая сумма: 166 Лучших перестановок, не менее: 2 Runtime = 00:00:00.00 Исходная выборка: 23 26 93 16 45 Отсортированная выборка: 16 23 26 45 93 Факт Наибольшая сумма: 195 Лучших перестановок: 4 Расчёт Наибольшая сумма: 195 Лучших перестановок, не менее: 4 Runtime = 00:00:00.00 Исходная выборка: 85 12 11 13 90 88 Отсортированная выборка: 11 12 13 85 88 90 Факт Наибольшая сумма: 382 Лучших перестановок: 8 Расчёт Наибольшая сумма: 382 Лучших перестановок, не менее: 8 Runtime = 00:00:00.00 Исходная выборка: 82 43 28 55 29 39 18 Отсортированная выборка: 18 28 29 39 43 55 82 Факт Наибольшая сумма: 206 Лучших перестановок: 24 Расчёт Наибольшая сумма: 206 Лучших перестановок, не менее: 24 Runtime = 00:00:00.00 Исходная выборка: 64 20 43 89 47 94 52 71 Отсортированная выборка: 20 43 47 52 64 71 89 94 Факт Наибольшая сумма: 300 Лучших перестановок: 72 Расчёт Наибольшая сумма: 300 Лучших перестановок, не менее: 72 Runtime = 00:00:00.02 Исходная выборка: 45 53 81 17 76 97 26 50 51 Отсортированная выборка: 17 26 45 50 51 53 76 81 97 Факт Наибольшая сумма: 337 Лучших перестановок: 288 Расчёт Наибольшая сумма: 337 Лучших перестановок, не менее: 288 Runtime = 00:00:00.23 Исходная выборка: 55 51 36 12 82 63 89 58 14 22 Отсортированная выборка: 12 14 22 36 51 55 58 63 82 89 Факт Наибольшая сумма: 420 Лучших перестановок: 1152 Расчёт Наибольшая сумма: 420 Лучших перестановок, не менее: 1152 Runtime = 00:00:02.46 Исходная выборка: 96 95 67 49 65 69 53 78 35 55 94 Отсортированная выборка: 35 49 53 55 65 67 69 78 94 95 96 Факт Наибольшая сумма: 348 Лучших перестановок: 11520 Расчёт Наибольшая сумма: 348 Лучших перестановок, не менее: 5760 Runtime = 00:00:29.21 Исходная выборка: 50 43 39 64 59 18 81 16 44 12 15 77 Отсортированная выборка: 12 15 16 18 39 43 44 50 59 64 77 81 Факт Наибольшая сумма: 463 Лучших перестановок: 28800 Расчёт Наибольшая сумма: 463 Лучших перестановок, не менее: 28800 Runtime = 00:06:26.81

АНАЛИЗ РЕЗУЛЬТАТОВ

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

Нахождение максимального/ минимального значения - простая задача, но она несколько усложняется, если МАКС/ МИН нужно найти не среди всех значений диапазона, а только среди тех, которые удовлетворяют определенному условию.

Пусть имеется таблица с двумя столбцами: текстовым и числовым.

Для удобства понимания формул создадим два для каждого из столбцов: Текст (A 6: A 30 ) и Числа (B6:B30 ). (см. файл примера ).

Рассмотрим несколько задач:

А. Найдем максимальное значение среди тех чисел, которые соответствуют значению Текст1 (критерий введем в ячейку E6 ).
Т.е. будем искать максимальное значение не среди всех значений столбца Числовые значения , а только среди тех, у которых в той же строке в столбце А текстовое значение равно Текст1 . Напишем (не забудьте при вводе формулы нажать CTRL+SHIFT+ENTER ):
=НАИБОЛЬШИЙ(ЕСЛИ(A6:A30=E6;B6:B30;"");1)

или с Именованными диапазонами :

=НАИБОЛЬШИЙ(ЕСЛИ(Текст=E6;Числа;"");1)

Часть формулы Текст=E6 , вернет {ИСТИНА:ЛОЖЬ:ЛОЖЬ:ЛОЖЬ:ИСТИНА:ЛОЖЬ:ЛОЖЬ:ЛОЖЬ:ИСТИНА:ЛОЖЬ:ЛОЖЬ:ЛОЖЬ: ИСТИНА:ЛОЖЬ:ЛОЖЬ:ЛОЖЬ:ИСТИНА:ЛОЖЬ:ЛОЖЬ:ЛОЖЬ:ИСТИНА:ЛОЖЬ:ЛОЖЬ:ЛОЖЬ:ЛОЖЬ} (для просмотра результата выделите эту часть формулы в и нажмите клавишу ). ИСТИНА соответствует строкам, у которых в столбце Текстовые значения содержится значение Текст1 .

Часть формулы ЕСЛИ(Текст=E6;Числа;"") , вернет {10:"":"":"":-66:"":"":"": -37:"":"":"":-5:"": "":"":4:"":"":"":8:"":"":"":""}, где вместо ИСТИНА подставлено значение из числового столбца, а вместо ЛОЖЬ - значение . Вместо "" можно было бы использовать любой текстовый символ (букву) или вообще опустить (в этом случае массив будет выглядеть так {10:ЛОЖЬ:ЛОЖЬ:ЛОЖЬ:-66: ЛОЖЬ:ЛОЖЬ:ЛОЖЬ:-37:ЛОЖЬ: ЛОЖЬ: ЛОЖЬ:-5:ЛОЖЬ:ЛОЖЬ:ЛОЖЬ:4: ЛОЖЬ:ЛОЖЬ:ЛОЖЬ:8: ЛОЖЬ:ЛОЖЬ:ЛОЖЬ:ЛОЖЬ}).

Функция НАИБОЛЬШИЙ() со вторым параметром =1 использована вместо функции МАКС() , т.к. в случае, если критерию не удовлетворяет ни одна строка, то формула =МАКС({"":"":"":"":"":"":"": "":"":"":"": "":"":"":"":"":"":"": "":"":"":"":"":"":""}) вернет 0!, что может ввести в заблуждение. Функция НАИБОЛЬШИЙ() в этом случае вернет ошибку #ЧИСЛО!

Б. Найдем максимальное значение только среди чисел принадлежащих определенному интервалу значений, например от 5 до 50. Границы можно ввести в ячейки I 14 и J14 . Решением является :
=НАИБОЛЬШИЙ(ЕСЛИ((Числа>=I14)*(Числа<=J14);Числа);1)

В. Найдем с помощью формулы массива минимальное значение среди тех, которые соответствуют значению Текст3 :
=МИН(ЕСЛИ((Текст=E7);Числа;"");1)

Т.е. если в столбце А значение = Текст3 , то учитывается значение в столбце B , если значение <> Текст3 , то учитывается максимальное значение+1, т.е. заведомо НЕ минимальное. Далее функция МИН() возвращает минимальное значение из полученного массива, причем понятно, что ни одно из значений, где <> Текст3, не исказит результат (см. задачу А).

Другое решение с помощью формулы ДМИН() , которая не является формулой массива .
=ДМИН(A5:B30;B5;I8:I9)

Г. Найдем минимальное значение, среди тех, которые больше :
=ДМИН(A5:B30;B5;I10:I11)
где в диапазоне I10:I11 содержится критерий =B6>СРЗНАЧ(Числа)

Д. Найдем максимальное значение по модулю. Из рисунка выше видно, что это -99. Для этого используйте формулу массива :

ЕСЛИ(МАКС(ABS(Числа))=МАКС(Числа);МАКС(Числа);-МАКС(ABS(Числа)))

Е. Найдем минимальное положительное число:

=НАИМЕНЬШИЙ(Числа;СЧЁТЕСЛИ(Числа;"<=0")+1) - обычная формула!

=НАИМЕНЬШИЙ(ЕСЛИ(Числа>0;Числа);1) - формула массива .

СОВЕТ:

Все вышеуказанные задачи можно решить без использования и функции ДМИН() . Для этого потребуется создать дополнительный столбец, в котором будут выведены только те значения, которые удовлетворяют критериям. Затем, среди отобранных значений с помощью функций МАКС() или МИН() , определить соответственно максимальное или минимальное значение (см. файл примера Лист без формул массива).

Множественные условия

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

В этом случае придется записать более сложную формулу массива :

=НАИМЕНЬШИЙ(ЕСЛИ(($A$6:$A$16=E6)*($B$6:$B$16=F6);$C$6:$C$16;"");1)

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

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

срзнач(диапазон1; диапазон2;...)

В текущую ячейку возвращается среднее значение для чисел указанного диапазона.

Пример 5. В диапазоне ячеек A1:A5 из примера 1 определить среднее значение.

Результат должен быть получен в ячейке А7. Пошаговыми действиями Мастера функций в ячейку А7 следует ввести формулу:=срзнач(А1:А5).

Определение максимального значения

макс(диапазон1; диапазон2;...) - группа статистических функций.

В текущую ячейку возвращается максимальное число из данного диапазона.

Пример 6. В диапазоне ячеек A1:A5 из примера 1 определить максимальное значение.

Результат должен быть получен в ячейке А8.

Пошаговыми действиями Мастера функций в ячейку А8 следует ввести формулу:

=макс(А1:А5).

В ячейке А8 получится число 2000.

Определение минимального значения

мин(диапазон1; диапазон2;...) - группа статистических функций.

В текущую ячейку возвращается минимальное число из данного диапазона.

Пример 7. В диапазоне ячеек В1:В5 из примера 2 определить минимальное значение.

Результат должен быть получен в ячейке В8.

Пошаговыми действиями Мастера функций в ячейку В8 следует ввести формулу:

=мин(В1:В5).

В ячейке В8 получится число 800.

Определение ранга числа

ранг(адрес ячейки; диапазон) - группа статистических функций.

В текущую ячейку возвращается величина, соответствующая положению (рангу) числа, заданного адресом ячейки, в указанном диапазоне.

Пример 8. В ячейки D1,D2,D3,D4,D5 скопируйте информацию из соответствующих ячеек столбца А. Для каждой ячейки из диапазона D1:D5 определить ранг числа.

Результат должен быть получен в ячейках E1:E5. Функция ранга вводится сначала в ячейку E1, затем копируется для всех ячеек до E5.

Пошаговыми действиями Мастера функций в ячейку E1 вводим формулу:

=ранг(D 1; $ D $1:$ D $5) - знак $ устанавливает абсолютные адреса, чтобы диапазон ячеек не менялся при копировании.

После копирования формулы вниз для всех ячеек до E5 получим ранги для каждого значения диапазона. Ранг числа с максимальным значением в диапазоне D1:D5 будет равен 1, а с минимальным –5.

Функции прогнозирования

тенденция(известные значения_х; известные значения_у; новое значение_у) - группа статистических функций

В текущую ячейку возвращается новое значение_Х, рассчитанное на основании известных значений. Выполняется линейная аппроксимация.

рост(известные значения_х; известные значения_у; новое значение_у) - группа статистических функций.

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

Функции для работы с матрицами

мобр(массив) - группа математических функций.

Возвращает в выделенный диапазон обратную матрицу для матрицы, хранящейся в массиве.

Массив - это числовой массив с равным количеством строк и столбцов. Массив может быть задан как диапазон ячеек, например A1:C3 или как имя диапазона или массива. Если какая-либо из ячеек в массиве пуста или содержит текст, а также если массив имеет неравное число строк и столбцов, то функция МОБР возвращает значение ошибки #ЗНАЧ!.

мопр(массив) - группа математических функций.

Возвращает определитель матрицы (матрица хранится в массиве).

Определитель матрицы - это число, вычисляемое на основе значений элементов массива. Массив - это числовой массив с равным количеством строк и столбцов. Если какая-либо ячейка в массиве пуста или содержит текст, то функция МОПРЕД возвращает значение ошибки #ЗНАЧ!. МОПРЕД также возвращает значение ошибки #ЗНАЧ!, если массив имеет неравное количество строк и столбцов.

1)10 недавно использовавшихся,2)Полный алф.перечень,3)Финансовые,4)Дата и время,5)Математические,6)Статист,7)Логические,8)Текстовые,9)работа с базой данных,10)проверка значений