Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Насущный вопрос касаемо даты в Экселе

482
24 июня 2005 года
crazytrain
123 / / 19.04.2005
есть дата начала ( скажем отправка груза), есть длительность его пути , надо посчитать дату полученя груза. казалось бы прибавляешь к дате количество дней и все, но не тут-то было, груз по субботам и воскресеньям не двигается, как быть? Как учитывать выходные дни?

Заранее спасибо.
275
24 июня 2005 года
pashulka
985 / / 19.09.2004
В любом случае Вам придётся завести отдельные ячейки, которые будут хранить даты всех выходных и праздничных дней. А затем у Вас есть как минимум два пути :
1. Самому написать обычные формулы, которые будут учитывать необходимое количество подобных дней.
2. Более простой способ, это подключить надстройку Пакет анализа, которая предоставляет возможность использовать дополнительные функции. Вам в частности нужна функция =РАБДЕНЬ() возможна Вам также окажется полезна функция =ЧИСТРАБДНИ()
482
24 июня 2005 года
crazytrain
123 / / 19.04.2005
Цитата:
Originally posted by pashulka
В любом случае Вам придётся завести отдельные ячейки, которые будут хранить даты всех выходных и праздничных дней. А затем у Вас есть как минимум два пути :
1. Самому написать обычные формулы, которые будут учитывать необходимое количество подобных дней.
2. Более простой способ, это подключить надстройку Пакет анализа, которая предоставляет возможность использовать дополнительные функции. Вам в частности нужна функция =РАБДЕНЬ() возможна Вам также окажется полезна функция =ЧИСТРАБДНИ()



Вот это полезная информация. Вы настоящий профессионал, я долго искал эту функцию, оказывается надо ыбло подключить "пакет анализа" :-)
Большое спасибо.

23K
20 ноября 2006 года
MikhailK
2 / / 20.11.2006
Ф-я "ЧИСТРАБДНИ" исключает сб и вс плюс массив праздничных дат.
Но если праздничный день поподает на выходной, то ближайший рабочий тоже становится выходным, подскажите, как это можно реализовать?

или как сделать аналог ЧИСТРАБДНИ который не выбрасывает выходные а исключает только даты из массива праздников?
267
20 ноября 2006 года
Cutty Sark
1.2K / / 17.10.2002
Мне по долгу работы приходится решать подобные задачи с американскими выходными, поэтому никакие российские надстройки мне, очевидно, не подходили. Я для себя решил эту проблему так:
Код:
Public Function СдвигПоРабочимДням(ИсходнаяДата As Date, Сдвиг As Integer) As Date
'Отсчитывает от даты нужное количество рабочих дней в любом направлении.
'ВНИМАНИЕ!!! Использует функцию "Выходной"
Dim D As Date, N As Integer, sg As Integer
   
    D = ИсходнаяДата
    N = Сдвиг
    sg = Sgn(N)
   
   
    While N <> 0
        D = D + sg
        If Not Выходной(D) Then N = N - sg
    Wend
   
    СдвигПоРабочимДням = D
End Function

Function Выходной(D As Date) As Boolean
'Определяет, выходной ли данная дата в США

    Выходной = False
    If WeekDay(D) = vbSaturday Or WeekDay(D) = vbSunday Then Выходной = True
   
    If D = #1/1/1996# Then Выходной = True
    If D = #2/19/1996# Then Выходной = True

 'Дальше длинный-предлинный список американских праздников за много лет

    If D = #11/25/2010# Then Выходной = True
    If D = #12/24/2010# Then Выходной = True
   
End Function


Раз в пару лет я продляю эту функцию дальше. И её использует весь офис.
411
20 ноября 2006 года
Serzh
136 / / 09.07.2003
А ежели возвращаемое значение функции Выходной() сделать Integer,
то можно учитывать и российское изобретение связанное с переносом выходного на следующий день, если он приходится на праздник.
Надо писать в условиях типа

If D = #1/1/1996# Then Выходной = n + 1

естественно сперва n=0, потом проверка на субботу и воскресенье с аналогичным инкрементом, а потом все российские праздники перебрать (их по моему штук 10)

В основной же функции СдвигПоРабочимДням() надо сравнивать возврат из Выходной на > 0 и из N вычитать произведение sg * Выходной(Дата)
411
20 ноября 2006 года
Serzh
136 / / 09.07.2003
А ежели возвращаемое значение функции Выходной() сделать Integer,
то можно учитывать и российское изобретение связанное с переносом выходного на следующий день, если он приходится на праздник.
Надо писать в условиях типа

If D = #1/1/1996# Then n = n + 1
....
Выходной = n

естественно сперва n=0, потом проверка на субботу и воскресенье с аналогичным инкрементом, а потом все российские праздники перебрать (их по моему штук 10)

В основной же функции СдвигПоРабочимДням() надо сравнивать возврат из Выходной на > 0 и из N вычитать произведение sg * Выходной(Дата)
267
21 ноября 2006 года
Cutty Sark
1.2K / / 17.10.2002
[QUOTE=Serzh]А ежели возвращаемое значение функции Выходной() сделать Integer ...[/QUOTE]

Нет, не очень хорошая идея.
Со всякими переносами поступать надо так.

Допустим, в этом году, 4 ноября пришлось на субботу, и выходным стал понедельник, 6 ноября. Тогда просто:
 
Код:
If D = #11/6/2006# Then Выходной = True

(кстати, у меня, если кто не понял, американский формат даты - месяц впереди)

Более хитрый случай: 9 мая попало на вторник. Тогда 6 мая, суббота, стал рабочим днём, а 8 мая, понедельник, - выходным. Это аукнется в программе тремя строчками:
 
Код:
If D = #5/6/2006# Then Выходной = False
If D = #5/8/2006# Then Выходной = True
If D = #5/9/2006# Then Выходной = True


Теперь комментарии, почему я назвал предложение Serzh не очень удачными.
1. Хочется, чтобы функция правильно работала, и когда ИсходнаяДата является выходным днём.
2. Упаси вас Бог пытаться обрабатывать праздники из года в год автоматически. Наша дума не дремлет. За последние 5 лет не было двух подряд лет с одинаковым набором праздников. Ввели 23 февраля, отменили 12 декабря и 2-е мая, перенесли 7 ноября на 4-е. Про новогодние каникулы я вообще молчу. Уж на что в американских выходных больше постоянства, и то я избежал этого соблазна - там тоже бывают изменения.
23K
24 января 2007 года
MikhailK
2 / / 20.11.2006
Большое спасибо!
263
24 января 2007 года
koltaviy
816 / / 16.12.2004
Замедленная реакция!!:D Можно было вообще не отвечать!!
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог