concatinate или что-то еще?

Автор виктор098, 20 мая 2013, 23:06

0 Пользователи и 1 гость просматривают эту тему.

виктор098

Есть список работников, которые в течение дня выполняют несколько типовых заданий по заявкам.Например, сегодня Петров выполнил 5 заявок, Сидоров 3 заявки,Иванов 2 заявки. В конце дня формируется таблица. В каждой строке тип задания, фамилия, № заявки. Для каждой заявки - отдельная строка. Максимальное количество заявок для одного работника не более 5. Таблица получается на 30-40 строк (т.к в штате 10 чел.).
Необходимо на втором листе напротив списка фамилий указать номера заявок в одной ячейке. Например: Иванов 12345,2345,234322.Следующая строка Петров 1231,45854,345355 и т.д.
Как сделать так чтобы функция concatinate() работала по данному условию. Или макрос надо писать?

Yakov

Можно и без макроса. Приложите файл примера.

виктор098

вот примерный файл отчета.

[вложение удалено Администратором]

JohnSUN

А... Нет, тогда макросом проще. К счастью, в загашнике завалялся подходящий к случаю :-)


[вложение удалено Администратором]
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

Hasim

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

виктор098

Спасибо за макрос и ответы. А без макроса никак?

JohnSUN

Ну, почему же "никак"? Можно и одними формулами. Для начала давай уточним - сколько будет сотрудников и какой длины будет таблица с данными на Sheet1?
Допустим, будет не более 1000 строк для 20 сотрудников (по 50 записей о работах на нос - достаточно?)
И теперь прикинем, что нужно сделать.
Для каждого сотрудника нужно отобрать его операции и его заказы. Для поиска каждого следующего заказа можно воспользоваться функцией LARGE(). Нам повезло: и номера заявок, и коды работ - числовые. Были бы текстовые - LARGE() не сработал бы.
Каждый такой LARGE() нужно вызвать дважды внутри IF() - один раз проверить вернет ли он осмысленный результат (если нет, то подменить ошибку на пустую строку), а второй раз - получить собственно искомое значение.
Раз мы не знаем заранее, в каких из 1000 строк попадутся работы конкретного сотрудника (а вдруг он стахановец и один наколбасит работ на 998 заявок?), значит повторить поиск придется 1000 раз. Ну и затем нужно будет сцепить полученные результаты - еще 1000 CONCATENATE()...
Все то же самое нужно будет проделать и для операций.
Чуешь, к чему клоню? Стоит ли такая овчинка такой выделки?
Примерный вариант прикладываю. Оцени размер получившегося монстра и скорость пересчета...
В общем, если сможешь придумать более оптимальный вариант (например, через сводную таблицу) - расскажи, интересно будет узнать.

[вложение удалено Администратором]
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

виктор098

Да впечатляет.Но нам провезло с количеством сотрудников,объемом работ, числовыми номерами заявок и кодами работ. JohnSUN спасибо за формулу.