Универсальная формула перевода дат в годы, месяцы, недели...

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

Ответить
Brat2005
Сообщения: 61
Зарегистрирован: 26 сен 2005, 14:33

...дни, часы, минуты секунды...
Возможно ли создать такую формулу?
То есть, например, вводятся 2 значения:

14.01.1946 23:48:51
и
12.12.2005 16:00:02

Можно ли в Экселе написать такую формулу (или несколько), чтобы введя две даты можно было на выходе (в разных ячейках) получить целое число: лет, месяцев, недель, дней, часов, минут, секунд?...
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

=DATEDIF(B6;B5;B7)

Какое название соответствует DATEDIF в русифицированном офисе не помню.
Найдите у себя файл Funcs.xls и посмотрите там русское название.
Avsha
Сообщения: 665
Зарегистрирован: 08 сен 2005, 13:47
Откуда: KZ

Попробуйте вариант ...
http://avsha.narod.ru/DataTime.rar

Или то же самое, если не хотите скачивать:

$C$6 = 15.12.2005 00:00:00
$C$7 = 15.12.2005 10:15:15
$C$9=$C$7-$C$6
Всего:
Лет $E$9 =ЦЕЛОЕ($C$9/365)
Дней $E$10=ЦЕЛОЕ($C$9)
Часов $E$11=ЦЕЛОЕ($C$9*24)
Минут $E$12=ЦЕЛОЕ($C$9*24*60)
Секунд $E$13=ЦЕЛОЕ($C$9*24*60*60)
В сумме:
Лет $F$9 =ЦЕЛОЕ($C$9/365)
Дней $F$10=$E$10-$F$9*365
Часов $F$11=$E$11-$F$9*365*24-$F$10*24
Минут $F$12=$E$12-$F$9*365*24*60-$F$10*24*60-$F$11*60
Секунд $F$13=$E$13-$F$9*365*24*60*60-$F$10*24*60*60-$F$11*60*60-$F$12*60
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

Avsha, зачем, когда есть одна функция которая все это умеет, которая учтывает, что в некоторых годах бывает 366 дней, а также некоторые другие особенности? Например, правильно вычисляет разницу в месяцах.
Avsha
Сообщения: 665
Зарегистрирован: 08 сен 2005, 13:47
Откуда: KZ

Функции работы с датой и временем, приведенные в справке -
ВРЕМЗНАЧ
ВРЕМЯ
ГОД
ДАТА
ДАТАЗНАЧ
ДАТАМЕС
ДЕНЬ
ДЕНЬНЕД
ДНЕЙ360
ДОЛЯГОДА
КОНМЕСЯЦА
МЕСЯЦ
МИНУТЫ
РАБДЕНЬ
СЕГОДНЯ
СЕКУНДЫ
ТДАТА
ЧАС
ЧИСТРАБДНИ
Вы наверно имели в виду функцию ДОЛЯГОДА - я у себя ее не нашел в функциях и поэтому привел вариант попроще,
ДОЛЯГОДА
Возвращает долю года, которую составляет количество дней между двумя датами.
Возврат функцией значения ошибки #ИМЯ? свидетельствует о необходимости установить библиотеку msowcf.dll.

ДОЛЯГОДА(нач_дата;кон_дата;базис)
Нач_дата - это дата, соответствующая начальной дате.
Кон_дата - это дата, соответствующая конечной дате.
Базис — это число от 0 до 4, которое определяет используемый способ вычисления дня.
Если необходимо, можно написать еще пользовательсую функцию на VBA с использованием DateDiff.
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

Нет.

В оригинальном релизе есть функция DATEDIF.
Если офис русифицированный (или локализованный для другой страны), то среди его файлов есть Funcs.xls.
Этот файл показывает соответствие оригинальных и локализованных названий функций, а также содержит гиперссылки на соответствующие разделы справочной системы.

Черт... Щас пойду русский офис где нибудь поищу...
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

Ага, нашел!

Функция называется РАЗНДАТ

Хм... Прикольно! В русском офисе по ней нет хелпа.

=Вот оригинальный
Calculates the number of days, months, or years between two dates. This function is provided for compatibility with Lotus 1-2-3.

Syntax

DATEDIF(start_date,end_date,unit)

Start_date is a date that represents the first, or starting, date of the period. Dates may be entered as text strings within quotation marks (for example, "2001/1/30"), as serial numbers (for example, 36921, which represents January 30, 2001, if you're using the 1900 date system), or as the results of other formulas or functions (for example, DATEVALUE("2001/1/30")). For more information about date serial numbers, see NOW.

End_date is a date that represents the last, or ending, date of the period.

Unit is the type of information you want returned.

Unit Returns
"Y" The number of complete years in the period.
"M" The number of complete months in the period.
"D" The number of days in the period.
"MD" The difference between the days in start_date and end_date. The months and years of the dates are ignored.
"YM" The difference between the months in start_date and end_date. The days and years of the dates are ignored.
"YD" The difference between the days of start_date and end_date. The years of the dates are ignored.


Remarks

Microsoft Excel stores dates as sequential serial numbers so that it can perform calculations on them. Excel stores January 1, 1900, as serial number 1 if your workbook uses the 1900 date system. If your workbook uses the 1904 date system, Excel stores January 1, 1904, as serial number 0 (January 2, 1904, is serial number 1). For example, in the 1900 date system, Excel stores January 1, 1998, as serial number 35796 because it is 35,795 days after January 1, 1900. Learn more about how Microsoft Excel stores dates and times.


Excel for Windows and Excel for the Macintosh use different date systems as their default. For more information, see NOW.
Examples

DATEDIF("2001/1/1","2003/1/1","Y") equals 2, or two complete years in the period.

DATEDIF("2001/6/1","2002/8/15","D") equals 440, or 440 days between June 1, 2001, and August 15, 2002.

DATEDIF("2001/6/1","2002/8/15","YD") equals 75, or 75 days between June 1 and August 15, ignoring the years of the dates.

DATEDIF("2001/6/1","2002/8/15","MD") equals 14, or the difference between 1 and 15 — the day of start_date and the day of end_date — ignoring the months and the years of the dates.

Avsha
Сообщения: 665
Зарегистрирован: 08 сен 2005, 13:47
Откуда: KZ

Naeel Maqsudov,
Справку то я нашел, Справка[F1]\Создание и проверка формул в книгах\Справка по функциям\Функции даты и времени\РАЗНДАТ
Но заодно и обнаружил что функция считает только дни, а часы, минуты, секунды - уже нет.

Вариант с DateDiff тоже ничего получается...

Код: Выделить всё

Public Function SubDateTime(DataTime_01 As Date, DataTime_02 As Date, Метод As String)
'Метод =
'yyyy   Year
'q      Quarter
'm      Month
'y      Day of year
'd      Day
'w      Weekday
'ww     Week
'h      Hour
'n      Minute
's      Second
    SubDateTime = DateDiff(Метод, DataTime_01, DataTime_02, vbMonday, vbFirstJan1)
End Function
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

А что время?!
Время это проще всего!
Берем дробную часть арифметической разницы и из этого числа выделяем часы минуты и секунды стандартными функциями листа (ЧАС, МИНУТЫ, СЕКУНДЫ)
Ответить