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

Прошу помощи в решении такой задачи:
На  первой странице файла имеем таблицу с недельным графиком (назовём её  "Т1"). Каждому сотруднику посвящены три строки; каждому дню - два  столбца. Итого имеем блок из 6 ячеек, посвящённый каждому сотруднику в  любой день. Верхние две ячейки такого блока - время прихода и время ухода (для каждого сотрудника на каждый день).

На  втором листе хочу сделать почасовое расписание, в котором отображались  бы часы присутствия сотрудника по часам каждого дня. Эту таблицу назовём  "Т2".
Здесь каждому сотруднику посвящена одна строка; каждому  дню - 16 столбцов (каждому часу - столбец). Т.е. структура Т2  отличается от структуры Т2.

Необходимо, чтобы  формулы в Т2 возвращали в ячейку значение "п" если эта ячейка  соответствует часу, который находится в промежутке между временем  прихода сотрудника и временем его ухода из Т1. Должен получаться некий  такой Гант.

Пример прикрепил. В нём таблица Т1 находится на листе "План-график", Т2 - на листе "Почасовое расписание"
В  Т2 я кое-как состряпал формулы для одного дня. Но они были прописаны  практически все вручную. И понимаю, что распространить их на другие дни,  или в случае добавления сотрудников (т.е. на новые столбцы и строки) -  застрелиться!
Может быть есть на такой случай более элегантное решение?

PS:  Наверное, мне помог бы какой-то способ поиска в Т1 номера строки, в  которой (слева) находится то же значение, что и в Т2 в левой ячейке  строки, в которой находится требуемая формула(?) И то же самое  относительно номера столбца.


PPS: Извинясь за то, что название темы мало отражает суть проблемы и вопроса: по-моему короткий, но верный и ясный заголовок тут просто невозможен.
1.
 
По идее часть нужно вынести и считать отдельно, дабы не пересчитывть много раз
Код
=IF(AND(BT$2>=INDEX('План-график'!$1:$1048576;MATCH($A6;'План-график'!$C:$C;0);MATCH(LOOKUP(2;1/($A$3:BT$3<>"");$A$3:BT$3);'План-график'!$3:$3;0));BT$2<=INDEX('План-график'!$1:$1048576;MATCH($A6;'План-график'!$C:$C;0);MATCH(LOOKUP(2;1/($A$3:BT$3<>"");$A$3:BT$3);'План-график'!$3:$3;0)+1));"п";"")
По вопросам из тем форума, личку не читаю.
 
"Да это просто чудо какое-то!" =)
СаБМВ, Спасибо Вам огромное! Уже второй раз Вы мне помогаете.

У Вас формула самую малость работала не верно: крайняя ячейка окрашиваемого диапазона заполнялась ошибочно. Например, если время ухода (на листе "План-график") указать 20:00, то на листе "Почасовое расписание" окрашивалась ячейка времени "20:00 - 21:00" (этому времени соответствует, например, столбец CG в диапазоне дня 20.07.2018)
Но направление мысли было дано, и методом тыка при примерном понимании происходящего я допилил формулу: добавил "+0,5/24":
Код
=ЕСЛИ(И(CG$2>=ИНДЕКС('План-график'!$1:$1048576;ПОИСКПОЗ($A18;'План-график'!$C:$C;0);ПОИСКПОЗ(ПРОСМОТР(2;1/($A$3:CG$3<>"");$A$3:CG$3);'План-график'!$3:$3;0));(CG$2+0,5/24)<=ИНДЕКС('План-график'!$1:$1048576;ПОИСКПОЗ($A18;'План-график'!$C:$C;0);ПОИСКПОЗ(ПРОСМОТР(2;1/($A$3:CG$3<>"");$A$3:CG$3);'План-график'!$3:$3;0)+1));"п";"")
Вроде сейчас работает как надо.Ещё раз спасибо!
1.
 
Эжен Несознанский,  Я хотел написать о граничных условиях , но подумал сами догадаетесь, если я правильно понял, то можно было просто  <= заменить на <.

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