Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Microsoft Office (Word, Excel, Outlook и т.д.) (http://forum.oszone.net/forumdisplay.php?f=115)
-   -   [решено] Прогрессия в Exel параметры (http://forum.oszone.net/showthread.php?t=321199)

old_gray 28-11-2016 00:57 2691024

Прогрессия в Exel параметры
 
Подскажите пожалуйста, нигде не нашел внятного ответа.
При записи макроса прогрессии по дате времени типа 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 28-11-2016 02:13 2691035

Цитата:

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

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

То есть, 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


okshef 28-11-2016 06:52 2691067

Цитата:

Цитата old_gray
Не могу выяснить смысл значений параметров Step и Stop »

Методы объекта Range, использующие команды Excel. Метод DataSeries

old_gray 28-11-2016 13:12 2691132

Спасибо.

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

Цитата Iska
Дело в том, что внутренним представлением даты в Excel является вещественное число »

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

Iska 28-11-2016 19:04 2691245

old_gray, вот здесь: How to use dates and times in Excel об этом есть.

old_gray 28-11-2016 21:27 2691296

Еще раз благодарю, разобрался.


Время: 22:30.

Время: 22:30.
© OSzone.net 2001-