Показать полную графическую версию : [решено] Прогрессия в Exel параметры
old_gray
28-11-2016, 00:57
Подскажите пожалуйста, нигде не нашел внятного ответа.
При записи макроса прогрессии по дате времени типа dd.mm.yyyy h:mm с шагом 0:30 предельным значением (к примеру) 04.10.2016 23:30 получаю следующее:
Sub Макрос1()
' Макрос1 Макрос
Range("A9").Select
ActiveCell.FormulaR1C1 = "10/1/2016 0:00"
Range("A9").Select
Selection.DataSeries Rowcol:=xlColumns, Type:=xlChronological, Step:=2.08333333333333E-02, Stop:=42647.9791666667, Trend:=False
End Sub
Не могу выяснить смысл значений параметров Step и Stop, как они рассчитываются, т.к. хочу заменить их переменными. При записи макроса задавались 0:30 и 04.10.2016 23:30 соответственно, макрос работает корректно.
Не могу выяснить смысл значений параметров Step и Stop, как они рассчитываются, т.к. хочу заменить их переменными. При записи макроса задавались 0:30 и 04.10.2016 23:30 соответственно, макрос работает корректно. »
Дело в том, что внутренним представлением даты в Excel является вещественное число, где целая часть представляет собой значение дней от 1 января 1900 года, а дробная — число долей секунд в одном дне:
http://i.imgur.com/2tpl27k.png
То есть, 1 ноября 2016 года — это 1 января 1900 года + 42644 дня. А 30 минут — это 2.08333333333333E-02 == 0.0208(3) = 30 минут * 60 секунд в 1 минуте, где 1 секунда, являющаяся 1/(60 секунд в 1 минуте * 60 минут в 1 часе * 24 часа в 1 дне) долей одного дня, равна 1.15740740740741E-05 == 0.00001157(407). Числа в периоде получаются из-за того, что точно представить такую долю в виде десятичной дроби не представляется возможным (и Excel идёт на определённые ухищрения для учёта этого факта).
Таким образом, Вы можете использовать в переменных обычное вещественное число, например, период в четыре часа пять минут и шесть секунд будет выглядеть как:
4 * (1.15740740740741E-05 * 60 * 60) + 5 * (1.15740740740741E-05 * 60) + 6 * 1.15740740740741E-05 = 0.170208(3)
Также Вы можете использовать функции (что более надёжно):
? CDbl(TimeValue(#4:05:06#))
0.170208333333333
? CDbl(DateValue(#10/1/2016#))
42644
Или строкой:
? CDbl(TimeValue("4:05:06"))
0.170208333333333
? CDbl(DateValue("1.10.2016"))
42644
Не могу выяснить смысл значений параметров Step и Stop »
Методы объекта Range, использующие команды Excel. Метод DataSeries (http://it.kgsu.ru/ExcelVBA/exvba030.html)
old_gray
28-11-2016, 13:12
Спасибо.
"Методы объекта Range, использующие команды Excel. Метод DataSeries" - там я был, но про Дело в том, что внутренним представлением даты в Excel является вещественное число » ничего вроде бы нет.
old_gray, вот здесь: How to use dates and times in Excel (https://support.microsoft.com/en-us/kb/214094) об этом есть.
old_gray
28-11-2016, 21:27
Еще раз благодарю, разобрался.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC