Работа с датой
Модератор: Naeel Maqsudov
Здраствуйте !
Подскажите пожалуста, как узнать что значение ячейки в столбце с датой входит в диапазон дат 1 квартала, 2,3 или 4 настоящего года (год смотреть системный). Это необходимо чтобы далее отбирать нужные строки для последующей работы(раз в квартал).
Заранее благодарен!
Подскажите пожалуста, как узнать что значение ячейки в столбце с датой входит в диапазон дат 1 квартала, 2,3 или 4 настоящего года (год смотреть системный). Это необходимо чтобы далее отбирать нужные строки для последующей работы(раз в квартал).
Заранее благодарен!
-
- Сообщения: 526
- Зарегистрирован: 04 фев 2007, 18:37
- Откуда: Сургут
- Контактная информация:
Здравствуйте vint.
С применением VBA, можно создать собственную функцию для решения этой задачиПростые встроенные функции Excel, для решения этой задачи, возможно существуют, но я их не знаю.
Евгений.
С применением VBA, можно создать собственную функцию для решения этой задачи
Код: Выделить всё
Public Function quart(dDate) As String
Dim i%
If Not IsDate(dDate) Then Exit Function
i = Month(CDate(dDate))
Select Case i
Case 1 To 3: quart = "первый"
Case 4 To 6: quart = "второй"
Case 7 To 9: quart = "третий"
Case 10 To 12: quart = "четвертый"
End Select
End Function
Евгений.
- Aent
- Сообщения: 1129
- Зарегистрирован: 01 окт 2006, 14:52
- Откуда: Saratov,Russia
- Контактная информация:
Ну это просто. Правда вы, vint, не указали что выводить для НЕ текущего года ..Teslenko_EA писал(а):Простые встроенные функции Excel, для решения этой задачи, возможно существуют
В предположении что в A1 дата
=ЕСЛИ(ГОД(A1)=ГОД(СЕГОДНЯ());ОКРУГЛВВЕРХ(МЕСЯЦ(A1)/3;0);"?")
Андрей Энтелис,
aentelis.livejournal.com
aentelis.livejournal.com
Да да именно на VBA.
Уважаемый Teslenko_EA , спасибо за пример, щас попробую с ним разобраться.
Кстати, а как насчет применить в цикле перебора строк функцию DatePart с "q", только как чтобы она смотрела именно текущий год.
Извините меня может это глупые вопросы, просто программированием занялся недавно и с датами ещё не работал - не хочется наделать косяков.
По поводу вопроса Aent
"Правда вы, vint, не указали что выводить для НЕ текущего года "
да, виноват, то что не попадает в указанный квартал текущего года - ни как не реагировать.
Вообщем у меня мысль такая, выдать юзеру форму с четырьмя кнопками,
"Сформировать заявку на 1 квартал", на 2-ой, 3-ий и 4-ый.,и при нажатии на кнопку например 2-ой квартал, запустить цикл перебора строк пока непусто в колонке А (там указана фамилия, она присутствует всегда, а дата может отсутствовать вообще), смотреть в колонку F с датой и если она не пустая и входит в диапазон дат 2-го квартала текущего года то копировать строку в необходимый лист в противном случае переход на следующую строку (пока есть фамилия).
Как сделать цикл я догадываюсь, что-то типа этого
'Dim d As Date 'переменная для диапазон дат 2 -го квартала текущ. года
' d = "диапазон" 'незнаю что здесь писать
'iRow = 1 'начальная строка поиска
'While (Application.ActiveWorkbook.Worksheets("ФИО").Range("A" & iRow).Value <> "") 'цикл пока не пусто
'Dim s As Variant
's = Application.ActiveWorkbook.Worksheets("ФИО").Range("F" & iRow).Value 'переменная где ищем
'If s Like d Then 'если попало в диапазон тогда копируем
'MsgBox "Можно копировать "
' 'здесь процедура копирования
'End If
'iRow = iRow + 1 'Если нет, идём на след. строку ( цикл )
'Wend 'Конец цикла While
а вот как критерий отбора организовать чтото не доходит.
Буду копаться дальше.
Если есть мысль, подскажите пожалуста толкните в нужное русло.
Зараннее благодарю.
Уважаемый Teslenko_EA , спасибо за пример, щас попробую с ним разобраться.
Кстати, а как насчет применить в цикле перебора строк функцию DatePart с "q", только как чтобы она смотрела именно текущий год.
Извините меня может это глупые вопросы, просто программированием занялся недавно и с датами ещё не работал - не хочется наделать косяков.
По поводу вопроса Aent
"Правда вы, vint, не указали что выводить для НЕ текущего года "
да, виноват, то что не попадает в указанный квартал текущего года - ни как не реагировать.
Вообщем у меня мысль такая, выдать юзеру форму с четырьмя кнопками,
"Сформировать заявку на 1 квартал", на 2-ой, 3-ий и 4-ый.,и при нажатии на кнопку например 2-ой квартал, запустить цикл перебора строк пока непусто в колонке А (там указана фамилия, она присутствует всегда, а дата может отсутствовать вообще), смотреть в колонку F с датой и если она не пустая и входит в диапазон дат 2-го квартала текущего года то копировать строку в необходимый лист в противном случае переход на следующую строку (пока есть фамилия).
Как сделать цикл я догадываюсь, что-то типа этого
'Dim d As Date 'переменная для диапазон дат 2 -го квартала текущ. года
' d = "диапазон" 'незнаю что здесь писать
'iRow = 1 'начальная строка поиска
'While (Application.ActiveWorkbook.Worksheets("ФИО").Range("A" & iRow).Value <> "") 'цикл пока не пусто
'Dim s As Variant
's = Application.ActiveWorkbook.Worksheets("ФИО").Range("F" & iRow).Value 'переменная где ищем
'If s Like d Then 'если попало в диапазон тогда копируем
'MsgBox "Можно копировать "
' 'здесь процедура копирования
'End If
'iRow = iRow + 1 'Если нет, идём на след. строку ( цикл )
'Wend 'Конец цикла While
а вот как критерий отбора организовать чтото не доходит.
Буду копаться дальше.
Если есть мысль, подскажите пожалуста толкните в нужное русло.
Зараннее благодарю.
- Aent
- Сообщения: 1129
- Зарегистрирован: 01 окт 2006, 14:52
- Откуда: Saratov,Russia
- Контактная информация:
Vint, для публикации текста программ на этом форуме принято использовать теги [noparse][/noparse]
См: http://forum.developing.ru/misc.php?do=bbcode
Код: Выделить всё
....
См: http://forum.developing.ru/misc.php?do=bbcode
Андрей Энтелис,
aentelis.livejournal.com
aentelis.livejournal.com
Извиняюсь. Обещаю, больше не буду.Aent писал(а):Vint, для публикации текста программ на этом форуме принято использовать теги [noparse][/noparse]Код: Выделить всё
....
См: http://forum.developing.ru/misc.php?do=bbcode

--------------------------------------------------------------------------------
Добавлено сообщение
--------------------------------------------------------------------------------
Вот выдумал!
Код: Выделить всё
Dim k As Variant 'переменная номера квартала
k = 2 'например для 2-го квартала можно будет брать это из формы
iRow = 1 'начальная строка поиска и цикл пока не пусто ФИО
While (Application.ActiveWorkbook.Worksheets("ФИО").Range("A" & iRow).Value <> "")
Dim s As Variant 'переменная где ищем
s = Application.ActiveWorkbook.Worksheets("ФИО").Range("F" & iRow).Value
Dim TheDate As Date 'переменная для DatePart
TheDate = Application.ActiveWorkbook.Worksheets("ФИО").Range("F" & iRow).Value
Dim d As Variant 'переменная для выяснения принадлежности к кварталу, даёт 1,2,3 или 4
d = DatePart("q", TheDate)
If (s <> "") And (d = k) Then 'если попало в диапазон тогда копируем
MsgBox "Можно копировать "
'здесь процедура копирования
End If
iRow = iRow + 1 'Если нет, идём на след. строку ( цикл )
Wend 'Конец цикла While
Подскажите пожалуста куда и что надо влепить чтобы он реагировал только на системный год.
Спасибо!
--------------------------------------------------------------------------------
Добавлено сообщение
--------------------------------------------------------------------------------
Объясните мне дураку почему функция
Код: Выделить всё
Dim d3 As Date
d3 = Year(Date)
MsgBox d3
У меня уже нервы сдают.
ХЕЕЕЕЕЕЛП.
- mc-black
- Сообщения: 250
- Зарегистрирован: 08 май 2008, 16:09
- Откуда: Россия, Нижний Новгород
- Контактная информация:
Тип переменной надо сделать целый (Integer, либо Long), а не Date, так как номер года сам по себе датой и временем не является.
На заказ: VBA, Excel mc-black@yandex.ru
-
- Сообщения: 526
- Зарегистрирован: 04 фев 2007, 18:37
- Откуда: Сургут
- Контактная информация:
Здравствуйте vint.
"цикл перебора" не используется, а функцию DatePart применить конечно же можно.
Код дополните одной строкой:После размещения исправленного кода в модуле документа, использование функции в листе документа будет выглядеть так:
=quart(D10)
D10 ячейка данные которой проверяются на принадлежность даты (если она содержит дату) кварталу текущего года.
Евгений.
"цикл перебора" не используется, а функцию DatePart применить конечно же можно.
Код дополните одной строкой:
Код: Выделить всё
Public Function quart(dDate) As String
If Not IsDate(dDate) Then Exit Function
If Not Year(CDate(dDate)) = Year(Date) Then Exit Function ' !!!
Select Case DatePart("q", dDate)
Case 1: quart = 1 '"первый"
Case 2: quart = "II" '"второй"
Case 3: quart = "третий"
Case 4: quart = "IV" ' "четвертый"
End Select
End Function
=quart(D10)
D10 ячейка данные которой проверяются на принадлежность даты (если она содержит дату) кварталу текущего года.
Евгений.
Всё разобрался.
Всем спасибо за помощь !!!
Вопрос закрыт.
Всем спасибо за помощь !!!
Вопрос закрыт.