Страницы: 1
RSS
Дни до дня рождения
 
Здравствуйте
мне дано задание составить таблицу, которая будет показывать количество дней до дня рождения
Я тут полазил и нашел такие интересные формулы:
=-ВПР(;СЕГОДНЯ()-ДАТА(ГОД(СЕГОДНЯ())+{1:0};МЕСЯЦ(B4);ДЕНЬ(B4));1)
=ДАТА(ГОД(СЕГОДНЯ())+(ДАТА(1;МЕСЯЦ(B5);ДЕНЬ(B5))<ДАТА(1;МЕСЯЦ(СЕГОДНЯ());ДЕНЬ(СЕГОДНЯ())));МЕСЯЦ(B5);ДЕНЬ(B5))-СЕГОДНЯ()
обе прекрасно работают, НО их то написал не я. А мне очень хотелось бы знать логическое пояснение данных формул, потому что сам я пробовал, но у меня получалось только количество дней до будущей даты, а до дня рождения никак.
Или есть какая еще функция для этого, тоже очень хотел бы узнать.
(У меня старый эксель2003)
Заранее благодарен всем за помощь
 
Пожалуйста.
 
становитесь в ячейку с формулой.
Сервис- Зависимости формул- вычислить формулу. жмете далее и вникаете что да почему происходит. Может после этого понятней станет. И справку по функциям использованным в формуле почитайте.
Изменено: V - 18.04.2013 18:25:13
 
А зачем такие сложности? =A1-СЕГОДНЯ() Формат ячейки числовой.
 
в A1 30.05.1975 и что у вас получится?
 
jakim, спасибо, но мой старенький эксель не может открыть (

V, спасибо, справку по функциям читал, но особо ничего не понял, просто я на примере быстрей осваиваю (наглядно), а вот про порядок вычисления формул напрочь забыл, спасибо, что напомнили
 
V, читаем вопрос автора:
Цитата
составить таблицу, которая будет показывать количество дней до дня рождения
Ключевое - ДО. А Вы приводите пример, когда ДР уже был.
 
Мою формулу обновлять нет необходимости, фактмчески она работает постоянно.
 
=ЕСЛИ(ДАТА(ГОД(СЕГОДНЯ());МЕСЯЦ(B2);ДЕНЬ(B2))>=СЕГОДНЯ();ДАТА(ГОД(СЕГОДНЯ());МЕСЯЦ(B2);ДЕНЬ(B2))-СЕГОДНЯ();ДАТА(ГОД(СЕГОДНЯ())+1;МЕСЯЦ(B2);ДЕНЬ(B2))-СЕГОДНЯ())

D3?
 
Даю мой файл в 97-2003 Excel.
 
В B1 - день рождения(например 20.03.1980)
в B2 =сегодня()
в B3 результат

макрос в модуль листа 1, запускается при изменении даты рождения

Код
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim БылДР As Boolean
Dim Kol_Days As Integer
    If Target.Cells.Count > 1 Then Exit Sub
    If Not Intersect(Target, Range("B1")) Is Nothing Then
        БылДР = CDate(Day(Range("B1")) & "." & Month(Range("B1")) & "." & _
                         Year(Now)) > Now
    If БылДР Then
        Kol_Days = CDate(Day(Range("B1")) & "." & Month(Range("B1")) & "." & _
                         Year(Now)) - Now
        Range("B3") = "До дня рождения осталось дней: " & Kol_Days
    Else
        Kol_Days = Now - CDate(Day(Range("B1")) & "." & Month(Range("B1")) & "." & _
                         Year(Now))
        Range("B3") = "С дня рождения прошло дней: " & Kol_Days
   End If
   End If
End Sub

 
В А1 - дата рождения.
Код
=ПРОСМОТР(ДАТА(ГОД(СЕГОДНЯ())+1;МЕСЯЦ(СЕГОДНЯ());ДЕНЬ(СЕГОДНЯ()));ДАТА(ГОД(A1)+СТРОКА(1:131)-1;МЕСЯЦ(A1);ДЕНЬ(A1)))-СЕГОДНЯ()
в 2007 и выше формула короче
Код
=ПРОСМОТР(ДАТАМЕС(СЕГОДНЯ();12);ДАТАМЕС(A10;(СТРОКА(1:131)-1)*12))-СЕГОДНЯ()
 
До кучи :)
Код
=ДАТА(ГОД(ТДАТА())+(ТЕКСТ(ТДАТА();"ММДД")>ТЕКСТ(A1;"ММДД"));МЕСЯЦ(A1);ДЕНЬ(A1))-СЕГОДНЯ()
 
Михаил С., здравствуйте,
- прекрасно работают обе формулы. Объясните, пожалуйста, что выполняет или как работает эта СТРОКА(1:131)-1 или эта (СТРОКА(1:131)-1) часть формулы.
Буду очень признателен.
Спасибо
Изменено: Mirdv - 16.05.2013 01:45:38
 
Виртуальный массив
=СТРОКА(1:5)-1={1;2;3;4;5}-1={0;1;2;3;4}
 
Попробуйте функцию =РАЗНДАТ()
Изменено: Smiley - 16.05.2013 11:53:34
Учусь программировать :)
 
Похожая тема: http://www.sql.ru/forum/1016294/izmenit-datu-na-vozrast
 
Цитата
vikttur пишет: Виртуальный массив
Большое спасибо
Страницы: 1
Читают тему
Наверх