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

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

Пойду почитаю справку по VBA...=(
...
Рейтинг: 0 / 0
Високосные года в Экселе.
    #36461954
Фотография vikttur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для общего развития :)
...
Рейтинг: 0 / 0
Високосные года в Экселе.
    #36461980
Sharo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Прочитал про dateadd()
Не могу понять как прикрепить ее к экселю, как сделать изменяемыми количество прибавляемых периудов и начальную дату....и как научить функцию понимать дробное количество лет...чтоб не отбрасывала дробную часть...
...
Рейтинг: 0 / 0
Високосные года в Экселе.
    #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
Високосные года в Экселе.
    #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
Високосные года в Экселе.
    #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
Високосные года в Экселе.
    #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
Високосные года в Экселе.
    #36538208
огонь
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
СПАСИБО
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Високосные года в Экселе.
    #38156710
Ирина я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Помогите пожалуйста решить проблему:
Есть ячейка D27 = 01.10.2012 (начало отчета)
есть ячейка G24 = 31.01.2013 (конец отчета)

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

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

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


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