Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.82/22: Рейтинг темы: голосов - 22, средняя оценка - 4.82
31 / 17 / 0
Регистрация: 31.05.2010
Сообщений: 102
1

Есть ли в VBA функция, позволяющая определить пересечение одного диапазона дат с другим диапазоном дат?

11.10.2010, 19:39. Показов 4080. Ответов 2
Метки нет (Все метки)

Привет Все! Задача такова: имеем 1 диапазон даты, например, 01.10.10-30.10.10
имеем 2 диапазон даты, например, 15.09.10-15.10.10
Функция должна вернуть их пересечение: 01.10.10-15.10.10
Есть ли в VBA такая стандартная функция. Или может кто городил для себя такое?

Добавлено через 21 минуту
забыл уточнить, что речь про access, а не про excell, где это, вероятно, и есть, не может не быть, иначе снова им позор.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.10.2010, 19:39
Ответы с готовыми решениями:

Пересечение интервалов дат в Excel. Вывод дат пересечения интервалов
Добрый день. Помогите пожалуйста. Мне надо найти совпадения в периодах работы одного и того же...

Запрос с диапазоном дат
Помогите с написанием кода! Через ADOQuery Запрос с диапазоном дат.

Запросы с диапазоном дат
Знает ли кто-нибудь как сделать запрос в ADOQuery, чтобы произвести фильтрацию по заданному...

Операция с диапазоном дат..
Здравствуйте..!! Подскажите пожалуйста что не так я делаю.. мне необходимо сделать таблицу с...

2
Частенько бываю
749 / 330 / 42
Регистрация: 20.06.2007
Сообщений: 854
12.10.2010, 07:15 2
Насколько я знаю, такой готовой функции в VBA нет, а если бы была, то одинаково хорошо работала бы и в Excel и в Access. Но ничего сложного нет написать её самому.
Что то типа:
Visual Basic
1
2
НачалоДиапазонаПересечения = IIf(Date1Start >= Date2Start, Date1Start, Date2Start)
КонецДиапазонаПересечения = IIf(Date1End <= Date2End, Date1End, Date2End)
1
31 / 17 / 0
Регистрация: 31.05.2010
Сообщений: 102
13.10.2010, 00:23  [ТС] 3
Функции действительно нет, пришлось писать свою. DS, DF, S, F - имеют формат дата DS, DF - старт, финиш фильтра, S, F - старт финиш неких событий, причем событие может быть не финализировано, т.е F может быть Null :
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
Public Function фПересечениеДат(DS, DF, S, F) 'возвращает длительность пересечения диапазонов в неделях
Dim SS As Date
Dim FF As Date
If IsNull(F) Then 'не финализировано
    If S <= DS Then 'проверяем факт наличия пересечения: "слева в бесконечность"
    SS = DS
    FF = DF
    ElseIf S < DF Then '"изнутри в бесконечность"
    SS = S
    FF = DF
    Else
    фПересечениеДат = -1 'нет пересечения диапазонов
    End If
Else
    If Not (DS >= F Or DF <= S) Then 'условие пересечения диапазонов (проверяем факт наличия пересечения)
        If S < DS And F <= DF Then ' пересекает только левую границу
        SS = DS
        FF = F
        ElseIf S < DS And F > DF Then ' пересекает левую и правую границы
        SS = DS
        FF = DF
        ElseIf S >= DS And F <= DF Then ' внутри
        SS = S
        FF = F
        ElseIf S >= DS And F > DF Then ' пересекает только правую границу
        SS = S
        FF = DF
        End If
    Else
    фПересечениеДат = -1
    End If
End If
'фПересечениеДат = DateDiff("ww", SS, FF, 2, 0)
If Not фПересечениеДат = -1 Then
фПересечениеДат = Abs(Int((SS - FF) / 7)) 'недели вычисляются специфически - так надо
End If
End Function
Функция замечательно работает, но БОЖЕ УПАСИ НАПИСАТЬ ВОТ ТАК:
Visual Basic
1
Public Function фПересечениеДат(DS As Date, DF As Date , S As Date, F As Date)
Условие:
Visual Basic
1
If IsNull(F) Then
напрочь отказывается работать и признавать F за Null, когда она и есть Null. И связанная с этим-же проблема: В форме невозможно для поля F задать условное форматирование на событие когда Null. ПОЛЕ НЕ ФОРМАТИРУЕТСЯ!!!
Кто знает - ЧТО ЗА ЧУДО - пишите. Очередная блоха Access???
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.10.2010, 00:23

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Задача с диапазоном дат
Задача следующая: Необходимо задать сезонную цену в течении года и определять её по заданной дате....

SQL запрос с диапазоном дат
Помогите плиз с такой проблемой, имеется в бд поля вида dd.mm.yyyy , например 03.03.2009 , как ...

Копирование файлов с конкретным диапазоном дат
Помогите пожалуйста. Есть каталог 1 в котором куча папок и файлов. Необходимо скопировать из этого...

Сравнение текущей даты с диапазоном дат
Здравствуйте! Подскажите пожалуйста. Как можно реализовать сравнение текущей даты с определенным...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.