Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.10.2012, 13:42   #11
tvitaly1
Заблокирован
 
Регистрация: 02.10.2012
Сообщений: 28
По умолчанию

DiemonStar, Казанский,

Спасибо большое, меня с integer заклинило, long конечно. :D

Впрочем, за двух long один Currency дают.

Иду на работу, когда вернусь, переделаю преобразователи с вашей помощью.

И буду разбираться с date

Последний раз редактировалось tvitaly1; 02.10.2012 в 13:44.
tvitaly1 вне форума Ответить с цитированием
Старый 02.10.2012, 13:47   #12
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Цитата:
И буду разбираться с date
А чего с ним разбираться? физически, это обычный double. А формат даты - лишь один из способов представления значения переменной.
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 03.10.2012, 01:46   #13
tvitaly1
Заблокирован
 
Регистрация: 02.10.2012
Сообщений: 28
По умолчанию

Перевел Date в двоичную, получил мантису и характеристику в десятичной системе, посчитал, получил десятичное число, дальше действую по алгоритму:

Год = отбросить дробную часть((целая часть-2)/365+1900)
Час = отбросить дробную часть((дробная часть)*24)

Вроде год получил, час тоже, но на 59 минте переходит на следующий час.
Как выцарапывать другое не знаю, и можно ли выцарапать все из десятичного числа, ведь при преобразовании идут потери?..
Как то же функции преобразования это делаю?..
Хочется тоже сделать и показать как.
В любом случае, спасибо всем.

Последний раз редактировалось tvitaly1; 03.10.2012 в 11:51.
tvitaly1 вне форума Ответить с цитированием
Старый 03.10.2012, 09:31   #14
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

> Год = отбросить дробную часть((целая часть-2)/365+1900)
Вряд ли так просто - есть високосные годы.

Для часов, минут, секунд попробуйте
Код:
Sub bb()
Dim d#, t&, h%, m%, s%
d = Now
t = Int((d - Int(d)) * 24 * 3600) 'целые секунды
h = t \ 3600
t = t - h * 3600
m = t \ 60
s = t - m * 60
Debug.Print Format(d, "h:m:s"), h & ":" & m & ":" & s
End Sub
exceleved@yandex.ru Яндекс.Деньги: 410011500007619

Последний раз редактировалось Казанский; 03.10.2012 в 12:26.
Казанский вне форума Ответить с цитированием
Старый 03.10.2012, 10:18   #15
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Цитата:
> Год = отбросить дробную часть((целая часть-2)/365+1900)
Вряд ли так просто - есть високосные годы.
да не так и сложно:
Код:
God = ((D - 2) \ 1461) * 4 + ((D - 2) Mod 1461) \ 365 + 1900
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 03.10.2012, 11:01   #16
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

я вот этим пользуюсь
Код:
God = year(d)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 03.10.2012, 11:04   #17
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Цитата:
Сообщение от IgorGO Посмотреть сообщение
я вот этим пользуюсь
Код:
God = year(d)
Игорь,

автора как-раз интересует физическая реализация хранения и преобразования типов.
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 03.10.2012, 13:51   #18
tvitaly1
Заблокирован
 
Регистрация: 02.10.2012
Сообщений: 28
По умолчанию

Цитата:
Сообщение от Казанский Посмотреть сообщение
> Год = отбросить дробную часть((целая часть-2)/365+1900)
Вряд ли так просто - есть високосные годы.

Для часов, минут, секунд попробуйте
Код:
Sub bb()
Dim d#, t&, h%, m%, s%
d = Now
t = Int((d - Int(d)) * 24 * 3600) 'целые секунды
h = t \ 3600
t = t - h * 3600
m = t \ 60
s = t - m * 60
Debug.Print Format(d, "h:m:s"), h & ":" & m & ":" & s
End Sub
Спасибо, Казанский... Но

Код:
Sub bb()
Dim d#, t&, h%, m%, s%
d = Now
t = (d - Int(d)) * 24 * 3600 'целые секунды
h = t \ 3600
'Так нелзя, OVERFLOV !!!!
't = t - h * 3600
'Приходится делать так:
For i& = 1 To 3600
 t = t - h
Next i&
m = t \ 60
s = t - m * 60
Debug.Print Format(d, "h:m:s"), h & ":" & m & ":" & s
End Sub

Последний раз редактировалось tvitaly1; 03.10.2012 в 13:59.
tvitaly1 вне форума Ответить с цитированием
Старый 03.10.2012, 14:03   #19
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Цитата:
Код:
t = Int((d - Int(d)) * 24 * 3600) 'целые секунды
Цитата:
Код:
t = (d - Int(d)) * 24 * 3600 'целые секунды
найдите отличия...
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 03.10.2012, 15:06   #20
tvitaly1
Заблокирован
 
Регистрация: 02.10.2012
Сообщений: 28
По умолчанию

Цитата:
Сообщение от DiemonStar Посмотреть сообщение
найдите отличия...
Это правка абсолютно не дает ничего нового.
делайте как я
tvitaly1 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
VBA Word,VBA Excel решить 2 задачи fafolo4ka Фриланс 6 05.03.2012 01:15
Обнуление глобальных переменных в VBA Arkasha69 Microsoft Office Excel 1 06.09.2010 15:06
vba+excel Анна Рожкова Microsoft Office Excel 18 28.05.2010 21:41
сезонная адаптивная модель в VBA Kudoh Microsoft Office Excel 0 18.06.2009 19:31
Как запретить запуск программы на VBA Excel 2003 в Excel 2007 kovalevskivf Microsoft Office Excel 2 15.05.2009 16:47