Как в форме найти максимальную цену

Получить максимальную цену и виды цены этой максимальной цены

Я
   Maniac

10.08.19 — 19:59

Ребя после моря) Настроение не сильно рабочее.

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

МАКСИМУМ(ЦеныНоменклатуры.Цена) — тут все гуд.

А Вид цены если запрашиваю то уже все равно все цены выгребаются.

   Maniac

1 — 10.08.19 — 20:00

Короче как к максимальной цене получить вид цены так чтобы она не стала группировкой. иначе все цены .

Нужна всего 1 запись.

   МихаилМ

2 — 10.08.19 — 20:06

   PuhUfa

3 — 10.08.19 — 20:10

(0) а если 2 вида цены с максимальной ценой?

   Garykom

4 — 10.08.19 — 20:10

ВЫБРАТЬ ПЕРВЫЕ 1 а перед этим отсортировать по убыванию выбранной цены

   Maniac

5 — 10.08.19 — 20:11

Это не в тему.

Как я писал выше есть динамический список номенклатуры. к нему левым соединением цены.

Максимальную получить ерунда. но нужно еще вид этой максимальной цены.

Если строку с видом цены она становится группировокой. соответственно записей становится много.

   Maniac

6 — 10.08.19 — 20:11

(3) пофиг. любой из них. такого не будет

   Maniac

7 — 10.08.19 — 20:12

(4) выбрать первые 1 это если ты пишешь запрос штучный. ЧИТАЙТЕ что я пишу. это динамический список номенклатуры с левым соединением цен.

   Garykom

8 — 10.08.19 — 20:12

(7) Даже запросы не научился писать за столько лет?

   PuhUfa

9 — 10.08.19 — 20:15

(6) ну сделай соединение по самой цене

   Garykom

10 — 10.08.19 — 20:17

(9) Если для одной номенклатуры две одинаковые максимальные цены разных видов ?

   PuhUfa

11 — 10.08.19 — 20:18

(10) тогда смотри (6)

   Maniac

12 — 10.08.19 — 20:19

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

   МаленькийВопросик

13 — 10.08.19 — 20:21

если я тебя правильно понял, то вот как-то так?

ВЫБРАТЬ

    Номенклатура.Ссылка КАК НоменклатураСсылка1

ПОМЕСТИТЬ ВТ_ГруппаНоменклатуры

ИЗ

    Справочник.Номенклатура КАК Номенклатура

ГДЕ

    Номенклатура.ЭтоГруппа = ЛОЖЬ

    И Номенклатура.ПометкаУдаления = ЛОЖЬ

    И Номенклатура.Родитель В ИЕРАРХИИ(&Родитель)

ИНДЕКСИРОВАТЬ ПО

    НоменклатураСсылка1

;

////////////////////////////////////////////////////////////////////////////////

ВЫБРАТЬ

    МАКСИМУМ(ЦеныНоменклатуры.Цена) КАК Цена,

    ЦеныНоменклатуры.Номенклатура КАК Номенклатура,

    ЦеныНоменклатуры.ТипЦен КАК ТипЦен

ИЗ

    ВТ_ГруппаНоменклатуры КАК ВТ_ГруппаНоменклатуры

        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры

        ПО ВТ_ГруппаНоменклатуры.НоменклатураСсылка1 = ЦеныНоменклатуры.Номенклатура

СГРУППИРОВАТЬ ПО

    ЦеныНоменклатуры.Номенклатура,

    ЦеныНоменклатуры.ТипЦен

ИТОГИ ПО

    Номенклатура,

    ТипЦен

;

////////////////////////////////////////////////////////////////////////////////

УНИЧТОЖИТЬ ВТ_ГруппаНоменклатуры

   МаленькийВопросик

14 — 10.08.19 — 20:26

вот так, наверное, ближе будет к твоим хотелкам

ВЫБРАТЬ

    Номенклатура.Ссылка КАК НоменклатураСсылка1

ПОМЕСТИТЬ ВТ_ГруппаНоменклатуры

ИЗ

    Справочник.Номенклатура КАК Номенклатура

ГДЕ

    Номенклатура.ЭтоГруппа = ЛОЖЬ

    И Номенклатура.ПометкаУдаления = ЛОЖЬ

    И Номенклатура.Родитель В ИЕРАРХИИ(&Родитель)

ИНДЕКСИРОВАТЬ ПО

    НоменклатураСсылка1

;

////////////////////////////////////////////////////////////////////////////////

ВЫБРАТЬ

    МАКСИМУМ(ЦеныНоменклатуры.Цена) КАК Цена,

    ЦеныНоменклатуры.Номенклатура КАК Номенклатура,

    ЦеныНоменклатуры.ТипЦен КАК ТипЦен

ПОМЕСТИТЬ ВТ_СТипамиЦен

ИЗ

    ВТ_ГруппаНоменклатуры КАК ВТ_ГруппаНоменклатуры

        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры

        ПО ВТ_ГруппаНоменклатуры.НоменклатураСсылка1 = ЦеныНоменклатуры.Номенклатура

СГРУППИРОВАТЬ ПО

    ЦеныНоменклатуры.Номенклатура,

    ЦеныНоменклатуры.ТипЦен

ИНДЕКСИРОВАТЬ ПО

    Номенклатура,

    ТипЦен

;

////////////////////////////////////////////////////////////////////////////////

УНИЧТОЖИТЬ ВТ_ГруппаНоменклатуры

;

////////////////////////////////////////////////////////////////////////////////

ВЫБРАТЬ

    МАКСИМУМ(ВТ_СТипамиЦен.Цена) КАК Цена,

    ВТ_СТипамиЦен.Номенклатура

ИЗ

    ВТ_СТипамиЦен КАК ВТ_СТипамиЦен

СГРУППИРОВАТЬ ПО

    ВТ_СТипамиЦен.Номенклатура

   Maniac

15 — 10.08.19 — 20:27

Вы видимо не читаете. Динамический список…..

   Maniac

16 — 10.08.19 — 20:27

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

   Maniac

17 — 10.08.19 — 20:29

те нужна какая то агрегатная функция на вид цены или выбор. хз что.

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

   МаленькийВопросик

18 — 10.08.19 — 20:33

(17) это простейший запрос «получающий максимальную цену по всем типам цен» — дальше крути сам

   МаленькийВопросик

19 — 10.08.19 — 20:33

одну запись!

   МаленькийВопросик

20 — 10.08.19 — 20:36

если ты делал «срезом последних» — то регистры сведений устроены так, что на каждое из условий измерений — ты получаешь срез последних — поэтому у тебя вываливается куча всего в запросе!

   Maniac

21 — 10.08.19 — 20:36

(18) ….. все короче иди отдыхать. вы не помощники сегодня.

   Garykom

22 — 10.08.19 — 20:37

(15) Динамический список это такая хрень куда данные попадают запросом

   Maniac

23 — 10.08.19 — 20:38

(20) если ты ставишь максимум для получения 1 записи то все измерения урезаются. их нет.

   МаленькийВопросик

24 — 10.08.19 — 20:39

(23) тебе запрос написали — смотри дальше сам!

   Maniac

25 — 10.08.19 — 20:41

(24) фигню написали не в тему вообще

   Maniac

26 — 10.08.19 — 20:42

ВЫБРАТЬ

    МАКСИМУМ(ЦеныНоменклатуры.Цена) КАК Цена,

    ЦеныНоменклатуры.Номенклатура КАК Номенклатура,

    ЦеныНоменклатуры.ТипЦен КАК ТипЦен

вот это выгребет ВСЕ ЦЕНЫ А НЕ ОДНУ максимальную

   Maniac

27 — 10.08.19 — 20:43

у тебя две группировки. значит будут получены все цены и максимальная В ПРЕДЕЛАХ ВИДА ЦЕНЫ.

а я уже час пишу что нужно получить ОДНУ МАКИСМАЛЬНУЮ из всех записей регистра по каждой номенклатуре НО отобразить вид цены к которому эта максимальная принадлежит.

   Maniac

28 — 10.08.19 — 20:44

если не понимаете то лучше вообще ничего не пишите, отдыхайте.

   Garykom

29 — 10.08.19 — 20:47

Это ты не понимаешь.

Сделай сначала табличку

Номенклатура|Макс(Цена)

Затем соедини ее с табличкой

Номенклатура|ТипЦены|Цена

По полям Номенклатура и Цена

   Maniac

30 — 10.08.19 — 20:50

(29) НЕ ПОЛУЧИТСЯ. потому что это ДИНАМИЧЕСКИЙ СПИСОК. он ругается если несколько записей с номенклатурой в любом соединении.

Так как там стоит ссылка обязательным элементом. любое попадание нескольких записей номенклатуры сразу выдает ошибку списка.

   Maniac

31 — 10.08.19 — 20:53

(29) Все да получилось. все верно. два запроса правда к регистру цен. но сработало. пока что не ругнулось и вроде бы как верно показывает.

Буду тестировать

   МаленькийВопросик

32 — 10.08.19 — 20:55

ВЫБРАТЬ

    Номенклатура.Ссылка КАК НоменклатураСсылка1

ПОМЕСТИТЬ ВТ_ГруппаНоменклатуры

ИЗ

    Справочник.Номенклатура КАК Номенклатура

ГДЕ

    Номенклатура.ЭтоГруппа = ЛОЖЬ

    И Номенклатура.ПометкаУдаления = ЛОЖЬ

    И Номенклатура.Родитель В ИЕРАРХИИ(&Родитель)

ИНДЕКСИРОВАТЬ ПО

    НоменклатураСсылка1

;

////////////////////////////////////////////////////////////////////////////////

ВЫБРАТЬ

    МАКСИМУМ(ЦеныНоменклатуры.Цена) КАК Цена,

    ЦеныНоменклатуры.Номенклатура КАК Номенклатура,

    ЦеныНоменклатуры.ТипЦен КАК ТипЦен

ПОМЕСТИТЬ ВТ_СТипамиЦен

ИЗ

    ВТ_ГруппаНоменклатуры КАК ВТ_ГруппаНоменклатуры

        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры

        ПО ВТ_ГруппаНоменклатуры.НоменклатураСсылка1 = ЦеныНоменклатуры.Номенклатура

СГРУППИРОВАТЬ ПО

    ЦеныНоменклатуры.Номенклатура,

    ЦеныНоменклатуры.ТипЦен

ИНДЕКСИРОВАТЬ ПО

    Номенклатура,

    ТипЦен

;

////////////////////////////////////////////////////////////////////////////////

УНИЧТОЖИТЬ ВТ_ГруппаНоменклатуры

;

////////////////////////////////////////////////////////////////////////////////

ВЫБРАТЬ

    МАКСИМУМ(ВТ_СТипамиЦен.Цена) КАК Цена,

    ВТ_СТипамиЦен.Номенклатура КАК Номенклатура

ПОМЕСТИТЬ ВТ_МаксЦены

ИЗ

    ВТ_СТипамиЦен КАК ВТ_СТипамиЦен

СГРУППИРОВАТЬ ПО

    ВТ_СТипамиЦен.Номенклатура

;

////////////////////////////////////////////////////////////////////////////////

ВЫБРАТЬ

    ВТ_МаксЦены.Цена,

    ВТ_МаксЦены.Номенклатура,

    МАКСИМУМ(ЦеныНоменклатуры.ТипЦен) КАК ТипЦен

ИЗ

    ВТ_МаксЦены КАК ВТ_МаксЦены

        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры

        ПО ВТ_МаксЦены.Цена = ЦеныНоменклатуры.Цена

            И ВТ_МаксЦены.Номенклатура = ЦеныНоменклатуры.Номенклатура

СГРУППИРОВАТЬ ПО

    ВТ_МаксЦены.Цена,

    ВТ_МаксЦены.Номенклатура

   МаленькийВопросик

33 — 10.08.19 — 20:57

(29) ты забыл добавить ему МАКСИМУМ по типу цены, иначе у него задвоятся строки если есть 2 одинаковые цены на типы цен.

   Maniac

34 — 10.08.19 — 21:02

все уже. сработало. как нужно.

ВЫБРАТЬ

    СправочникНоменклатура.Ссылка КАК Ссылка,

    СправочникНоменклатура.Код КАК Код,

    СправочникНоменклатура.Артикул КАК Артикул,

    СправочникНоменклатура.Наименование КАК Наименование,

    СправочникНоменклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения,

    СправочникНоменклатура.Производитель КАК Производитель,

    СправочникНоменклатура.Родитель КАК Родитель,

    ЕСТЬNULL(ЦеныНоменклатуры.Цена * КурсВалютыВидЦен.Курс * КурсВалютыДокумента.Кратность / (КурсВалютыДокумента.Курс * КурсВалютыВидЦен.Кратность), 0) КАК Цена,

    ЦеныНоменклатуры2.ВидЦен КАК ВидЦен

ИЗ

    Справочник.Номенклатура КАК СправочникНоменклатура

        ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ

            ЦеныНоменклатуры.Номенклатура КАК Номенклатура,

            МИНИМУМ(ЦеныНоменклатуры.ВидЦен) КАК ВидЦен,

            МАКСИМУМ(ЦеныНоменклатуры.Цена) КАК Цена

        ИЗ

            РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, {(ВидЦен = &ВидЦеныНоменклатуры)}) КАК ЦеныНоменклатуры

        
        СГРУППИРОВАТЬ ПО

            ЦеныНоменклатуры.Номенклатура) КАК ЦеныНоменклатуры

        ПО (ЦеныНоменклатуры.Номенклатура = СправочникНоменклатура.Ссылка)

        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, {(ВидЦен = &ВидЦеныНоменклатуры)}) КАК ЦеныНоменклатуры2

        ПО (ЦеныНоменклатуры2.Номенклатура = ЦеныНоменклатуры.Номенклатура)

            И (ЦеныНоменклатуры2.Цена = ЦеныНоменклатуры.Цена)

        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют.СрезПоследних(, ) КАК КурсВалютыВидЦен

        ПО (КурсВалютыВидЦен.Валюта = ЦеныНоменклатуры.ВидЦен.ВалютаЦены),

    РегистрСведений.КурсыВалют.СрезПоследних(, {(Валюта = &Валюта)}) КАК КурсВалютыДокумента

ГДЕ

    СправочникНоменклатура.ЭтоГруппа = ЛОЖЬ

   Maniac

35 — 10.08.19 — 21:03

опс немного там криво и лишнее есть. уберу уже у себя

   Maniac

36 — 10.08.19 — 21:04

ВЫБРАТЬ

    СправочникНоменклатура.Ссылка КАК Ссылка,

    СправочникНоменклатура.Код КАК Код,

    СправочникНоменклатура.Артикул КАК Артикул,

    СправочникНоменклатура.Наименование КАК Наименование,

    СправочникНоменклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения,

    СправочникНоменклатура.Производитель КАК Производитель,

    СправочникНоменклатура.Родитель КАК Родитель,

    ЕСТЬNULL(ЦеныНоменклатуры.Цена * КурсВалютыВидЦен.Курс * КурсВалютыДокумента.Кратность / (КурсВалютыДокумента.Курс * КурсВалютыВидЦен.Кратность), 0) КАК Цена,

    ЦеныНоменклатуры2.ВидЦен КАК ВидЦен

ИЗ

    Справочник.Номенклатура КАК СправочникНоменклатура

        ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ

            ЦеныНоменклатуры.Номенклатура КАК Номенклатура,

            МАКСИМУМ(ЦеныНоменклатуры.Цена) КАК Цена

        ИЗ

            РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, {(ВидЦен = &ВидЦеныНоменклатуры)}) КАК ЦеныНоменклатуры

        
        СГРУППИРОВАТЬ ПО

            ЦеныНоменклатуры.Номенклатура) КАК ЦеныНоменклатуры

        ПО (ЦеныНоменклатуры.Номенклатура = СправочникНоменклатура.Ссылка)

        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, {(ВидЦен = &ВидЦеныНоменклатуры)}) КАК ЦеныНоменклатуры2

        ПО (ЦеныНоменклатуры2.Номенклатура = ЦеныНоменклатуры.Номенклатура)

            И (ЦеныНоменклатуры2.Цена = ЦеныНоменклатуры.Цена)

        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют.СрезПоследних(, ) КАК КурсВалютыВидЦен

        ПО (КурсВалютыВидЦен.Валюта = ЦеныНоменклатуры2.ВидЦен.ВалютаЦены),

    РегистрСведений.КурсыВалют.СрезПоследних(, {(Валюта = &Валюта)}) КАК КурсВалютыДокумента

ГДЕ

    СправочникНоменклатура.ЭтоГруппа = ЛОЖЬ

   Maniac

37 — 10.08.19 — 21:05

как правильно сработает будет видно у клиента на базе.

   МаленькийВопросик

38 — 10.08.19 — 21:14

твой запрос не будет отражать корректную информацию —  если ты используешь срез последних — используй Дату, во-первых, иначе он возьмет самый последний срез хоть от 2100 года — если кто-то поставит туда цену….

во-вторых — что за конфигурация — РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, ВидЦен — ???????????????

  

Maniac

39 — 10.08.19 — 21:17

(38) нормально все. УНФ

646 / 99 / 11

Регистрация: 08.06.2015

Сообщений: 1,563

1

Как получить запросом максимальную цену

19.12.2015, 22:22. Показов 4723. Ответов 20


Студворк — интернет-сервис помощи студентам

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



0



8749 / 5597 / 574

Регистрация: 27.03.2013

Сообщений: 19,035

19.12.2015, 22:29

2

Цитата
Сообщение от alexpro1979
Посмотреть сообщение

…Как запросом при получить…

А у вас точно это воистину БД Access, а то у меня чёй та даже ни чё не открылось.



1



Эксперт MS Access

2833 / 1375 / 215

Регистрация: 13.05.2011

Сообщений: 4,213

19.12.2015, 22:34

3

alexpro1979, У Вас там полно полей. Опишите где находятся ваши поля

Цитата
Сообщение от alexpro1979
Посмотреть сообщение

цену закупки материала

и

Цитата
Сообщение от alexpro1979
Посмотреть сообщение

месяц в каком покупался материал

. Понять сразу трудно. Разбираюсь.

И ОПЯТЬ ЖЕ НЕТ СВЯЗЕЙ. ВООБЩЕ НИ ЧЕГО НЕ ПОНЯТНО: ОТ КУДА, ЧТО И КУДА.



1



mobile

Эксперт MS Access

26783 / 14462 / 3192

Регистрация: 28.04.2012

Сообщений: 15,782

19.12.2015, 22:57

4

alexpro1979, вариант с перекрестным запросом

SQL
1
2
3
4
5
transform MAX(CENA)
SELECT nm 
FROM МатСтар
GROUP BY nm
pivot mes

Добавлено через 14 минут
Вариант с обычным линейным запросом

SQL
1
2
3
4
SELECT  МатСтар.nm, mx AS MaxCena, МатСтар.mes
FROM МатСтар INNER JOIN (SELECT nm, MAX(CENA) AS mx FROM МатСтар GROUP BY nm) t
ON МатСтар.Cena=t.mx AND МатСтар.nm=t.nm
ORDER BY МатСтар.nm



1



alexpro1979

646 / 99 / 11

Регистрация: 08.06.2015

Сообщений: 1,563

20.12.2015, 00:20

 [ТС]

5

поле цена, группировка по nm, по каждому nm нужно получить всего одну запись. Например если покупали по 10,00 201201 и по 5,00 201403. Нужно показать цену последней закупки (максимальную в месяце, ведь могли на протяжении месяца купить один и тот же материал по разным ценам) и месяц закупки

Добавлено через 4 минуты

SQL
1
2
3
SELECT МатСтар.new_nm, MAX(МатСтар.CENA) AS [Max-CENA], MAX(МатСтар.mes) AS [Max-mes]
FROM МатСтар
GROUP BY МатСтар.new_nm;

Так верно ?



0



mobile

Эксперт MS Access

26783 / 14462 / 3192

Регистрация: 28.04.2012

Сообщений: 15,782

20.12.2015, 00:21

6

Цитата
Сообщение от alexpro1979
Посмотреть сообщение

по каждому nm нужно получить всего одну запись

С этим справится DISTINCT

SQL
1
2
3
4
SELECT DISTINCT МатСтар.nm, mx AS MaxCena, МатСтар.mes
FROM МатСтар INNER JOIN (SELECT nm, MAX(CENA) AS mx FROM МатСтар GROUP BY nm) t
ON МатСтар.Cena=t.mx AND МатСтар.nm=t.nm
ORDER BY МатСтар.nm



1



646 / 99 / 11

Регистрация: 08.06.2015

Сообщений: 1,563

20.12.2015, 00:30

 [ТС]

7

Мой вариант вроде правильно работает? Или так будут ошибки?

Добавлено через 1 минуту
простите перепутал поле new_nm



0



Эксперт MS Access

26783 / 14462 / 3192

Регистрация: 28.04.2012

Сообщений: 15,782

20.12.2015, 00:35

8

Лучший ответ Сообщение было отмечено alexpro1979 как решение

Решение

Цитата
Сообщение от alexpro1979
Посмотреть сообщение

Мой вариант вроде правильно работает? Или так будут ошибки?

Будут ошибки. Выражение MAX(МатСтар.mes) AS [Max-mes] выдаст максимальный месяц для каждого МатСтар.new_nm. А у Вас же другая задача — выдать месяц в котором цена была максимальной. Впрочем, если цена только растет, причем постоянно, то Ваш запрос тоже даст верные значения. Но только в этом случае.

Добавлено через 57 секунд

Цитата
Сообщение от alexpro1979
Посмотреть сообщение

перепутал поле new_nm

Ну, я думаю Вам нетрудно будет в запросе изменить имя поля



1



alexpro1979

646 / 99 / 11

Регистрация: 08.06.2015

Сообщений: 1,563

20.12.2015, 00:39

 [ТС]

9

Еще одно уточнение, нужно выбрать записи при условии, что кол-во прихода больше 0

SQL
1
2
3
4
SELECT МатСтар.new_nm, MAX(МатСтар.CENA) AS [Max-CENA], MAX(МатСтар.mes) AS [Max-mes]
FROM МатСтар
GROUP BY МатСтар.new_nm, МатСтар.KOL_PRIH
HAVING (((МатСтар.KOL_PRIH)>0));

Подскажите как быть в таком случае?



0



mobile

Эксперт MS Access

26783 / 14462 / 3192

Регистрация: 28.04.2012

Сообщений: 15,782

20.12.2015, 00:43

10

Лучший ответ Сообщение было отмечено alexpro1979 как решение

Решение

Цитата
Сообщение от alexpro1979
Посмотреть сообщение

нужно выбрать записи при условии, что кол-во прихода больше 0

SQL
1
2
3
4
SELECT DISTINCT МатСтар.nm, mx AS MaxCena, МатСтар.mes
FROM МатСтар INNER JOIN (SELECT nm, MAX(CENA) AS mx FROM МатСтар WHERE nz(KOL_PRIH,0)>0 GROUP BY nm) t
ON МатСтар.Cena=t.mx AND МатСтар.nm=t.nm
ORDER BY МатСтар.nm



2



alexpro1979

646 / 99 / 11

Регистрация: 08.06.2015

Сообщений: 1,563

20.12.2015, 00:55

 [ТС]

11

Вложенные запросы мне пока не доходят(( Спасибо

Добавлено через 8 минут
Запрос показывает некорректно информацию, по new_nm 3318 было много закупок при этом максимальная цена 6,50 в 201508. Запрос выдает 3 записи с разными месяцами.

Добавлено через 32 секунды

SQL
1
2
3
SELECT DISTINCT МатСтар.new_nm, mx AS MaxCena, МатСтар.mes
FROM МатСтар INNER JOIN (SELECT new_nm, MAX(CENA) AS mx FROM МатСтар WHERE nz(KOL_PRIH,0)>0 GROUP BY new_nm)  AS t ON (МатСтар.new_nm=t.new_nm) AND (МатСтар.Cena=t.mx)
ORDER BY МатСтар.new_nm;



0



mobile

Эксперт MS Access

26783 / 14462 / 3192

Регистрация: 28.04.2012

Сообщений: 15,782

20.12.2015, 01:21

12

Цитата
Сообщение от alexpro1979
Посмотреть сообщение

Запрос показывает некорректно информацию, по new_nm 3318 было много закупок при этом максимальная цена 6,50 в 201508. Запрос выдает 3 записи с разными месяцами.

Запрос правильно показывает. Максимальная цена 6,50 была в 3 месяцах: 201510, 201508, 201507. Причем в 201510 даже дважды. Легко проверить запросом

SQL
1
2
3
4
SELECT МатСтар.new_nm, МатСтар.CENA, МатСтар.mes
FROM МатСтар
WHERE МатСтар.new_nm="3318"
ORDER BY МатСтар.CENA DESC



1



alexpro1979

646 / 99 / 11

Регистрация: 08.06.2015

Сообщений: 1,563

20.12.2015, 09:57

 [ТС]

13

SQL
1
2
3
4
SELECT МатСтар.new_nm, МатСтар.CENA, МатСтар.mes
FROM МатСтар
WHERE (((МатСтар.new_nm)="3318") AND ((МатСтар.KOL_PRIH)>0))
ORDER BY МатСтар.CENA DESC;

Запрос показывает что в 201510 материал вобще не покупался.

Добавлено через 6 минут

SQL
1
2
3
4
SELECT DISTINCT МатСтар.new_nm, t.mx AS MaxCena, МатСтар.mes
FROM МатСтар INNER JOIN (SELECT new_nm, MAX(CENA) AS mx FROM МатСтар WHERE nz(KOL_PRIH,0)>0 GROUP BY new_nm)  AS t ON (МатСтар.new_nm = t.new_nm) AND (МатСтар.Cena = t.mx)
WHERE (((Nz([МатСтар]![KOL_PRIH],0))>0))
ORDER BY МатСтар.new_nm;

Добавлено через 2 минуты
Чтобы получить информацию о последнем месяце закупки с этого запроса нужно создать еще запрос

SQL
1
2
3
SELECT [Последняя цена].new_nm, [Последняя цена].MaxCena, MAX([Последняя цена].mes) AS [Max-mes]
FROM [Последняя цена]
GROUP BY [Последняя цена].new_nm, [Последняя цена].MaxCena;

Верно?

Добавлено через 5 минут
Мне нужно получить месяц последней закупки и максимальную цену закупки этого месяца

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



0



mobile

Эксперт MS Access

26783 / 14462 / 3192

Регистрация: 28.04.2012

Сообщений: 15,782

20.12.2015, 10:52

14

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

SQL
1
2
3
4
5
6
7
8
SELECT DISTINCT МатСтар.new_nm, tmes.mx AS Max_Mes, tcen.mc
FROM МатСтар,
(SELECT new_nm, MAX(mes) AS mx FROM МатСтар WHERE Nz(МатСтар.KOL_PRIH,0)>0 GROUP BY new_nm) tmes,
(SELECT new_nm, mes, MAX(CENA) AS mc FROM МатСтар  WHERE Nz(МатСтар.KOL_PRIH,0)>0 GROUP BY new_nm, mes ) tcen,  
МатСтар INNER JOIN tmes ON tmes.new_nm=МатСтар.new_nm, 
МатСтар INNER JOIN tcen ON tcen.new_nm=МатСтар.new_nm,
tmes INNER JOIN tcen ON tmes.new_nm=tcen.new_nm AND tmes.mx=tcen.mes
ORDER BY МатСтар.new_nm



1



alexpro1979

646 / 99 / 11

Регистрация: 08.06.2015

Сообщений: 1,563

20.12.2015, 13:53

 [ТС]

15

В точку, спасибо

Добавлено через 2 часа 31 минуту
Еще одно уточнение, можно ли погрупировать по связке new_nm и ed_izm при условии что SKL меньше 20?

Добавлено через 1 минуту
Иногда материал может быть закуплен с другой единицой измерения

Добавлено через 7 минут

SQL
1
2
3
4
5
6
7
8
9
10
11
SELECT DISTINCT МатСтар.new_nm, МатСтар.ED_IZM, tmes.mx AS Max_Mes, tcen.mc
FROM (МатСтар INNER JOIN 
(SELECT МатСтар.new_nm, МатСтар.ED_IZM, MAX(МатСтар.mes) AS mx
FROM МатСтар
WHERE (((Nz([МатСтар].[KOL_PRIH],0))>0) AND ((МатСтар.SKL)<20))
GROUP BY МатСтар.new_nm, МатСтар.ED_IZM)  AS tmes ON tmes.new_nm=МатСтар.new_nm) INNER JOIN 
(SELECT МатСтар.new_nm, МатСтар.mes, MAX(МатСтар.CENA) AS mc, МатСтар.ED_IZM
FROM МатСтар
WHERE (((Nz([МатСтар].[KOL_PRIH],0))>0) AND ((МатСтар.SKL)<20))
GROUP BY МатСтар.new_nm, МатСтар.mes, МатСтар.ED_IZM)  AS tcen ON (tmes.new_nm=tcen.new_nm AND tmes.mx=tcen.mes ) AND (tcen.new_nm=МатСтар.new_nm)
ORDER BY МатСтар.new_nm;

Добавлено через 5 минут
Подскажите как дописать в 10 строке чтобы сверка шла еще и по ED_IZM?

Добавлено через 7 минут

SQL
1
2
3
4
5
6
7
8
9
10
11
SELECT DISTINCT МатСтар.new_nm, МатСтар.ED_IZM, tmes.mx AS Max_Mes, tcen.mc
FROM (МатСтар INNER JOIN 
(SELECT МатСтар.new_nm, МатСтар.ED_IZM, MAX(МатСтар.mes) AS mx
FROM МатСтар
WHERE (((Nz([МатСтар].[KOL_PRIH],0))>0) AND ((МатСтар.SKL)<20))
GROUP BY МатСтар.new_nm, МатСтар.ED_IZM)  AS tmes ON (tmes.new_nm=МатСтар.new_nm) AND tmes.ed_izm=МатСтар.ed_izm) INNER JOIN 
(SELECT МатСтар.new_nm, МатСтар.mes, MAX(МатСтар.CENA) AS mc, МатСтар.ED_IZM
FROM МатСтар
WHERE (((Nz([МатСтар].[KOL_PRIH],0))>0) AND ((МатСтар.SKL)<20))
GROUP BY МатСтар.new_nm, МатСтар.mes, МатСтар.ED_IZM)  AS tcen ON (tmes.new_nm=tcen.new_nm AND tmes.mx=tcen.mes AND tmes.ed_izm=tcen.ed_izm) AND (tcen.new_nm=МатСтар.new_nm)
ORDER BY МатСтар.new_nm;

Добавлено через 11 секунд
Так верно?



0



Эксперт MS Access

26783 / 14462 / 3192

Регистрация: 28.04.2012

Сообщений: 15,782

20.12.2015, 18:13

16

Цитата
Сообщение от alexpro1979
Посмотреть сообщение

Так верно?

Это можете сказать только Вы. Правильность приема проверяется только практикой, а не стройностью логики :-)



1



646 / 99 / 11

Регистрация: 08.06.2015

Сообщений: 1,563

20.12.2015, 18:33

 [ТС]

17

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



0



mobile

Эксперт MS Access

26783 / 14462 / 3192

Регистрация: 28.04.2012

Сообщений: 15,782

20.12.2015, 19:14

18

Выберите случайным образом два-три десятка пар new_nm — mes и проверьте для них вручную результаты. Это общепринятый прием техпроверки. Если все правильно, то с очень большой вероятностью можно утверждать, что запрос работает верно. Главное, чтобы соблюдался принцип случайности выборки. Найти квазислучайные номера записей для проверки можно например таким кодом

Visual Basic
1
2
3
4
5
6
7
8
9
10
Sub rndrec()
    Dim N, i, k
    k = DCount("*", "ИмяЗапроса")
    N = 20
    Randomize
    For i = 1 To N
        'Второй параметр случайное число - номер записи в экранном представлении запроса
        Debug.Print i, Int(Rnd(i) * k)
    Next
End Sub

Добавлено через 5 минут
Вот так будет «более случайно»

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
Sub rndrec()
    Dim N, i, k, r
    k = DCount("*", "ИмяЗапроса")
    N = 20
    Randomize
    For i = 1 To N
        r = Int(Rnd(i) * k)
        'Второй параметр случайное число - номер записи в экранном представлении запроса
        Debug.Print i, Int(Rnd(r) * k)
    Next
End Sub

Параметр N это число выбираемых записей. Я взял 20, но можно и любое другое



0



646 / 99 / 11

Регистрация: 08.06.2015

Сообщений: 1,563

20.12.2015, 19:57

 [ТС]

19

Цитата
Сообщение от mobile
Посмотреть сообщение

Sub rndrec()
* * Dim N, i, k, r
* * k = DCount(«*», «ИмяЗапроса»)
* * N = 20
* * Randomize
* * For i = 1 To N
* * * * r = Int(Rnd(i) * k)
* * * * ‘Второй параметр случайное число — номер записи в экранном представлении запроса
* * * *Debug.Print i, Int(Rnd(r) * k)
* * Next
End Sub

Как этим правильно воспользоваться ?



0



Эксперт MS Access

26783 / 14462 / 3192

Регистрация: 28.04.2012

Сообщений: 15,782

20.12.2015, 20:17

20

Лучший ответ Сообщение было отмечено alexpro1979 как решение

Решение

Цитата
Сообщение от alexpro1979
Посмотреть сообщение

Как этим правильно воспользоваться ?

Создать обычный модуль, не модуль формы, отчета. Скопировать туда процедуру. Запустить ее, нажав F5, когда курсор будет в теле процедуры. В области отладки (Immediate) напишутся номера записей запроса. Откройте запрос на экране и перейдите на эту запись (в самом низу запроса в окошке счетчика записей можно написать число, нажать Enter и курсор перейдет на указанную запись). В найденной записи прочитать значение new_nm, вручную найти правильное значение макс.цены для макс.месяца и сравнить с выданной запросом. И так по всем 20 номерам.



1



Напишите запрос, который для каждого продукта найдёт максимальную стоимость. Сохраните её в переменной max_price. Выведите продукты и максимальную цену тех, чья стоимость больше 500 рублей.

Подсказка:
Выберите названия продуктов (name). Примените агрегирующую функцию MAX() к полю price. Выполните группировку по названию товара. После HAVING напишите MAX(price) > 500.

Код:

SELECT 
    name,
    MAX(price) AS max_price
FROM
	products_data_all
GROUP BY
    name
HAVING
    MAX(price) > 500

Похожие записи:

  1. Агрегирующие функции в Django ORM
  2. SQL — среднее, максимальное и минимальное значение
  3. SQL — вывод 5 самых дорогих товаров
  4. SQL — разница между минимальным и максимальным значением

Skip to content

Функция МАКС в Excel: как найти максимальное значение

В этой статье объясняется функция МАКС с множеством примеров формул, которые показывают, как найти наибольшее значение в Excel и выделить наибольшее число на листе.

МАКС — одна из самых простых и простых в использовании функций Excel. Тем не менее, у нее есть несколько хитростей, которые дадут вам большие возможности. Скажите, как вы используете функцию МАКС с условиями? Или знаете, как извлечь абсолютное наибольшее значение? Мы предложим несколько решений для этих и других аналогичных задач.

  • Функция МАКС — основные сведения
  • Найти максимальное в группе чисел
  • Вычисляем максимум в несмежных диапазонах
  • Как получить максимальную (последнюю) дату
  • Максимальное значение с условиями
  • Наибольшее число без учёта нулей
  • Как найти максимальное число игнорируя ошибки
  • Определяем абсолютное максимальное значение
  • Максимум применительно к тексту
  • Вычисление наибольшей разницы
  • Выводим адрес ячейки с максимальным значением
  • Как выделить цветом самое большое число
  • Почему не получается?

Функция МАКС

Функция МАКС в Excel возвращает наибольшее значение в указанном вами наборе данных.

Синтаксис у неё следующий:

МАКС(число1; [число2];…)

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

Число1 является обязательным, число2 и последующие аргументы необязательны.

Чтобы создать самую простую формулу, чтобы выбрать максимальное значение в таблице Excel, вы можете вводить числа непосредственно в список аргументов, например:

=МАКС(1; 2; 3)

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

Самый быстрый способ найти наибольшее значение в диапазоне, – это:

  1. В ячейке введите = МАКС(
  2. Выберите диапазон чисел с помощью мыши.
  3. Введите закрывающую скобку.
  4. Жмём Enter для завершения.

Например, чтобы найти максимальное значение в диапазоне A1: A6, формула будет выглядеть следующим образом:

=МАКС(A1:A6)

Если ваши числа находятся в непрерывном диапазоне (как в этом примере), вы можете заставить Excel автоматически создать формулу МАКС. Вот как:

  1. Выделите ячейки со своими числами.
  2. На вкладке «Главная» в группе «Форматы» нажмите «Автосумма» и выберите «Максимум» из раскрывающегося списка.

5 фактов, которые нужно знать о функции МАКС –

  1. В текущих версиях Excel она может обрабатывать до 255 аргументов.
  2. Если аргументы не содержат ни одного числа, возвращается ноль.
  3. Если аргументы содержат одно или несколько значений ошибки, возвращается ошибка.
  4. Пустые ячейки игнорируются.
  5. Обрабатываются логические значения и текстовые представления чисел, предоставленные непосредственно в списке аргументов (ИСТИНА приравнивается к 1, ЛОЖЬ – к 0). Если используется ссылка на ячейку с логическим или текстовым значением, то они игнорируются.

Как найти в Excel наибольшее число – примеры.

Ниже мы покажем несколько стандартных вариантов использования функции МАКС. 

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

Как выбрать максимальное значение в группе чисел.

Чтобы в Excel извлечь наибольшее число в группе чисел, передайте эту группу функции МАКС в качестве ссылки на диапазон. Диапазон может содержать любое количество строк и столбцов. Например, чтобы получить максимальное значение из C2: E7, используйте эту простую формулу:

=МАКС(C2:E7)

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

Применим функцию:

 = МАКС(B2:B10)

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

Наибольшее значение в несмежных ячейках или диапазонах Excel

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

  1. Начните вводить функцию МАКС в ячейку.
  2. После того, как вы ввели открывающую скобку, нажмите и удерживайте Ctrl  и выберите мышкой нужные ячейки и диапазоны.
  3. Отпустите Ctrl и введите закрывающую круглую скобку.
  4. Нажмите Enter.

Вы получите формулу максимального числа в Excel, подобную этому:

=МАКС(C2:E2;C7:E7)

Как получить наибольшую (последнюю) дату в Excel

Во внутренней системе Excel даты – это не что иное, как порядковые номера дней, поэтому функция МАКС обрабатывает их без проблем.

Например, чтобы найти последнюю дату доставки из C2: C7, запишите обычную формулу, которую вы использовали бы для чисел:

=МАКС(C2:C7)

Поскольку дата – это также число, всё работает замечательно.

Максимальное значение с условиями.

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

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

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

МАКС + ЕСЛИ

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

=МАКС(ЕСЛИ(B2:B15=F1; C2:C15))

Чтобы это работало, необходимо нажать Ctrl + Shift + Enter одновременно, чтобы ввести как формулу массива. Если все сделано правильно, Excel заключит ваше выражение в {фигурные скобки}, что является визуальным указанием на формулу массива.

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

МАКС + СУММПРОИЗВ

Если вам не нравится использовать формулы массива в ваших листах, объедините МАКС с функцией СУММПРОИЗВ, которая умеет работать с массивами:

=СУММПРОИЗВ(МАКС((B2:B15=F1)*(C2:C15)))

МАКСЕСЛИ

В Excel 2019 и Office 365 есть специальная функция МАКСЕСЛИ, которая предназначена для поиска наибольшего значения по 126 критериям.

В нашем случае используется только одно условие, поэтому формула очень проста:

=МАКСЕСЛИ(C2:C15;B2:B15;F1)

На приведенном ниже скриншоте показаны все 3 формулы в действии:

Выбираем максимальное значение в Excel без учета нулей

Фактически, это разновидность условного МАКС, рассмотренного в предыдущем примере. Чтобы исключить нули, используйте логический оператор «не равно» и поместите выражение «<> 0» либо в критерий функции МАКСЕСЛИ, либо в конструкцию МАКС + ЕСЛИ.

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

Чтобы попробовать, давайте найдем самую маленькую скидку в диапазоне C2:C7. Поскольку все скидки представлены отрицательными числами, наименьшая скидка фактически является наибольшим значением.

Обязательно нажмите Ctrl + Shift + Enter, чтобы правильно заполнить эту формулу массива:

=МАКС(ЕСЛИ(C2:C7<>0; C2:C7))

А это обычная формула –

=МАКСЕСЛИ(C2:C7;C2:C7;»<>0″)

И вот что у нас получилось:

Как найти максимальное значение, игнорируя ошибки

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

В качестве обходного пути можно использовать МАКС вместе с ЕОШИБКА. Учитывая, что вы ищете в диапазоне A1: B5, формула принимает следующую форму:

=МАКС(ЕСЛИ(ЕОШИБКА(A1:B6); «»; A1:B6))

Чтобы упростить формулу, используйте функцию ЕСЛИОШИБКА вместо комбинации ЕСЛИ + ЕОШИБКА. Это также сделает логику более очевидной — если есть ошибка в A1:B6, замените ее пустой строкой (»), а затем вычислите самое большое значение в диапазоне:

=МАКС(ЕСЛИОШИБКА(A1:B6; «»))

Неудобство состоит в том, что нужно не забывать нажимать Ctrl + Shift + Enter, потому что это работает только как формула массива.

В Excel 2019 и Office 365 функция МАКСЕСЛИ может быть хорошим решением при условии, что ваш набор данных содержит хотя бы одно положительное число или нулевое значение:

=МАКСЕСЛИ(A1:B6;A1:B6;»>=0″)

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

Также идеально подходит функция АГРЕГАТ, которая может выполнять ряд операций и игнорировать значения ошибок:

=АГРЕГАТ(4;6;A1:B6)

Число 4 в первом аргументе предписывает выполнить поиск максимального числа, шестёрка во втором аргументе – это параметр «игнорировать ошибки», а A1: B6 — ваш целевой диапазон.

Все формулы возвращают одинаковый результат:

Как найти абсолютное наибольшее значение в Excel

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

Первая идея, которая приходит в голову, — получить абсолютные значения всех чисел в диапазоне с помощью функции ABS и передать их в МАКС:

{= МАКС(ABS( диапазон ))}

Это формула массива, поэтому не забудьте подтвердить ее с помощью Ctrl + Shift + Enter. Еще одно предостережение: он работает только с числами и приводит к ошибке в случае нечисловых данных.

Не нравится это решение? Тогда давайте построим что-нибудь более жизнеспособное :)

Что, если мы найдем минимальное значение, изменим или проигнорируем его знак, а затем вычислим вместе со всеми другими числами? Да, это будет отлично работать как обычная формула. В качестве дополнительного бонуса это отлично обрабатывает текстовые записи и ошибки.

С исходными данными в A1: B5 расчёты выглядят следующим образом.

Формула массива (заполняется с помощью Ctrl + Shift + Enter):

=МАКС(ABS(A1:B5))

Обычная формула (заполняется клавишей Enter):

=МАКС(МАКС(A1:B5); -МИН(A1:B5))

или же

=МАКС(МАКС(A1:B5); ABS(МИН(A1:B5)))

На скриншоте ниже показаны результаты:

Вернуть максимальное абсолютное значение с сохранением знака

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

Предполагая, что числа находятся в ячейках A1: B5, вот выражение, которое следует использовать:

=ЕСЛИ(ABS(МАКС(A1:B5))>ABS(МИН(A1:B5)); МАКС(A1:B5);МИН(A1:B5))

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

Поскольку формула возвращает исходное, а не абсолютное значение, информация о знаке сохраняется (см. скриншот выше).

Максимальное значение применительно к тексту.

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

Здесь мы должны применить функцию ДЛСТР для вычисления длины имени.

=ДЛСТР(А2)

А затем  применим функцию МАКС, чтобы узнать максимальную длину ФИО.

=МАКС(B2;B13)

А можно обойтись без дополнительного столбца и вычислить максимальную длину текстового значения в одной ячейке. Для этого нужно объединить эти формулы, вложив ДЛСТР в МАКС:

=МАКС(ДЛСТР(A2:A13))

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

Вычислить наибольшую разницу в сумме.

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

 Ниже представлена ​​таблица Excel с небольшой выборкой данных за 4 месяца.

Если решать проблему «в лоб», то можно использовать функцию ЕСЛИ со множеством условий:

=ЕСЛИ(И((МАКС(B2:C2)-МИН(B2:C2))>(МАКС(C2:D2)-МИН(C2:D2)),  (МАКС(B2:C2)-МИН(B2:C2))>(МАКС(D2:E2)-МИН(D2:E2))), МАКС(B2:C2)-МИН(B2:C2), ЕСЛИ((МАКС(C2:D2)-МИН(C2:D2))>(МАКС(D2:E2)-МИН(D2:E2)), МАКС(C2:D2)-МИН(C2:D2),МАКС(D2:E2)-МИН(D2:E2)))

Но при помощи функции МАКС можно значительно упростить расчет и не пользоваться такой длинной и сложной конструкцией.

Используя функцию ABS, мы будем искать максимальное изменение вне зависимости от знака. Попробуйте заменить большую формулу этой:

=МАКС(ABS(B2-C2);ABS(C2-D2);ABS(D2-E2))

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

Как найти адрес ячейки Excel с максимальным числом.

Есть ли решение, которое сообщит адрес ячейки с наибольшим числом, а не само число? То есть, если A4 равно 9 и это значение является самым большим, как мне составить формулу, которая возвратит координаты A4 вместо 9?

Вы можете использовать функции ЯЧЕЙКА , ИНДЕКС и ПОИСКПОЗ в сочетании с функцией МАКС, чтобы вернуть адрес ячейки с наибольшим значением.

Например, если вы хотите найти ячейку с наивысшим значением в столбце от А1 до А7, вы можете использовать следующий расчёт:

=ЯЧЕЙКА(«адрес»;ИНДЕКС(A1:A7;ПОИСКПОЗ(МАКС(A1:A7);A1:A7;0)))

Получаем результат в виде абсолютной ссылки $А$4, которая указывает на самое большое число из этого диапазона.

Однако учтите, что это выражение работает только с одним столбцом.

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

Формула массива –

{=АДРЕС(ПОИСКПОЗ(МАКС(F1:F7);F1:F7;0);СТОЛБЕЦ(F1:F7);4)}

Обычная формула, в которой явным образом нужно указать столбец:

=»F»&ПОИСКПОЗ(МАКС(F1:F7);F1:F7;0)

Ещё одна формула массива –

{=ЯЧЕЙКА(«address»;ИНДЕКС(F2:F7;ПОИСКПОЗ(МАКС(F2:F7);F2:F7;0)))}

На скриншоте вы видите, что все они возвращают один и тот же адрес:

И ещё одна формула массива для вывода адреса, которая работает с диапазоном из нескольких строк и столбцов:

{=АДРЕС(МАКС(ЕСЛИ((C2:E7=МАКС(C2:E7));СТРОКА(C2:E7))); МАКС(ЕСЛИ((C2:E7=МАКС(C2:E7));СТОЛБЕЦ(C2:E7))))}

В данном случае, как видите, мы ищем адрес наибольшего числа в двумерном диапазоне C2:E7.

Напомню, что формула массива вводится с использованием комбинации клавиш Ctrl + Shift + Enter.

Как выделить наибольшее значение в Excel

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

Выделите максимальное число в диапазоне Excel

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

  1. Выберите диапазон чисел (в нашем случае C2: E8).
  2. На вкладке «Главная» в группе «Стили» щелкните «Условное форматирование»> «Новое правило».
  3. В диалоговом окне «Новое правило форматирования» выберите «Форматировать только первые или последние значения».
  4. На нижней панели выберите «первым» из раскрывающегося списка и введите 1 в поле рядом с ним (это означает, что вы хотите выделить только одну ячейку, содержащую наибольшее значение).
  5. Нажмите кнопку «Формат» и выберите стиль оформления.
  6. Дважды щелкните OK, чтобы закрыть оба окна.

Как выделить цветом максимальное число в каждой строке

Поскольку нет встроенного правила, чтобы выделить наибольшее значение из каждой строки таблицы Excel, вам придется настроить собственное на основе функции МАКС. Вот как:

  1. Выберите все строки, которые вы хотите проверить (C3:E8).
  2. Кликните Новое правило > Использовать формулу.
  3. В поле Форматировать значения, запишите:

=C3=МАКС($C3:$E3)

Где C3 — крайняя верхняя левая ячейка, а $C3:$E3 — координаты первой строки. Чтобы правило работало, обязательно зафиксируйте координаты столбца в диапазоне знаком $.

  1. Нажмите кнопку «Формат» и выберите нужный формат.
  2. Дважды щелкните ОК.

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

=C2=МАКС(C$2:C$7)

Дополнительные сведения см. в статье « Как создать правило условного форматирования на основе формул» .

Почему не получается найти наибольшее число?

МАКС — одна из самых простых в использовании функций Excel. Если вопреки всем ожиданиям она не работает, то, скорее всего, это одна из следующих проблем:

МАКС возвращает ноль

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

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

Вы можете проверить это с помощью функции ЕЧИСЛО, например:

=ЕЧИСЛО(A1)

Если приведенная выше формула возвращает ЛОЖЬ, то значение в A1 не является числовым. Это означает, что вы должны устранять неполадки с исходными данными, а не с формулой.

МАКС возвращает значение #Н/Д, #ЗНАЧ или другую ошибку.

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

Вот как можно найти максимальное значение в Excel. Благодарю вас за чтение!

Функция ЕСЛИОШИБКА – примеры формул В статье описано, как использовать функцию ЕСЛИОШИБКА в Excel для обнаружения ошибок и замены их пустой ячейкой, другим значением или определённым сообщением. Покажем примеры, как использовать функцию ЕСЛИОШИБКА с функциями визуального…
Сравнение ячеек в Excel Вы узнаете, как сравнивать значения в ячейках Excel на предмет точного совпадения или без учета регистра. Мы предложим вам несколько формул для сопоставления двух ячеек по их значениям, длине или количеству…
проверка правильности ввода Excel при помощи функции ЕСЛИ Как проверить правильность ввода данных в Excel? Подтверждаем правильность ввода галочкой. Задача: При ручном вводе данных в ячейки таблицы проверять правильность ввода в соответствии с имеющимся списком допустимых значений. В случае правильного ввода в отдельном столбце ставить…
ЕСЛИ + СОВПАД текст Функция ЕСЛИ: проверяем условия с текстом Рассмотрим использование функции ЕСЛИ в Excel в том случае, если в ячейке находится текст. СодержаниеПроверяем условие для полного совпадения текста.ЕСЛИ + СОВПАДИспользование функции ЕСЛИ с частичным совпадением текста.ЕСЛИ + ПОИСКЕСЛИ…
функция если Визуализация данных при помощи функции ЕСЛИ Функцию ЕСЛИ можно использовать для вставки в таблицу символов, которые наглядно показывают происходящие с данными изменения. К примеру, мы хотим показать в отдельной колонке таблицы, происходит рост или снижение продаж.…
ЕСЛИ с датами 3 примера, как функция ЕСЛИ работает с датами. На первый взгляд может показаться, что функцию ЕСЛИ для работы с датами можно применять так же, как для числовых и текстовых значений, которые мы только что обсудили. К сожалению, это…

Пычев Анатолий, человек постоянно задает бессмысленные тупые вопросы, которые элементарно находятся в доках/поисковиком. Собственно, такие вопросы и можно считать глупыми, но если вам по душе другое слово — это не суть важно. Кроме того, он не имеет никакого уважения к людям, пытающимся ему помочь (общение на «ты», не помечание ответов, прямые задания «сделайте мне» а не «подскажите, что я сделал не так»); у него нету никаких знаний языков/фреймворков/библиотек, по которым он задает свои вопросы, даже базовых; он не прилагает никаких усилий к решению своих же задач.

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

> Мы все учимся.
Если бы.

Понравилась статья? Поделить с друзьями:

Не пропустите также:

  • Winmail dat вместо вложения как исправить mac os
  • Как составить план полета для дрона
  • Как найти генератор случайных чисел
  • Как найти ударный слог нужно
  • Как найти высоту физика сообщающиеся сосуды

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии