Страницы: 1
RSS
Как считывать в путь в формуле значение из ячейки?
 
Добрый день, друзья!

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

Есть задача собрать график учета рабочего времени с организации на 500 человек. Решение изначально строилось, отталкиваясь от внешнего вида диаграммы Ганта, но достаточно статичной. (Я знаю, что для выполнения этой задачи намного эффективнее применить Аксесс или Проджект, но поставлена задача реализовать в экселе).
Теперь суть: создан набор файлов - (1) ИД.хлс, (2) УРВ_ФамилияИО.хлс, (3) Работа отдела.хлс.
Из файла 1 в файл 2 берутся данные по проектам, объектам. Помимо этого файл 2 сореджит данные о фамилии сотрудника, датах его выходов на работу, больничных, отпусках, а так же КОД той работы, которую он выполнял. Вот этот код как раз и собирается в файл 3.
Тут мы подходим к самому интересному - устройству файла Работа отдела (см. фрагмент в виде картинки).

В каждой ячейке забита формула:
=ЕСЛИ(Cводная!HH$5<=СЕГОДНЯ();ЕСЛИОШИБКА(ЕСЛИ(ПРОСМОТР(
ВПР(Cводная!HH$5;'\\<путь к файлу на сервере>\[УРВ_ФамилияИО.xlsm]УРВ'!$A$5:$B$500;2;ЛОЖЬ);{"Больничный";"День за свой счёт";"Отгул";"Отпуск";"Явка"};{"Б";"1д";"ОГ";"ОТ";"Я"})="Я";
ВПР(Cводная!HH$5;'\\<путь к файлу на сервере>\[УРВ_ФамилияИО.xlsm]УРВ'!$A$5:$I$500;9;ЛОЖЬ);ПРОСМОТР(
ВПР(Cводная!HH$5;'\\<путь к файлу на сервере>\[УРВ_ФамилияИО.xlsm]УРВ'!$A$5:$B$500;2;ЛОЖЬ);{"Больничный";"День за свой счёт";"Отгул";"Отпуск";"Явка"};{"Б";"1д";"ОГ";"ОТ";"Я"}));"");ДВССЫЛ("План!" & HH$1 & СТРОКА()))

Суть ее в следующем. Она смотрит в файл сотрудника, забирая из своей колонки дату из строки 5, находит, был ли в этот день сотрудник на работе, и если да, то какой работой он занимался в этот день - вписывает код этой работы; если не был, то по какой причине - вписывает болел, отгул, день за свой счёт или отпуск.

Теперь основная сложность - в каждой ячейке своя фамилия, да еще и трижды (сотрудники приходят и уходят, и приходится неудобно переделывать) и путь к ним различается в части названий папок отделов, НО! В начале каждой строки вписана нужная ФамилияИО и я не понимаю, как ее оттуда засунуть внутрь формулы как-то автоматически.

Простите, что длинно получилось.
 
Я так понимаю, что ДВССЫЛ не вариант, т.к. файл закрыт. Могу предложить лишь через коды VBA: Как получить данные из закрытой книги?
Иначе с подстановкой данных никак. Должно получиться что-то вроде:
ВПР(Cводная!HH$5;Get_Value_From_Close_Book("\\<путь к файлу на сервере>\УРВ_ФамилияИО.xlsm";"УРВ";"A5:B500");2;ЛОЖЬ)

насколько рабочим будет вариант подсказать не могу - серверные пути очень капризные...
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
The_Prist, спасибо за интересное предложение, попробую, отпишусь.
 
Если у Вас эксель 2010 и выше, я бы лучше реализовал все это дело через Power Pivot - позволяет объединять множество исходных данных (таблиц) в одну сводную таблицу через систему выстраиваемых взаимосвязей.
 
Учитывайте - тормозить еще может прилично. Через ADO будет быстрее, но в данном случае первая строка возвращаемых данных будет игнорироваться, т.к. считается заголовком:
ВПР(Cводная!HH$5;Extract_Value_ADO_Sh("\\<путь к файлу на сервере>\";"УРВ_ФамилияИО.xlsm";"УРВ";"A5:B500");2;ЛОЖЬ)

т.е. вместо A5:B500 будет фактически возвращено A6:B500. Поэтому возможно имеет смысл указать на строку выше данные, если они без заголовков.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Посмотрел присланные мне ответы внимательно. Пришел к выводу, что я некорректно сформулировал вопрос.
Мне надо, чтобы при растягивании формулы вниз по колонке в каждую новую строчку бралась фамилия из первой колонки этой же строчки.
Либо какой-то вариант макроса, который будет ее автоматом заменять хотя бы в одной колонке, которую я потом просто растяну на всю таблицу.
Либо я не понял советы, и они это и реализуют.
 
Цитата
penkinda написал:
бралась фамилия из первой колонки этой же строчки
ну вот подумать уже сил не осталось :) :
ВПР(Cводная!HH$5;Extract_Value_ADO_Sh("\\<путь к файлу на сервере>\";"УРВ_"&A1&".xlsm";"УРВ";"A5:B500");2;ЛОЖЬ)
Изменено: The_Prist - 08.11.2016 13:01:14
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
penkinda написал:
как ее оттуда засунуть внутрь формулы как-то автоматически
- можно прописывать формулы (Ваши, как есть здесь на форуме) макросом, подставляя ФИО из обрабатываемой строки. Просто, ничего не нужно додумывать - только добавьте цикл по столбцу.
 
The_Prist, Hugo,спасибо за помощь, просто у меня программирование на нулевом уровне. Я пока с ним только знакомлюсь.
 
А тут программирование от Вас не требуется - это просто объединение строковых данных внутри формулы, не более. А функция уже напрограммирована :)
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
The_Prist, всё получилось. Правда обрабатывает 1 отдел 20 минут :) Так что буду искать другие решения.
Страницы: 1
Читают тему
Наверх