Динамический график работы в зависимости от дня недели - PullRequest
0 голосов
/ 25 октября 2018

Я пытаюсь создать график работы, который корректирует дату начала и окончания задания (в данном случае «урок») в зависимости от того, будет ли это день недели и / или выходные.Я назначил значение с точки зрения полных дней для каждого «урока», основываясь на дне недели.Я надеюсь, что если урок занимает 2 дня для завершения в течение недели, а диапазон 'start.date:start.date + 2' не содержит дня выходных, тогда конечной датой будет 'start.date + 2'(например, понедельник + 2).Точно так же, если тот же урок занял бы 1 день на выходных, а диапазон 'start.date:start.date + 1' не содержит дня недели, тогда конечной датой будет 'start.date + 1'(например, суббота + 1).

Однако сложная часть заключается в том, что этот диапазон содержит сочетание дня недели и выходных.В этой ситуации я бы хотел переключиться между двумя длинами.Например, если все уроки занимают 2 дня в течение недели и 1 день в выходные, если:

start.date(1) = beginning of Friday, end.date(1) = halfway through Saturday (1 weekday + 0.5 weekend).
start.date(2) = halfway through Saturday, end.date(2) = halfway through Sunday.
start.date(3) = halfway through Sunday, end.date(3) = end of Monday (0.5 weekend + 1 weekday).

Я приложил электронную таблицу вместе с изображениями, показывающими формулы, которые у меня есть в настоящее время.Он работает нормально до даты окончания в ячейке H11.Он должен читаться во вторник (как J11 должен = 1, а K11 должен = 0,5)

https://1drv.ms/x/s!ApoCMYBhswHzhttuLQmKNVw7G6pHSw

Если это лучше подходит для Python или R, или даже VBA, тогда я 'Я более чем рад выслушать предложения по этим вопросам (в том числе по соответствующим вопросам, которые нужно прочитать, чтобы я мог начать писать необходимый код), но у меня просто нет необходимых знаний, чтобы начать их достойно.

Спасибо за вашу помощь.

enter image description here

enter image description here

1 Ответ

0 голосов
/ 25 октября 2018

Вы должны вставить этот макрос в вашу рабочую книгу, я упомянул шаги, но если вам трудно, вы можете сообщить мне.

  • Нажмите Alt + F11 в вашем окне Excel
  • Редактор VBA откроется в новом окне, в этом окне есть левая панель, называемая окном проекта
  • Щелкните правой кнопкой мыши эту книгу в окне проекта и вставьте модуль.
  • Вставитьприведенный ниже код в недавно открытом текстовом редакторе

.

Function calcEndDate(start_date, weekday_duration, weekend_duration)

    ratio = weekday_duration / weekend_duration
    temp_date = start_date
    day_name = ""

    For i = 1 To weekday_duration
        day_name = Format(temp_date, "dddd")
        If (day_name = "Saturday" Or day_name = "Sunday") Then
            temp_date = temp_date + 1 / ratio
        Else
            temp_date = temp_date + 1
        End If
    Next
    calcEndDate = temp_date

End Function

Теперь вставьте эту формулу в любую ячейку, она рассчитает дату окончания, используя дату начала и продолжительность

calcEndDate (start_date, weekday_duration, Sunday_duration)

После этого вам нужно сохранить рабочую книгу в формате xlsm (рабочая тетрадь с поддержкой макросов)

Например, для вашей первой строки это будет= calcEndDate (F3, B3, C3)

Затем измените формат этого столбца на мм / дд / гггг чч: мм, чтобы вы могли знать, заканчивается ли урок через полдня.

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