Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Функция ДАТА() / 25 сообщений из 31, страница 1 из 2
02.03.2007, 12:04:49
    #34366214
Deggasad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция ДАТА()
1) Как в макросе сделать действие аналогичное действию, которое на рабочем листе делает функция ДАТА(год;месяц;число)?

2) Или как то по другом найти дату, отстоящую от текущей на заданное количество месяцев?
...
Рейтинг: 0 / 0
02.03.2007, 13:10:32
    #34366478
vkodor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция ДАТА()
Функция DateAdd
DateAdd(Interval, Number, Date)
Функция DateAdd используется для прибавления или вычитания указанного интервала времени. Тип данных Date работает только с датами диапазона от 100 г.н.э. до 9999 г.н.э. Поэтому, если DateAdd выходит за пределы этого диапазона, то генерируется ошибка стадии выполнения Invalid procedure call or argument. Функция DateAdd не возвращает неправильных дат. Следующее выражение добавляет один месяц к 31 января:

DateAdd("m", 1, "31-Jan-95")

В данном случае будет возвращена дата 28-фев-95, а не 31-фев-95. Если в качестве аргумента date указать 31-янв-96, то возвращается дата 29-фев-96, поскольку 1996 год является високосным

Возвращаемое значение
Возвращает значение типа Variant(Date), содержащее дату, к которой добавлен указанный интервал

Параметры
Функция содержит именованные аргументы
Interval
Обязательный аргумент типа String, указывающего тип добавляемого временного интервала: yyyy Год
q Квартал
m Месяц
y День года
d День месяца
w День недели
ww Неделя
h Часы
n Минуты
s Секунды
Interval не чуствителен к регистру букв. Литерал должен быть заключен в кавычки. Для добавления дней можно использовать любое значение интервала дня:"y", "w" или "d"
Number
Обязательный аргумент - числовое выражение, указывающее число добавляемых временных интервалов. Может быть положительным(для получения более поздних дат) и отрицательным(для получения более ранних дат). Если Number дробное число, то дробная часть отбрасывается(не округляется) системой
Date
Обязательный аргумент типа Variant(Date) или литерал даты(буквенное обозначение даты, представляющий дату, к которой прибавляется указанный временной интервал
Пример
' Вычисляем дату на 15 дней более позднюю, чем текущая
Код: plaintext
1.
2.
3.
4.
5.
Dim Today
Dim NewDate As Date   
Today=Date ' узнаем текущую системную дату
NewDate=DateAdd("y", 15 ,Today)
 ' Преобразуем в строку и выводим в заголовке формы
Form1.Caption = CStr(NewDate)
...
Рейтинг: 0 / 0
02.03.2007, 13:13:14
    #34366486
vkodor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция ДАТА()
забыл указать
это из "vbfunction.chm"
© 1999-2001 А.Климов
Русский_Проект
...
Рейтинг: 0 / 0
02.03.2007, 13:21:08
    #34366520
Deggasad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция ДАТА()
Спасибо!
А фукция эквивалентная функции рабочего листа ДАТА () оказалась
DateSerial(Year(Date), Month(Date)-3, Day(Date))
...
Рейтинг: 0 / 0
02.03.2007, 13:23:58
    #34366535
Deggasad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция ДАТА()
vkodorзабыл указать
это из "vbfunction.chm"
© 1999-2001 А.Климов
Русский_Проект

это книга?
Если да, то нет ли электронной версии?
...
Рейтинг: 0 / 0
02.03.2007, 13:41:50
    #34366614
KL (XL)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция ДАТА()
vkodor уже ответил на вторую часть вопроса

1) Чтобы не оставить первую часть вопроса без ответа...

Код: plaintext
1.
2.
3.
4.
Sub test()
    msg = msg & DateSerial( 2007 ,  3 ,  2 ) & Chr( 13 )
    msg = msg & DateValue("2007-3-2")
    MsgBox msg
End Sub

2) Чисто в информационном плане: теоретически в VBA (Excel) можно использовать функции Пакета Анализа, практически я этого не рекомендую (особенно если есть идентичная функция в VBA как в данном случае) из-за того, что функции Пакета Анализа не переводятся автоматически на язык текущей локали и требуют либо включения надстройки, либо ссылки в проекте VBA.

Опция 1:

- В меню Сервис-Надстройки включить Пакет Анализа...
- В VBA использовать след. синтаксис:

Код: plaintext
1.
2.
3.
'Русск.
MsgBox Application.Run("ATPVBAEN.XLA!ДАТАМЕС", Date,  3 )
'Англ.
MsgBox Application.Run("ATPVBAEN.XLA!EDATE", Date,  3 )


Опция 2:
- в окне Редактора VBA создать ссылку на файл ATPVBAEN.XLA через меню Сервис>Ссылки...
- использовать функции Пакета Анализа как родные функции VBA:

Код: plaintext
1.
2.
3.
'Русск.
MsgBox ДАТАМЕС(Date,  3 )
'Англ.
MsgBox EDATE(Date,  3 )

KL
[MVP - Microsoft Excel]
...
Рейтинг: 0 / 0
02.03.2007, 13:42:32
    #34366619
Deggasad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция ДАТА()
Помогите пожалуйста разобраться

Не работает следующая штука

Код: plaintext
1.
2.
Dim FirstDate As Date

x = ActiveWorkbook.Sheets("Операц").Range("A10:A280").Find(FirstDate).address

Не работает потому-что Range("A10:A280") - содержит даты в формате "dd.mmm.yy", а не стандартный формат.

Пробовал так

Код: plaintext
1.
2.
Dim FirstDate As Date

x = ActiveWorkbook.Sheets("Операц").Range("A10:A280").Find(format(FirstDate, "dd.mmm.yy")).address

не получается
...
Рейтинг: 0 / 0
02.03.2007, 13:48:29
    #34366641
vkodor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция ДАТА()
Deggasad vkodorзабыл указать
это из "vbfunction.chm"
© 1999-2001 А.Климов
Русский_Проект

это книга?
Если да, то нет ли электронной версии?
см. мыло
...
Рейтинг: 0 / 0
02.03.2007, 13:53:38
    #34366666
Deggasad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция ДАТА()
vkodor
см. мыло

File Blocked
на верное у нас просто запрещено скачивать книжки. А она там до завтра пролежит?
...
Рейтинг: 0 / 0
02.03.2007, 13:55:17
    #34366670
vkodor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция ДАТА()
DeggasadПомогите пожалуйста разобраться

Не работает следующая штука

не получается
Код: plaintext
1.
2.
Dim FirstDate As Date, x
FirstDate = Date
x = ActiveWorkbook.Sheets("Операц").Range("A10:A280").Find(CDbl(FirstDate)).Address
...
Рейтинг: 0 / 0
02.03.2007, 13:56:00
    #34366676
KL (XL)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция ДАТА()
DeggasadПомогите пожалуйста разобраться

Не работает следующая штука

Код: plaintext
1.
2.
Dim FirstDate As Date

x = ActiveWorkbook.Sheets("Операц").Range("A10:A280").Find(FirstDate).address

Не работает потому-что Range("A10:A280") - содержит даты в формате "dd.mmm.yy", а не стандартный формат.

Пробовал так

Код: plaintext
1.
2.
Dim FirstDate As Date

x = ActiveWorkbook.Sheets("Операц").Range("A10:A280").Find(format(FirstDate, "dd.mmm.yy")).address

не получается

А что ты присваеваешь переменной FirstDate?
У меня след. работает:

Код: plaintext
1.
2.
3.
4.
Sub test()
    Dim FirstDate As Date
    FirstDate = # 2 / 9 / 2007 #
    MsgBox ActiveWorkbook.Sheets("Операц").Range("A10:A280").Find(FirstDate).Address
End Sub

KL
[MVP - Microsoft Excel]
...
Рейтинг: 0 / 0
02.03.2007, 13:59:40
    #34366695
vkodor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция ДАТА()
Deggasad

File Blocked
А она там до завтра пролежит?
тебе видней
...
Рейтинг: 0 / 0
02.03.2007, 14:06:51
    #34366738
Deggasad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция ДАТА()
vkodor Deggasad

File Blocked
А она там до завтра пролежит?
тебе видней


Всмысле видней. Я просто не знаю чё это за ссылка и где эта книжка! Если есть возможность как
по другому её забрать, то подскажите, если нет, то из дома попробую скачать!
...
Рейтинг: 0 / 0
02.03.2007, 14:12:11
    #34366766
Deggasad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция ДАТА()
По поводу дат макрос выглядит так
Sub sad1()

Dim FirstDate As Date, LastDate As Date, x As Date
Dim WithCell

x = Range("A1").Value

FirstDate = DateAdd("m", -3, x)
LastDate = DateAdd("m", 6, x)

WithCell = ActiveWorkbook.Sheets("Операц").Range("A10:A280").Find(FirstDate).Address

Debug.Print WithCell


End Sub

Если на рабочем листе поменять формат дат на "dd.mm.yyyy", то всё работает. Но изначально на листе формат дат такой "dd.mmm.yy" и из-за этого не работает. Менять формат дат не хочется. А ещё может быть такое что формат может быть разным.
...
Рейтинг: 0 / 0
02.03.2007, 14:21:40
    #34366820
vkodor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция ДАТА()
Так что, так не работает?
Код: plaintext
1.
       WithCell = ActiveWorkbook.Sheets("Операц").Range("A10:A280").Find(_
                What:=CDbl(FirstDate),LookIn:=xlFormulas).Address
...
Рейтинг: 0 / 0
02.03.2007, 14:35:03
    #34366900
Deggasad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция ДАТА()
vkodorТак что, так не работает?
Код: plaintext
1.
       WithCell = ActiveWorkbook.Sheets("Операц").Range("A10:A280").Find(_
                What:=CDbl(FirstDate),LookIn:=xlFormulas).Address


неа
...
Рейтинг: 0 / 0
02.03.2007, 15:03:58
    #34367070
Deggasad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция ДАТА()
Ещё забыл сказать что ячейки Range("A10:A280") - не значения, а получены формулами, если сохранить как значения тоже работает нормально
...
Рейтинг: 0 / 0
02.03.2007, 15:36:27
    #34367209
Deggasad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция ДАТА()
вообщем

Код: plaintext
WithCell = ActiveWorkbook.Sheets("операц").Range("A10:A280").Find(FirstDate).Address

не работает потому что Range("A10:A280") - формулы, а не значения
Если значения, то работает.
А с формулами получилось только так

Код: plaintext
1.
2.
  For n =  10  To  280 
    If Range("A" & n).Value = FirstDate Then WithCell = Range("A" & n).Address
   Next
Но интересно всё равно почему не работает с формулами?
...
Рейтинг: 0 / 0
02.03.2007, 15:53:40
    #34367299
KL (XL)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция ДАТА()
Deggasadвообщем

Код: plaintext
WithCell = ActiveWorkbook.Sheets("операц").Range("A10:A280").Find(FirstDate).Address

не работает потому что Range("A10:A280") - формулы, а не значения
Если значения, то работает.
А с формулами получилось только так

Код: plaintext
1.
2.
  For n =  10  To  280 
    If Range("A" & n).Value = FirstDate Then WithCell = Range("A" & n).Address
   Next
Но интересно всё равно почему не работает с формулами?

а так:

Код: plaintext
1.
WithCell = ActiveWorkbook.Sheets("Операц").Range("A10:A280").Find(_
        What:=CDbl(FirstDate),LookIn:=xlValues).Address
...
Рейтинг: 0 / 0
02.03.2007, 15:55:13
    #34367306
KL (XL)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция ДАТА()
или даже так:

Код: plaintext
1.
WithCell = ActiveWorkbook.Sheets("Операц").Range("A10:A280").Find(_
        What:=FirstDate,LookIn:=xlValues).Address


KL
[MVP - Microsoft Excel]
...
Рейтинг: 0 / 0
02.03.2007, 15:56:05
    #34367313
vbapro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция ДАТА()
DeggasadНо интересно всё равно почему не работает с формулами?сам же ответил: DeggasadЕщё забыл сказать что ячейки Range("A10:A280") - не значения, а получены формулами, если сохранить как значения тоже работает нормально
...
Рейтинг: 0 / 0
02.03.2007, 16:08:43
    #34367380
Deggasad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция ДАТА()
KL (XL)или даже так:

Код: plaintext
1.
WithCell = ActiveWorkbook.Sheets("Операц").Range("A10:A280").Find(_
        What:=FirstDate,LookIn:=xlValues).Address


KL
[MVP - Microsoft Excel]

Ни так, ни так не работает
...
Рейтинг: 0 / 0
02.03.2007, 16:15:09
    #34367410
KL (XL)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция ДАТА()
бред какой-то... может файл подвесишь? Может твои формулы выводят даты в виде текста?

KL
[MVP - Microsoft Excel]
...
Рейтинг: 0 / 0
02.03.2007, 16:31:32
    #34367493
Deggasad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция ДАТА()
Вообщем я запутался - теперь опять не работает даже если значения поставить
Прилагаю файл
...
Рейтинг: 0 / 0
02.03.2007, 16:39:19
    #34367542
vkodor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция ДАТА()
Код: plaintext
1.
2.
     For n =  10  To  280 
      If Range("A" & n).Value2 = CDbl(FirstDate) Then WithCell = Range("A" & n).Address
     Next
вот так точно сработает
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Функция ДАТА() / 25 сообщений из 31, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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