Разное - [решено] Прогрессия в Exel параметры

Ответить
Аватара пользователя
old_gray

Разное - [решено] Прогрессия в Exel параметры

Сообщение old_gray »

Подскажите пожалуйста, нигде не нашел внятного ответа.

При записи макроса прогрессии по дате времени типа 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 соответственно, макрос работает корректно.
Аватара пользователя
Iska

Re: Разное - [решено] Прогрессия в Exel параметры

Сообщение Iska »

Цитата old_gray:



Не могу выяснить смысл значений параметров Step и Stop, как они рассчитываются, т.к. хочу заменить их переменными. При записи макроса задавались 0:30 и 04.10.2016 23:30 соответственно, макрос работает корректно.
Разное - [решено] Прогрессия в Exel параметры




Дело в том, что внутренним представлением даты в Excel является вещественное число, где целая часть представляет собой значение дней от 1 января 1900 года, а дробная — число долей секунд в одном дне:



Скрытый текст

[spoiler][/spoiler]




То есть, 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
Аватара пользователя
old_gray

Re: Разное - [решено] Прогрессия в Exel параметры

Сообщение old_gray »

Спасибо.



"Методы объекта Range, использующие команды Excel. Метод DataSeries" - там я был, но про
Цитата Iska:



Дело в том, что внутренним представлением даты в Excel является вещественное число
Разное - [решено] Прогрессия в Exel параметры




ничего вроде бы нет.
Ответить

Вернуться в «Microsoft Office (Word, Excel, Outlook и т.д.)»