Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Високосные года в Экселе. / 21 сообщений из 21, страница 1 из 1
10.02.2010, 02:52
    #36459186
Sharo
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Високосные года в Экселе.
Здравствуйте.
Я Извиняюсь, если подобная тема уже обсуждалась на форуме. По поиску не нашел.

Проблема состоит в том, что мне нужно написать в экселе программу, которая при заданой начальной дате и длинне периуда(в годах) выдает конечную дату. Были бы дни - все было бы просто, а тут...
Не понимаю как справится с високосными годами. Ведь промежуток может быть задан любой, а не только год, то есть в него может попасть несколько високосных лет.
Не могли бы вы показать, как научить эксель определять в промежутке 29е числа и прибавлять их?
Очень надо...
...
Рейтинг: 0 / 0
10.02.2010, 05:02
    #36459203
x
x
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Високосные года в Экселе.
Пусть в A1 – дата
А в B1 – число лет, которое нужно прибавить к этой дате
Тогда в С1 формула: =ДАТА(ГОД(A1+B1);МЕСЯЦ(A1);ДЕНЬ(A1))
...
Рейтинг: 0 / 0
10.02.2010, 05:04
    #36459205
ч
ч
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Високосные года в Экселе.
xТогда в С1 формула: =ДАТА(ГОД(A1+B1);МЕСЯЦ(A1);ДЕНЬ(A1))
Опечатка, вот так нужно:
Тогда в С1 формула: =ДАТА(ГОД(A1)+B1;МЕСЯЦ(A1);ДЕНЬ(A1))
...
Рейтинг: 0 / 0
10.02.2010, 13:39
    #36460377
DV68
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Високосные года в Экселе.
Или так:
=ДАТАМЕС(A1;B1*12)
...
Рейтинг: 0 / 0
10.02.2010, 23:18
    #36461854
x
x
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Високосные года в Экселе.
DV68Или так:
=ДАТАМЕС(A1;B1*12)
Только нужно бы уточнить, что для ДАТАМЕС в Excel 2003 и в предыдущих версиях нужен пакет анализа. И если в A1 дата 29 февраля 2008г. , а B1=1, то результат в C1 равен 28 февраля 2009, т.е. отличаются на 1 день от формулы с ДАТА(). Что правильнее - зависит от задачи.
...
Рейтинг: 0 / 0
10.02.2010, 23:24
    #36461867
x
x
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Високосные года в Экселе.
Забыл добавить еще, что ДАТАМЕС при B1=1 выдает 28 февраля 2009 как для A1 = 28 февраля 2008, так и для A1 = 29 февраля 2009
...
Рейтинг: 0 / 0
10.02.2010, 23:27
    #36461873
x
x
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Високосные года в Экселе.
xЗабыл добавить еще, что ДАТАМЕС при B1=1 выдает 28 февраля 2009 как для A1 = 28 февраля 2008, так и для A1 = 29 февраля 200 9
Опечатка, правильно - "так и для A1 = 29 февраля 200 8 "
...
Рейтинг: 0 / 0
10.02.2010, 23:53
    #36461905
vlth
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Високосные года в Экселе.
Sharo, посмотрите в VBA справку по функции DateAdd().
...
Рейтинг: 0 / 0
11.02.2010, 00:06
    #36461922
Sharo
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Високосные года в Экселе.
Не, мужики...не катит предложенное. Я до этого и сам пробывал...
Это работает, только если начальная дата 29 февраля и прибавляется год. Вот тогда получается результат 1 марта...как надо, просто потому, что 29 февраля не високосного года для экселя - ошибка...вот он и правит. Если же начальная дата не 29ое февраля, то не катит....я уже молчу о том, что в промежутке может попасть много високосных лет...

Пойду почитаю справку по VBA...=(
...
Рейтинг: 0 / 0
11.02.2010, 00:40
    #36461954
vikttur
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Високосные года в Экселе.
Для общего развития :)
...
Рейтинг: 0 / 0
11.02.2010, 02:11
    #36461980
Sharo
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Високосные года в Экселе.
Прочитал про dateadd()
Не могу понять как прикрепить ее к экселю, как сделать изменяемыми количество прибавляемых периудов и начальную дату....и как научить функцию понимать дробное количество лет...чтоб не отбрасывала дробную часть...
...
Рейтинг: 0 / 0
11.02.2010, 03:31
    #36462000
vlth
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Високосные года в Экселе.
Sharo, Не могу понять как прикрепить ее к экселю, как сделать изменяемыми количество прибавляемых периудов и начальную дату....
Поясните, в чём затруднения?
как научить функцию понимать дробное количество лет...чтоб не отбрасывала дробную часть...
Из хелпа:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Dim FirstDate As Date    ' Declare variables.
Dim IntervalType As String
Dim Number As Double 'В оригинале 'Integer'
Dim Msg
IntervalType = "yyyy"    ' "m" specifies months as interval.
FirstDate = InputBox("Enter a date")
Number = InputBox("Enter number of year to add")
Msg = "New date: " & DateAdd(IntervalType, Number, FirstDate)
MsgBox Msg

Аргумент 'Number' имеет тип Double, поэтому, думаю, дробное кол-во лет функция должна воспринимать адекватно (проверьте на всякий пожарный...)
...
Рейтинг: 0 / 0
11.02.2010, 05:01
    #36462015
Високосные года в Экселе.
vlthАргумент 'Number' имеет тип Double, поэтому, думаю, дробное кол-во лет функция должна воспринимать адекватно (проверьте на всякий пожарный...)

проверил. в Office 2003 на дробный аргумент не ругается, но обрезает до целого

Sharo,
в первом приближении
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Dim FirstDate As Date    ' Declare variables.
Dim IntervalType As String
Dim Number As Double 'В оригинале 'Integer'
Dim NumberDays as Long
Dim Msg
IntervalType = "d"    ' "m" specifies months as interval.
FirstDate = InputBox("Enter a date")
Number = InputBox("Enter number of year to add")
NumberDays=Round(Number* 365 . 25 )
'Msg = "New date: " & DateAdd(IntervalType, Number, FirstDate)
Msg = "New date: " & DateAdd(IntervalType, NumberDays, FirstDate)
MsgBox Msg

на больших интервалах точность приемлимая
...
Рейтинг: 0 / 0
11.02.2010, 12:09
    #36462712
vlth
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Високосные года в Экселе.
Sharo, вот готовая функция для определения, является ли указанный год високосным. Можете "прикрутить" её к своему проекту для реализации точного подсчёта кол-ва дней в диапазоне дат.
Код: plaintext
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.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
Public Function dhIsLeapYear(Optional varDate As Variant) As Boolean
    ' Is the supplied year a leap year?
    ' Check the day number of the day
    ' after Feb 28 to find out.
    
    ' From "Visual Basic Language Developer's Handbook"
    ' by Ken Getz and Mike Gilbert
    ' Copyright 2000; Sybex, Inc. All rights reserved.
    
    ' In:
    '   varDate (Optional):
    '       If unspecified, use the current year.
    '       If a date, use the year of the specified date.
    '       If a valid integer (between 100 and 9999),
    '           use that value as the year, otherwise use the current year.
    '       If any other data type, act as if varDate wasn't specified
    '        (that is, use the current year).
    ' Out:
    '   Return value:
    '       Boolean indicating whether the specified year
    '       is a leap year.
    ' Example:
    '   If dhIsLeapYear() Then
    '     ' You know the current year is a leap year.
    '
    '   If dhIsLeapYear(1956) Then
    '     ' You know 1956 was a leap year.
    '
    '   If dhIsLeapYear(#12/1/92#) Then
    '     ' You know 1992 was a leap year.
    
    ' Missing? Use the current year.
    If IsMissing(varDate) Then
        varDate = Year(Date)
    
    ' Is it a date? Then use that year.
    ElseIf VarType(varDate) = vbDate Then
        varDate = Year(varDate)
        
    ' Is it an integer? Use that value, if it's value.
    ' Otherwise, use the current year.
    ElseIf VarType(varDate) = vbInteger Then
        ' Only years 100 through 9999 are allowed.
        If varDate <  100  Or varDate >  9999  Then
            varDate = Year(Date)
        End If
        
    ' If it's not a date or an integer, just use the
    ' current year.
    Else
        varDate = Year(Date)
    End If
    dhIsLeapYear = (Day(DateSerial(varDate,  2 ,  28 ) +  1 ) =  29 )
End Function
...
Рейтинг: 0 / 0
11.02.2010, 17:14
    #36463916
Djon Player
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Високосные года в Экселе.
Sharo,

Если количество годов целое, то можно так:
A1 - дата
A2 - количество лет
A3 - формула =ДАТА(ГОД(A1+1)+A2;МЕСЯЦ(A1+1);ДЕНЬ(A1+1))-1

Например A1 = 29.02.2008, A2 = 5, а A3 получиться 28.02.2013
...
Рейтинг: 0 / 0
23.03.2010, 21:30
    #36538208
огонь
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Високосные года в Экселе.
СПАСИБО
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
19.02.2013, 06:23
    #38156710
Ирина я
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Високосные года в Экселе.
Помогите пожалуйста решить проблему:
Есть ячейка D27 = 01.10.2012 (начало отчета)
есть ячейка G24 = 31.01.2013 (конец отчета)

Нужно вычислить сколько месяцев в отчете (H24)

Делаю обычную формулу H24=МЕСЯЦ(G24-D27)
Вычисляет цифру 5, а должно быть 4 месяца
Можно что то сделать с этим?
...
Рейтинг: 0 / 0
19.02.2013, 07:15
    #38156727
скукотища
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Високосные года в Экселе.
Ирина я,
и каким боком Ваш вопрос касается темы " Високосные года в Экселе. " ?
...
Рейтинг: 0 / 0
19.02.2013, 09:21
    #38156801
Ирина я
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Високосные года в Экселе.
А вы знаете какой темы он касается? ну так подскажите...
хотя мне уже подсказали на другом сайте...
...
Рейтинг: 0 / 0
19.02.2013, 10:01
    #38156853
Serge 007
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Високосные года в Экселе.
Ирина яА вы знаете какой темы он касается?А вы кнопку "Новая тема" почему игнорируете?
...
Рейтинг: 0 / 0
19.02.2013, 12:10
    #38157134
lbppb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Високосные года в Экселе.
Ирина я,

Почитайте справку о том что такое функция МЕСЯЦ. В общем случае разницу между двумя датами можно поделить на 30,5.
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Високосные года в Экселе. / 21 сообщений из 21, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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