Заполните строки на основе календарных данных - PullRequest
1 голос
/ 23 октября 2019

В Excel у меня есть таблица сотрудников / дат, в которых сотрудники находятся на вертикальной оси, а даты - на горизонтальной. В таблице есть данные о выходных и отпусках сотрудников, показанные как «+».

Мне нужно что-то, что будет заполнять одно и то же имя несколькими строками в зависимости от того, сколько раз последовательность «+» запускается и будетвернуть в каждом ряду выходные дни, которые вместе, как показано:

enter image description here

Раскраски только для целей понимания. Все ячейки с «без заполнения». Это необходимо сделать для огромной базы данных из 3000 человек.

1 Ответ

0 голосов
/ 24 октября 2019

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

Я постараюсь опубликовать достаточно информации, чтобы вы могли скопировать мой файл Excel.

Если это не очевидно, этоможно расширить на любое количество строк в исходной таблице сотрудников с помощью «+». Вы бы начали, положив в исходную таблицу. Затем обновите имена двух диапазонов, показанных ниже, чтобы забрать всех ваших сотрудников и все ваши данные. Пропустите строку, вставьте строки с «1» по «31», а затем вставьте две основные формулы (то есть те, которые начинаются в ячейках A9 и B9 ). в строке ниже убедитесь, что заменили все ссылки на строки 8 и 9 на новые применимые начальные строки, затем перетащите их вниз на столько строк, сколько вам нужно, чтобы выбрать плюсы в последней строке исходных данных! Добавьте условное форматирование впоследствии на весь диапазон, если вы хотите, чтобы цветовая схема для B / M / E / N (начало, середина, конец, следующая) отображалась автоматически (необязательный шаг). Затем создайте раздел одинакового размера под разделом B / M / E / N, чтобы вставить формулу «Если 'M”, то тогда «+ пусто».

Вот снимок экрана сетки изфайл примера, который я создал:

enter image description here

Вам потребуется создать следующие именованные диапазоны:

enter image description here

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

enter image description here

(Возможно, вам будет проще ввести условное форматирование после ввода формул, но если вы хотите вставить его заранее, убедитесь, что вы вставляете специальные формулы только в этот раздел)

Теперь,с указанными диапазонами, вот что нужно поместить в сетку листа:

Шаг 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 и т. Д.). Это должно быть больше для доказательства концепции. Пожалуйста, оставьте комментарий, если вы обнаружите ошибку в моем решении. Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...