Новости:

Интересные и полезные статьи по работе с Excel и VBA
можно найти в разделе ХИТРОСТИ

Главное меню

Преобразование текста в минуты

Автор McConst, 15.07.2013, 11:53:54

« назад - далее »

McConst

Уперся в вопрос, который хочется решить элегантно встроенными средствами VBA в одну строку, а не писать целый макрос.
Переменная типа String получает с листа время, выраженное в минутах. Мне нужно преобразовать его в тип Date.
Один из вариантов может быть таким

Time=TimeValue("00:" & ActiveSheet.cells(1,1) & ":00")

Но в данном случае если в ячейке время в минутах указано как 90 или 300, код выдаст ошибку. Есть ли стандартные способы преобразования String в Time
Видел в интернете, что есть типы форматирования, но что-то с форматированием времени не получается.

McConst

Поковырялся с преобразованиями вручную, вывел такую закономерность, что 1 минута равна 0,000694444444444444
Это каким-то боком связано с тем, что в 1 секунде 18 системных тактов времени. Видимо в vba должна быть какая-то константа на этот счет. Впринципе по-грубому моя задача решается так:
Time=TimeValue(0,000694444444444444* Cdbl(ActiveSheet.cells(1,1)))

doober

Цитата: McConst от 15.07.2013, 12:13:10
Поковырялся с преобразованиями вручную, вывел такую закономерность, что 1 минута равна 0,000694444444444444
1= один день
60мин*24часа=1440
1 минута равна 1/1440

McConst

Что-то не получается. Пишет смешение типов.

ambasad

#4
Попробуйте функцию TimeSerial (Hour As Integer, Minute As Integer, Second As Integer)

Цитата: McConst от 15.07.2013, 12:54:00
Что-то не получается. Пишет смешение типов.
Это потому что Вы TimeValue подсовываете число, а у неё аргумент должен быть строкой

PS DateSerial у меня работает успешно, прекрасно понимает 32 день и 13 месяц

McConst

В TimeSerial минуты доступны в интервале от 0 до 59. Получается, что все равно вручную нужно будет минуты в часы переводить. В принципе, не проблема. Спасибо.

ambasad

Цитата: McConst от 15.07.2013, 13:03:06
В TimeSerial минуты доступны в интервале от 0 до 59. Получается, что все равно вручную нужно будет минуты в часы переводить.
А вы пробовали подставить туда больше 59 минут? всё прекрасно работает!
Да и справка говорит что можно
Цитироватьminute Required; Variant (Integer). Any numeric expression.
...
that is, 0–23 for hours and 0–59 for minutes and seconds. However, you can also specify relative times for each argument using any numeric expression that represents some number of hours, minutes, or seconds before or after a certain time. The following example uses expressions instead of absolute time numbers.

McConst


Яндекс.Метрика Рейтинг@Mail.ru