Страницы: 1
RSS
Поиск сотрудников с не пересекающимися сменами
 
Коллеги, добрый день! Прошу помощи в решении задачи. Необходимо распределить сотрудников по парам, чтобы их смены не пересекались между собой. Пример во вложении.
 
Murderface_, А можно без формул, в двух предложениях описать, чего собственно надо найти?
Вот горшок пустой, он предмет простой...
 
PooHkrd, так я же описал. Нужно для каждого сотрудника найти человека с противоположным графиком. Т. е. если у сотрудника 1 января выходной, то ему в пару нужно найти человека, у которого 1 января рабочий день. Но сделать это нужно по всем дням (в моем примере их 12). Не должно быть ситуации, чтобы смены сотрудников пересекались, т. к. у них будет одно рабочее место.
 
Добрый день!
С разбивкой по времени. Даже в один день. Формула массива:
Код
=ЕСЛИОШИБКА(ИНДЕКС(A:A;ПОИСКПОЗ(A2;AA$1:AA1;));ИНДЕКС(A:A;МИН(ЕСЛИ(МУМНОЖ(ЕСЛИОШИБКА((--ЛЕВБ(B2:M2;5)<--ПРАВБ(B3:M$210;5))*(--ПРАВБ(B2:M2;5)>--ЛЕВБ(B3:M$210;5)););ТРАНСП(B$1:M$1))+СЧЁТЕСЛИ(AA$1:AA1;A3:A$210)=0;СТРОКА(3:$210)))))
 
Светлый, спасибо Вам огромное! Вот со временем прямо то, что нужно. Вот только формула выглядит для меня как какое то колдунство  :D  
 
Можно немного упростить:
Код
=ИНДЕКС(A:A;ЕСЛИОШИБКА(ПОИСКПОЗ(A2;AA$1:AA1;);МИН(ЕСЛИ(МУМНОЖ(ЕСЛИОШИБКА((-ЛЕВБ(B2:M2;5)>-ПРАВБ(B3:M$210;5))*(-ПРАВБ(B2:M2;5)<-ЛЕВБ(B3:M$210;5)););ТРАНСП(B$1:M$1))+СЧЁТЕСЛИ(AA$1:AA1;A3:A$210)=0;СТРОКА(3:$210)))))
 
Светлый, спасибо, теперь все совсем просто) Ушел читать про умножение матриц 8-0  
 
Прочитал, потом еще раз прочитал. Много думал. Объясните мне пожалуйста как это работает.
Код
=ИНДЕКС(A:A;ЕСЛИОШИБКА(ПОИСКПОЗ(A2;AA$1:AA1;);
тут все понятно ИНДЕКСом мы ищем напарника, если напарник был найден ранее, то тянем его из столбца с результатами.
Код
МИН(ЕСЛИ(МУМНОЖ(ЕСЛИОШИБКА((-ЛЕВБ(B2:M2;5)>-ПРАВБ(B3:M$210;5))*(-ПРАВБ(B2:M2;5)<-ЛЕВБ(B3:M$210;5)););ТРАНСП(B$1:M$1))+СЧЁТЕСЛИ(AA$1:AA1;A3:A$210)=0;СТРОКА(3:$210)))))
тут МИН в начале в сочетании со СТРОКА в конце выводит номер индекса по первому вхождению
Код
ЕСЛИОШИБКА((-ЛЕВБ(B2:M2;5)>-ПРАВБ(B3:M$210;5))*(-ПРАВБ(B2:M2;5)<-ЛЕВБ(B3:M$210;5));)
тут мы получаем массив 1 и 0 где искомые смены не совпадают с данными в массиве, в котором ведем поиск


Я не понимаю как работает вот это вот
Код
ТРАНСП(B$1:M$1))+СЧЁТЕСЛИ(AA$1:AA1;A3:A$210)=0
мы траспонируем строку с датами и считаем количество уже найденных напарников, но для чего? и как это работает внутри функции МУМНОЖ?
Страницы: 1
Наверх