Позвольте мне предвосхитить этот ответ, сказав, что я тоже не считаю эффективным, не говоря уже о наиболее эффективным, подход к этой проблеме, и он, безусловно, не прост. Однако я должен выразить это более решительно, чтобы не было путаницы: это НЕ хороший способ решить эту проблему! Учитывая это, я не смог устоять перед этим вызовом.
Я постараюсь опубликовать достаточно информации, чтобы вы могли скопировать мой файл Excel.
Если это не очевидно, этоможно расширить на любое количество строк в исходной таблице сотрудников с помощью «+». Вы бы начали, положив в исходную таблицу. Затем обновите имена двух диапазонов, показанных ниже, чтобы забрать всех ваших сотрудников и все ваши данные. Пропустите строку, вставьте строки с «1» по «31», а затем вставьте две основные формулы (то есть те, которые начинаются в ячейках A9 и B9 ). в строке ниже убедитесь, что заменили все ссылки на строки 8 и 9 на новые применимые начальные строки, затем перетащите их вниз на столько строк, сколько вам нужно, чтобы выбрать плюсы в последней строке исходных данных! Добавьте условное форматирование впоследствии на весь диапазон, если вы хотите, чтобы цветовая схема для B / M / E / N (начало, середина, конец, следующая) отображалась автоматически (необязательный шаг). Затем создайте раздел одинакового размера под разделом B / M / E / N, чтобы вставить формулу «Если 'M”, то тогда «+ пусто».
Вот снимок экрана сетки изфайл примера, который я создал:
Вам потребуется создать следующие именованные диапазоны:
По желанию, если вы хотите, чтобы цвета на изображении появлялись автоматически, вы можете создать следующее условное форматирование:
(Возможно, вам будет проще ввести условное форматирование после ввода формул, но если вы хотите вставить его заранее, убедитесь, что вы вставляете специальные формулы только в этот раздел)
Теперь,с указанными диапазонами, вот что нужно поместить в сетку листа:
Шаг 1: Жесткий код данных до строки 8.
Шаг 2: Введите следующую формулу в ячейку A9 и перетащите вниз в ячейку A22
=IF(B8=1,INDEX(rngEmps,1),IF(COUNTIF(OFFSET(rngData,MATCH(A8,rngEmps,0)-1,,1,),"+")=COUNTIF(OFFSET($B$8:$AF8,MATCH(A8,$A$8:$A8,0)-1,,COUNTA($A$8:$A8)+COUNTBLANK($A$8:$A8)-(MATCH(A8,$A$8:$A8,0)-1),),"M"),INDEX(rngEmps,MATCH(A8,rngEmps,0)+1),A8))
Шаг 3: Введите следующую формулу в ячейку B9 и перетащите вправо и вниз в ячейку AF22
=IF($A9=$A8,IF(OR(B8="B",B8="M"),"B",IF(B8="E",IF(A9="B","B","E"),IF(OR(A9="B",A9="M"),"M","N"))),IF(B$2=1,IF(INDEX(rngData,MATCH($A9,rngEmps,0),1)="+","M","B"),IF(INDEX(OFFSET(rngData,MATCH($A9,rngEmps,0)-1,,1),1,B$8)="+",IF(OR(A9="E",A9="N"),"N","M"),IF(A9="B","B","E"))))
Дайте мне знать, если получитеЗастрял на этом, Рагнар. Кроме того, я предполагаю, что вы можете воссоздать нижнюю часть с помощью символов "+".
ОБНОВЛЕНИЕ / РЕДАКТИРОВАНИЕ: Ранее в основной формуле (ячейка A9) была небольшая ошибкачто я опубликовал вчера вечером (23.10.2009), потому что он неправильно обрабатывал первый столбец как «+»;это должно быть исправлено сейчас. Кроме того, в общем, я не потратил время на тщательную оптимизацию этих формул (например, максимально свести к минимуму повторную работу, обеспечить идеальный порядок размещения операторов IF и т. Д.). Это должно быть больше для доказательства концепции. Пожалуйста, оставьте комментарий, если вы обнаружите ошибку в моем решении. Спасибо!