whateverlover, так попробую описать алгоритм:
1 цепочка перемещений1. идем по порядку по столбцу ПЕРЕМЕЩЕНИЕ, как только попадается не пустое значение и нет порядкового номера в доп. столбце нумерации, проверяем последний порядковый номер в служ. столбце нумерации, если в столбе вообще пусто, это будет 1 по списку. В примере: Пупкин перемещается на место директора
2. проверяем фамилию в столбце ФИО на позиции "Директор" и ищем ее в столбце ПЕРЕМЕЩЕНИЕ, это будет 2 по списку. В примере: Иванов перемещается на место помощника
3. проверяем фамилию в столбце ФИО на позции "Помощник" и ищем ее в столбце ПЕРЕМЕЩЕНИЕ, это будет 3 по списку. В примере: Сидоров перемещает на место зама.
4. проверяем фамилию в столбце ФИО на позции "Зам" и ищем ее в столбце ПЕРЕМЕЩЕНИЕ, это будет 4 по списку. В примере: Петров перемещает на место раба.
Цепочка закрылась, по доп. столбцу, где мы проставим порядковый номер, проверить, что у пупкина есть номер (№ 1) и значит не нужно дублировать перемещение.
Цикл запускается снова с начала списка и продолжает нумеровать список далее по порядку, пока напротив всех фамилий в столбце перемещение не будет номера по порядку в служебном столбце.
Если попадается пустое значение в столбце перемещение, пропускаем.
2 цепочка перемещений5. идем по порядку по столбцу ПЕРЕМЕЩЕНИЕ, как только попадается не пустое значение и нет порядкового номера в доп. столбце нумерации, проверяем последний порядковый номер в служ. столбце нумерации, последний был № 4, значит это будет 5 по списку. В примере:Карпов перемещает на место Дворника.
6. проверяем фамилию в столбце ФИО на позиции "Пёсель" и ищем ее в столбце ПЕРЕМЕЩЕНИЕ, это будет 6 по списку. В примере: Гавкин перемещается на место Пёселя