powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Количество праздничных дней
8 сообщений из 8, страница 1 из 1
Количество праздничных дней
    #32843426
DMV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть график отпусков (создан в Excel 2003). В нем учтены: дата начала отпуска; продолжительность. В файле есть лист с перечнем дат праздничных дней, на которые соотвественно продлевается отпуск, если они попадают в период отпуска. Как автоматически подсчитать количество праздников приходящихся на период отпуска?
...
Рейтинг: 0 / 0
Количество праздничных дней
    #32843438
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
И еще не забыть проверку: добавили дни - и опять проверили, не попали ли праздники на добавленные дни. И так until праздников нет.
...
Рейтинг: 0 / 0
Количество праздничных дней
    #32843442
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
А проверка простая:
datediff от даты начала и даты праздника сравнивается с продолжительностью.
...
Рейтинг: 0 / 0
Количество праздничных дней
    #32843447
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
И плюс учесть вариант, когда отпуск перелезает на следующий год.
...
Рейтинг: 0 / 0
Количество праздничных дней
    #32843804
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ух ты :)
Ну ВС и замутил

Я бы для простоты понимания сделал функцию
примерно такую:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
входные параметры (нач.отп., кон.отп.)

 цикл  по i  от  нач.отп.  до  кон.отп.
   если  i праздник  то 
    кон.отп. = кон.отп. + 1
    ... ' ну и что-то тут еще надо считать
   кон.если 
 кон.цикл 
...
Рейтинг: 0 / 0
Количество праздничных дней
    #32844380
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Задача решается составлением функции, при этом не единственным образом
Вот вариант решения с использованием 4 встроенных функций, из которых
составим одну комбинированную.
Это функции ПОИСКПОЗ (MATCH), и СЧЕТ (COUNT), ЕНД (ISNA), и ЕСЛИ (IF)

Пусть даты начала отпусков расположены в столбце A, в строках с 4 по 7, введенные в виде чисел в формате даты.
Длительность отпуска в днях в столбце B в виде целых чисел
Временно введем в клетке C формулу C4=B4+A4 и протянем ее вниз для
заполнения диапазона плановых дат завершения отпуска.
(Впоследствии от нее можно будет отказаться, напрямую подставив
соответствующее выражение в составляемую формулу).
Пусть перечень выходных введен в строке 2 в столбцах I:P в виде дат.
Значения расположены по возрастанию слева направо.
Дополним справа текстовым значением «Z» и присвоим получившемуся
диапазону с выходными имя «Выходные»

Составление формулы состоит из следующих шагов.
Будем искать наибольшее значение в диапазоне Выходные, которое меньше либо равно, чем дата начала отпуска и возвращать номер соответствующего столбца в диапазоне Выходные. Если такого значения не найдется, будем возвращать 1 в качестве номера столбца.
Для этого в клетке D4 вводим формулу
=ЕСЛИ(ЕНД(ПОИСКПОЗ(A4;Выходные;1));1;ПОИСКПОЗ(A4;Выходные;1))
и распространяем эту формулу вниз до конца списка работников.
Аналогичную по смыслу формулу вводим в столбец E4, здесь будет возвращаться номер столбца, соответствующей дате. Отличие состоит в том, что если мы попадаем на последний столбец, то надо добавить 1 к результату.
Таким образом формула в столбце E4 примет вид

=ЕСЛИ(ЕНД(ПОИСКПОЗ(C4;Выходные;1));0;ЕСЛИ(СЧЁТ(Выходные)=ПОИСКПОЗ(C4;Выходные;1);ПОИСКПОЗ(C4;Выходные;1)+1;ПОИСКПОЗ(C4;Выходные;1)))

В следующем столбце F4 запишем
=E4-D4
Это собственно и есть результат.
Теперь осталось развернуть его в окончательную формулу, подставив вместо E4 b D4 формулы соответствующих клеток и на последнем шаге подставить выражение для вычисления планового дня завершения отпуска без учета праздников.
Результирующий вид формулы в столбце F4 будет таким:

=ЕСЛИ(ЕНД(ПОИСКПОЗ(A4+B4;Выходные;1));0;ЕСЛИ(СЧЁТ(Выходные)=ПОИСКПОЗ(A4+B4;Выходные;1);ПОИСКПОЗ(A4+B4;Выходные;1)+1;ПОИСКПОЗ(A4+B4;Выходные;1)))-ЕСЛИ(ЕНД(ПОИСКПОЗ(A4;Выходные;1));0;ПОИСКПОЗ(A4;Выходные;1))

Теперь можно вычистить все промежуточные формулы в столбцах C, D, E
И аккуратно перенести получившуюся формулу в столбец C
...
Рейтинг: 0 / 0
Количество праздничных дней
    #32844385
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
про "дополним" - поторопился. ничего дополнять не надо.

(с выражением лица)
...
Рейтинг: 0 / 0
Количество праздничных дней
    #32844738
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
формулка-то не работает. Наверно умнее ее составить заново с нуля. Пока же подправил по месту. Как будто это больше на правду похоже.

вот результат

Код: plaintext
1.
2.
=ЕСЛИ(ЕНД(ПОИСКПОЗ(A3+B3;Выходные; 1 )); 1 ;ЕСЛИ(СЧЁТ(Выходные)=ПОИСКПОЗ(A3+B3;Выходные; 1 );ПОИСКПОЗ(A3+B3;Выходные; 1 )+ 1 ;ПОИСКПОЗ(A3+B3;Выходные; 1 )))
-ЕСЛИ(ИНДЕКС(Выходные; 1 ;ЕСЛИ(ЕНД(ПОИСКПОЗ(A3;Выходные; 1 )); 1 ;ПОИСКПОЗ(A3;Выходные; 1 )))=A3;
ЕСЛИ(ЕНД(ПОИСКПОЗ(A3;Выходные; 1 )); 1 ;ПОИСКПОЗ(A3;Выходные; 1 ))- 1 ;ЕСЛИ(ЕНД(ПОИСКПОЗ(A3;Выходные; 1 )); 1 ;ПОИСКПОЗ(A3;Выходные; 1 )))

(с выражением лица)
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Количество праздничных дней
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]