Специалистам и знатокам по VBA: HELP!

Компьютеры, программы, периферия, коммуникации, интернет, программирование и т.п. Ранее назывался Hard-n-Soft.
Сообщение
Автор
Splinter
Аватара пользователя
Не грузин
Благодарил (а): 91 раз
Поблагодарили: 487 раз

№ 30 Сообщение Splinter » 04 дек 2014 12:37

29: Splinter:
> Ан нет, нашел функцию ГПР(), но пока не понял как она работает и как её приспособить.

Все, разобрался.
ГПР() таки подходит, но придется перекорячить структуру таблицы, поскольку она ищет по первой строке.
Т.е. суммы значений (ВСЕГО) должны быть в первой строке.
Не очень удобно, но это все вторично, ибо промежуточные значения неинтересны и нужны только для расчетов.

Изображение

Результат: в ячейке B10 автоматом вставляется "фамилия" сотрудника с максимальным значением 20.

Синтаксис в данном случае следующий:

Изображение

Что искать (искомое значение) - это максимум из диапазона B1:F1, но можно было тупо вписать ячейку B9, где точно так же вписана функция МАКС(B1:F1).
Где искать (таблица) - это диапазон A1:F7, то есть нужная мне таблица на листе.
Что подставлять (номер строки) - брать значение из второй строки в этом же столбце.

Если еще короче, то ищем нужное значение (аргумент 1 функции) в нужном диапазоне ячеек (аргумент 2 функции) и берем из этого же столбца значение из второй строки (аргумент 3 функции).

[утирает пот]

В общем, поняли вы моё объяснение или нет - не знаю, но я разобрался!!! :D

Сцуко, шаманский Excel, век живи - век учись.

TheJudge
Аватара пользователя
SVGA
Благодарил (а): 268 раз
Поблагодарили: 853 раза

№ 31 Сообщение TheJudge » 04 дек 2014 14:54

30: Splinter:

А при нескольких найденых значениях?

Splinter
Аватара пользователя
Не грузин
Благодарил (а): 91 раз
Поблагодарили: 487 раз

№ 32 Сообщение Splinter » 04 дек 2014 15:07

31: TheJudge:

Напрямую нельзя.
Но можно сварганить структуру (ЕСЛИ(ИЛИ(ГПР(...))).
Где по ИЛИ будет отслеживаться совпадение.

Splinter
Аватара пользователя
Не грузин
Благодарил (а): 91 раз
Поблагодарили: 487 раз

№ 33 Сообщение Splinter » 04 дек 2014 15:25

31: TheJudge:

Бляха-муха, вот ты меня в ступор вогнал.
Не получается при равных значениях!!!
Берет первое по порядку: если 20 будет у "Сотрудник 2" и "Сотрудник 4", то в итоговую ячейку запишет "Сотрудник 2", как первого найденного.

revik
Благодарил (а): 2 раза
Поблагодарили: 51 раз

№ 34 Сообщение revik » 04 дек 2014 16:52

Ну вот корявое решение, например. Сделал чисто из принципа, посмотреть смогу ли, с помощью этого примера
http://fiveminutelessons.com/learn-micr ... alues-list
вот тут переводчик функций на разные языки
http://dolf.trieschnigg.nl/excel/index.php

Сами формулы
для минимальных значений

Код: Выделить всё

{=IFERROR(INDEX($A$1:$F$1;1;SMALL(IF($B$7:$F$7=MIN($B$7:$F$7);COLUMN($B$7:$F$7));ROW(1:1)));"")}
для максимальных

Код: Выделить всё

{=IFERROR(INDEX($A$1:$F$1;1;SMALL(IF($B$7:$F$7=MAX($B$7:$F$7);COLUMN($B$7:$F$7));ROW(1:1)));"")}
Каждую формулу надо растянуть вниз на количество ячеек, равное количеству столбцов с сотрудниками. То есть в опубликованном примере каждую формулу надо растянуть на 5 ячеек вниз, потому что сотрудников 5
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Последний раз редактировалось revik 04 дек 2014 17:09, всего редактировалось 1 раз.

TheJudge
Аватара пользователя
SVGA
Благодарил (а): 268 раз
Поблагодарили: 853 раза

№ 35 Сообщение TheJudge » 04 дек 2014 17:08

33: Splinter:

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

Splinter K-второй
Аватара пользователя
Благодарил (а): 1 раз
Поблагодарили: 7 раз

№ 36 Сообщение Splinter K-второй » 04 дек 2014 18:25

34: revik:

Ага, спасибо. Завтра или сегодня попозже проверю, поковыряюсь.
Но, в принципе, все же склоняюсь к тому, чтобы скриптом все сделать: в этом случае хоть алгоритм понятен.
А реализовать его на ВБА в экселе не вот уж сложная задача.

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

Splinter
Аватара пользователя
Не грузин
Благодарил (а): 91 раз
Поблагодарили: 487 раз

№ 37 Сообщение Splinter » 04 дек 2014 20:32

34: revik:

Хы, попробовал по-всякому с разными сочетаниями - работает.
Спасибо!

Ты - монстар!!!

При встрече - с меня пиво/сок/лимонад/чебурек!

revik
Благодарил (а): 2 раза
Поблагодарили: 51 раз

№ 38 Сообщение revik » 04 дек 2014 22:03

Ну если помог, то клева )
Сам я в Экселе вообще никак, стараюсь его не запускать без необходимости, и без гугла и примера точно ничего не смог бы.
На VBA было бы быстрее и понятнее задачу решить, но ктож даст разрешение на запуск макроса?
Если надо пояснить за формулу - обращайся )

Кстати, где в городе чебуреки хорошие дают?

Splinter
Аватара пользователя
Не грузин
Благодарил (а): 91 раз
Поблагодарили: 487 раз

№ 39 Сообщение Splinter » 04 дек 2014 22:21

38: revik:
> Сам я в Экселе вообще никак, стараюсь его не запускать без необходимости, и без гугла и примера точно ничего не смог бы.

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

> На VBA было бы быстрее и понятнее задачу решить, но ктож даст разрешение на запуск макроса?

Да вот в чем и проблема-то!
Можно было бы и макросом, но крайне нежелательно в виду политики безопасности.
Это был крайний вариант.

Splinter
Аватара пользователя
Не грузин
Благодарил (а): 91 раз
Поблагодарили: 487 раз

№ 40 Сообщение Splinter » 08 дек 2014 12:36

38: revik:

Что-то все равно не выходит каменный цветок.
Как я говорил выше, массив значений будет не 5х5, а 8х15: пятнадцать столбцов по восемь строк.

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

Теперь беру свой файлик с готовой аналогичной таблицей 8х15, в которой все ячейки расположены по абсолютно тем же адресам. Не работает.
Причем формулу брал по всякому: и копировал как текст, и через контекстное меня "Специальная вставка" и даже тупо набивал её заново от руки.
Ни-че-го.
Одна и та же формула с указанными одними и теми же адресами в одном файле работает, а в другом нет.

Вот такая итоговая таблица:

Изображение

Вот такая итоговая формула (для первой строки, в ячейке А13):

Код: Выделить всё

=ЕСЛИОШИБКА(ИНДЕКС($A$1:$P$1;1;НАИМЕНЬШИЙ(ЕСЛИ($B$10:$P$10=МИН($B$10:$P$10);СТОЛБЕЦ($B$10:$P$10));СТРОКА(1:1)));"")
В твоем файле она отрабатывает нормально.
В моем файле значение функции ЕСЛИОШИБКА() всегда попадает на аргумент "значение_если_ошибка", т.е. на заключительную часть формулы - ;"").
Если там вместо пустого значения прописать ;"НЕТ") - то во всех ячейках это "НЕТ" и пропишется.
На первый аргумент функции ЕСЛИОШИБКА() - "значение" - она не попадает никак.

В чем различие между файлами, где - не понимаю.
Если даже адресация полностью совпадает.

Splinter
Аватара пользователя
Не грузин
Благодарил (а): 91 раз
Поблагодарили: 487 раз

№ 41 Сообщение Splinter » 08 дек 2014 13:21

Отбой тревоги.

Я всегда буду читать хэлпы внимательно и до конца.
Я всегда буду читать хэлпы внимательно и до конца.
Я всегда буду читать хэлпы внимательно и до конца.
Here is a breakdown of this formula:

The { } around the formula indicates that this is an array formula.
Note that you don't type these braces as part of the formula. You have to press Ctrl+Shift+Enter key when entering the formula to tell Excel it is an array formula, after which the { } will automatically appear. If you don't, our formula will return a #VALUE error.
Проблема была в фигурных скобках, которые никак не копируются и в новой ячейке их надо обозначать снова.

Вернуться в «Компьютерный форум»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя