Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Научить макрос читать время формата Ч:ММ? - Мир MS Excel

  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_, DrMini  
Научить макрос читать время формата Ч:ММ?
lopuxi Дата: Понедельник, 21.12.2015, 16:02 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 142
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007, 2013
Всем привет. У меня вот такая проблема. Есть сетки, которые мы получаем программным путем (выгрузка в общем). Там есть колонка со временем, формат такой - (все форматы), Тип - Ч:ММ

Как мне сделать так, что бы написанное время 6:00, макросом читалось как 6:00, а не числовым значением 0,25 ?

Мне нужно макрос научить видеть время.
К сообщению приложен файл: ___2016_18_.xlsx (38.0 Kb)


О_о ...и так можно было?
 
Ответить
СообщениеВсем привет. У меня вот такая проблема. Есть сетки, которые мы получаем программным путем (выгрузка в общем). Там есть колонка со временем, формат такой - (все форматы), Тип - Ч:ММ

Как мне сделать так, что бы написанное время 6:00, макросом читалось как 6:00, а не числовым значением 0,25 ?

Мне нужно макрос научить видеть время.

Автор - lopuxi
Дата добавления - 21.12.2015 в 16:02
_Boroda_ Дата: Понедельник, 21.12.2015, 16:06 | Сообщение № 2
Группа: Админы
Ранг: Местный житель
Сообщений: 17006
Репутация: 6667 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
[vba]
Код
CDate(Range("A1"))
[/vba] подойдет?
Ссылку на А1 я просто так написал, у Вас своя будет


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
Сообщение[vba]
Код
CDate(Range("A1"))
[/vba] подойдет?
Ссылку на А1 я просто так написал, у Вас своя будет

Автор - _Boroda_
Дата добавления - 21.12.2015 в 16:06
Michael_S Дата: Понедельник, 21.12.2015, 17:08 | Сообщение № 3
Группа: Друзья
Ранг: Старожил
Сообщений: 2012
Репутация: 373 ±
Замечаний: 0% ±

Excel2016
Как мне сделать так, что бы написанное время 6:00, макросом читалось как 6:00, а не числовым значением 0,25 ?

так вам нужно, что б читалось, и что б на выходе было время?
 
Ответить
Сообщение
Как мне сделать так, что бы написанное время 6:00, макросом читалось как 6:00, а не числовым значением 0,25 ?

так вам нужно, что б читалось, и что б на выходе было время?

Автор - Michael_S
Дата добавления - 21.12.2015 в 17:08
lopuxi Дата: Понедельник, 21.12.2015, 17:21 | Сообщение № 4
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 142
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007, 2013
на выходе было время?


Да, мне нужно что бы на выходе было время


О_о ...и так можно было?
 
Ответить
Сообщение
на выходе было время?


Да, мне нужно что бы на выходе было время

Автор - lopuxi
Дата добавления - 21.12.2015 в 17:21
lopuxi Дата: Понедельник, 21.12.2015, 17:24 | Сообщение № 5
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 142
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007, 2013
CDate(Range("A1"))


Спасибо! Помогло :)


О_о ...и так можно было?
 
Ответить
Сообщение
CDate(Range("A1"))


Спасибо! Помогло :)

Автор - lopuxi
Дата добавления - 21.12.2015 в 17:24
lopuxi Дата: Понедельник, 21.12.2015, 18:59 | Сообщение № 6
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 142
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007, 2013
Столкнулся с еще одной интересной бедой.

Мне надо обработать колоночку со временем, которое изначально выглядит так 12:15:00 - 12:30:00.

Я сделал это так: Сначала беру всю строку, из нее беру первые 8 символов и преобразую ее в формат времени через CDate. И далее снова заношу в туже переменную.

Проблема вот в чем. Когда я это время пропускаю через CDate ексель его пишет как 12:15:00 АМ. А мне не нужен АМ. Потому что после наступления 12 часов дня, у меня наступает не 13 часов, а снова 12 только с пометкой PM ....

[vba]
Код

    StrTimFun_1 = Cells(FunRow, FunCol).Value
    Cells(FunRow, FunCol).Value = CDate(Mid(StrTimFun_1, 1, 8))
    
    StrTimFun_1 = CDate(Cells(FunRow, FunCol).Value)  ' Переменная из которой берем час
[/vba]

Я пробовал без CDate... тогда у меня формат времени 6:00 преобразуется в число 0,25... и далее снова эксель видит его как 0,25
[moder]Показывайте весь макрос в файле. А то так долго еще в угадайку играть будем


О_о ...и так можно было?

Сообщение отредактировал _Boroda_ - Понедельник, 21.12.2015, 20:47
 
Ответить
СообщениеСтолкнулся с еще одной интересной бедой.

Мне надо обработать колоночку со временем, которое изначально выглядит так 12:15:00 - 12:30:00.

Я сделал это так: Сначала беру всю строку, из нее беру первые 8 символов и преобразую ее в формат времени через CDate. И далее снова заношу в туже переменную.

Проблема вот в чем. Когда я это время пропускаю через CDate ексель его пишет как 12:15:00 АМ. А мне не нужен АМ. Потому что после наступления 12 часов дня, у меня наступает не 13 часов, а снова 12 только с пометкой PM ....

[vba]
Код

    StrTimFun_1 = Cells(FunRow, FunCol).Value
    Cells(FunRow, FunCol).Value = CDate(Mid(StrTimFun_1, 1, 8))
    
    StrTimFun_1 = CDate(Cells(FunRow, FunCol).Value)  ' Переменная из которой берем час
[/vba]

Я пробовал без CDate... тогда у меня формат времени 6:00 преобразуется в число 0,25... и далее снова эксель видит его как 0,25
[moder]Показывайте весь макрос в файле. А то так долго еще в угадайку играть будем

Автор - lopuxi
Дата добавления - 21.12.2015 в 18:59
Serge_007 Дата: Понедельник, 21.12.2015, 19:48 | Сообщение № 7
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2750 ±
Замечаний: ±

Excel 2016
ексель его пишет как 12:15:00 АМ. А мне не нужен АМ
А формат ячейки поменять?


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
Сообщение
ексель его пишет как 12:15:00 АМ. А мне не нужен АМ
А формат ячейки поменять?

Автор - Serge_007
Дата добавления - 21.12.2015 в 19:48
lopuxi Дата: Вторник, 22.12.2015, 10:50 | Сообщение № 8
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 142
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007, 2013
А формат ячейки поменять?

Формат ячейки если поменять, то получается числа, типа 0,25
А мне нужно сохранить чтобы получить время 6:00 и его разобраться на 6 - час и 00 - мин.

Я скидываю целиком файл с макросом. В нем два типа сеток, создаются они тоже программным путем, моя задача научить макрос добавлять колонку с Afinity %

1 сетка (желтая, первый канал) - в последнюю колонку, (которая создается макросом), заносится Affinity - это % который мы можем увидеть рядом с этой сеткой. Первая колонка с % и временем, это будни, вторая, тоже где время и %, выходные дни.

С сеткой желтого цвета (первый канал) Проблема вот в чем. В ней время стоит как текстовый формат и пишется 06:00. Через CDate я могу получить время 6:00. Но колонки с % Affinity, там время написано как 06:00:00 - 06:15:00. Мне нужно использовать только первую его часть 06:00:00 и переводя его через CDate я получаю в ячейке 6:00:00 АМ или если поиграться с типами можно и дату получить 1905 года или вообще число 0,25 (появляется при повторном запуске макроса). А зи числового формата я ни как не получу ЧАС и МИН.

Вторая сетка (НТВ) имеет схожий вид, но располагается ниже и время там на колонку ближе и что самое главное формат ячейки там временной Ч:ММ.

Я пытаюсь научить макрос читать и понимать две этих сетки и в обе при запуске макроса добавлять колонку Affinity %. В целом если бы не путаница перевода времени все бы работало. По крайней мере с Первым каналом у меня все получалось и все работало...

PS
При запуске макроса, колонка со временем, та что рядом с сеткой, а не в ней, она у меня сейчас заменяется на 6:00:00 АМ, это можно убрать, это мой эксперимент был. Можно вообще не заменять в данных колонках время и лишь брать нужное нам первое значение.

А далее Часы мы сравниваем с Часами, а Минуты с Минутами и при совпадении заносим % Affinity

Много пришлось написать. Если будет что-то непонятно, можно попробовать разобрать по частям. К примеру как получить из колонки со временем 06:00:00 - 06:15:00 только первую часть 06:00:00
К сообщению приложен файл: ___-2-.xlsm (76.2 Kb)


О_о ...и так можно было?
 
Ответить
Сообщение
А формат ячейки поменять?

Формат ячейки если поменять, то получается числа, типа 0,25
А мне нужно сохранить чтобы получить время 6:00 и его разобраться на 6 - час и 00 - мин.

Я скидываю целиком файл с макросом. В нем два типа сеток, создаются они тоже программным путем, моя задача научить макрос добавлять колонку с Afinity %

1 сетка (желтая, первый канал) - в последнюю колонку, (которая создается макросом), заносится Affinity - это % который мы можем увидеть рядом с этой сеткой. Первая колонка с % и временем, это будни, вторая, тоже где время и %, выходные дни.

С сеткой желтого цвета (первый канал) Проблема вот в чем. В ней время стоит как текстовый формат и пишется 06:00. Через CDate я могу получить время 6:00. Но колонки с % Affinity, там время написано как 06:00:00 - 06:15:00. Мне нужно использовать только первую его часть 06:00:00 и переводя его через CDate я получаю в ячейке 6:00:00 АМ или если поиграться с типами можно и дату получить 1905 года или вообще число 0,25 (появляется при повторном запуске макроса). А зи числового формата я ни как не получу ЧАС и МИН.

Вторая сетка (НТВ) имеет схожий вид, но располагается ниже и время там на колонку ближе и что самое главное формат ячейки там временной Ч:ММ.

Я пытаюсь научить макрос читать и понимать две этих сетки и в обе при запуске макроса добавлять колонку Affinity %. В целом если бы не путаница перевода времени все бы работало. По крайней мере с Первым каналом у меня все получалось и все работало...

PS
При запуске макроса, колонка со временем, та что рядом с сеткой, а не в ней, она у меня сейчас заменяется на 6:00:00 АМ, это можно убрать, это мой эксперимент был. Можно вообще не заменять в данных колонках время и лишь брать нужное нам первое значение.

А далее Часы мы сравниваем с Часами, а Минуты с Минутами и при совпадении заносим % Affinity

Много пришлось написать. Если будет что-то непонятно, можно попробовать разобрать по частям. К примеру как получить из колонки со временем 06:00:00 - 06:15:00 только первую часть 06:00:00

Автор - lopuxi
Дата добавления - 22.12.2015 в 10:50
_Boroda_ Дата: Вторник, 22.12.2015, 11:04 | Сообщение № 9
Группа: Админы
Ранг: Местный житель
Сообщений: 17006
Репутация: 6667 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
А зи числового формата я ни как не получу ЧАС и МИН

Вы про это:
для часов
[vba]
Код
h_ = Format(CDate(Left(StrTimFun_1, 8)), "h")
[/vba]
для минут аналогично


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
Сообщение
А зи числового формата я ни как не получу ЧАС и МИН

Вы про это:
для часов
[vba]
Код
h_ = Format(CDate(Left(StrTimFun_1, 8)), "h")
[/vba]
для минут аналогично

Автор - _Boroda_
Дата добавления - 22.12.2015 в 11:04
lopuxi Дата: Вторник, 22.12.2015, 13:00 | Сообщение № 10
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 142
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007, 2013
Вы про это:
для часов
h_ = Format(CDate(Left(StrTimFun_1, 8)), "h")


Заменил на предложенный вариант.
Однако столкнулся вот с какой проблемой интересной.
Переменные StrHourOrig и StrMinOrig, не обновляются. У меня они всегда показывают 6:12

Притом что в переменной StrTim, время меняется, как и должно быть ...

[vba]
Код

    StrTim = CDate(Cells(iRow, TimeKordinateCol).Value)  ' Переменная которую будем разбивать на часы и мин
    StrHourOrig = Format(CDate(Left(StrTim, 8)), "h") ' Переменная из которой берем час
    StrMinOrig = Format(CDate(Left(StrTim, 8)), "m") ' Переменная из которой берем мин
[/vba]

[vba]
Код


For iRow = NumRowStart + 1 To NumRow
    StrTim = CDate(Cells(iRow, TimeKordinateCol).Value)  ' Переменная которую будем разбивать на часы и мин
    StrHourOrig = Format(CDate(Left(StrTim, 8)), "h") ' Переменная из которой берем час
    StrMinOrig = Format(CDate(Left(StrTim, 8)), "m") ' Переменная из которой берем час
    
    MsgBox StrHourOrig & ":" & StrMinOrig
    
    For iCol = 4 To NumCol
        If Cells(iRow, iCol).Value <> "" Then
            If Cells(3, iCol).Font.ColorIndex = 3 Or Cells(3, iCol).Font.ColorIndex = 5 Then
                FunCol = NumCol + 4
                'Cells(iRow, iCol).Select
                'MsgBox "выходной день"
                TimeSearch (StrHourOrig), (StrMinOrig), (FunCol) ' Функция поиска афинити по временному промежутку
                Cells(iRow, NumCol).Value = LonAff
                Cells(iRow, NumCol).Style = "Percent"
                Exit For
            Else
                FunCol = NumCol + 2
                'Cells(iRow, iCol).Select
                'MsgBox "Будни"
                TimeSearch (StrHourOrig), (StrMinOrig), (FunCol) ' Функция поиска афинити по временному промежутку
                Cells(iRow, NumCol).Value = LonAff
                Cells(iRow, NumCol).Style = "Percent"
                Exit For
            End If
            
            'Cells(iRow, iCol).Select
            'MsgBox "Аффинити = " & LonAff
        End If
    Next iCol
Next iRow

[/vba]

А еще небольшая проблема есть запинается на строке 24:15:00 - 24:30:00. Просто не понимает что ночное время у меня это 24
Но я думаю через Case или просто условие сделаю что бы он 24 на 0 менял.


О_о ...и так можно было?
 
Ответить
Сообщение
Вы про это:
для часов
h_ = Format(CDate(Left(StrTimFun_1, 8)), "h")


Заменил на предложенный вариант.
Однако столкнулся вот с какой проблемой интересной.
Переменные StrHourOrig и StrMinOrig, не обновляются. У меня они всегда показывают 6:12

Притом что в переменной StrTim, время меняется, как и должно быть ...

[vba]
Код

    StrTim = CDate(Cells(iRow, TimeKordinateCol).Value)  ' Переменная которую будем разбивать на часы и мин
    StrHourOrig = Format(CDate(Left(StrTim, 8)), "h") ' Переменная из которой берем час
    StrMinOrig = Format(CDate(Left(StrTim, 8)), "m") ' Переменная из которой берем мин
[/vba]

[vba]
Код


For iRow = NumRowStart + 1 To NumRow
    StrTim = CDate(Cells(iRow, TimeKordinateCol).Value)  ' Переменная которую будем разбивать на часы и мин
    StrHourOrig = Format(CDate(Left(StrTim, 8)), "h") ' Переменная из которой берем час
    StrMinOrig = Format(CDate(Left(StrTim, 8)), "m") ' Переменная из которой берем час
    
    MsgBox StrHourOrig & ":" & StrMinOrig
    
    For iCol = 4 To NumCol
        If Cells(iRow, iCol).Value <> "" Then
            If Cells(3, iCol).Font.ColorIndex = 3 Or Cells(3, iCol).Font.ColorIndex = 5 Then
                FunCol = NumCol + 4
                'Cells(iRow, iCol).Select
                'MsgBox "выходной день"
                TimeSearch (StrHourOrig), (StrMinOrig), (FunCol) ' Функция поиска афинити по временному промежутку
                Cells(iRow, NumCol).Value = LonAff
                Cells(iRow, NumCol).Style = "Percent"
                Exit For
            Else
                FunCol = NumCol + 2
                'Cells(iRow, iCol).Select
                'MsgBox "Будни"
                TimeSearch (StrHourOrig), (StrMinOrig), (FunCol) ' Функция поиска афинити по временному промежутку
                Cells(iRow, NumCol).Value = LonAff
                Cells(iRow, NumCol).Style = "Percent"
                Exit For
            End If
            
            'Cells(iRow, iCol).Select
            'MsgBox "Аффинити = " & LonAff
        End If
    Next iCol
Next iRow

[/vba]

А еще небольшая проблема есть запинается на строке 24:15:00 - 24:30:00. Просто не понимает что ночное время у меня это 24
Но я думаю через Case или просто условие сделаю что бы он 24 на 0 менял.

Автор - lopuxi
Дата добавления - 22.12.2015 в 13:00
_Boroda_ Дата: Вторник, 22.12.2015, 13:19 | Сообщение № 11
Группа: Админы
Ранг: Местный житель
Сообщений: 17006
Репутация: 6667 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
А так?
[vba]
Код
    StrHourOrig = Hour(CDate(Left(StrTim, 8)))
    StrMinOrig = Minute(CDate(Left(StrTim, 8)))
[/vba]


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеА так?
[vba]
Код
    StrHourOrig = Hour(CDate(Left(StrTim, 8)))
    StrMinOrig = Minute(CDate(Left(StrTim, 8)))
[/vba]

Автор - _Boroda_
Дата добавления - 22.12.2015 в 13:19
lopuxi Дата: Вторник, 22.12.2015, 13:32 | Сообщение № 12
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 142
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007, 2013
А так?
    StrHourOrig = Hour(CDate(Left(StrTim, 8)))
    StrMinOrig = Minute(CDate(Left(StrTim, 8)))


Так, к сожалению ругается.
---------------------------
Microsoft Visual Basic for Applications
---------------------------
Compile error:

Expected array
---------------------------
ОК Справка
---------------------------

Я приложу файл.
К сообщению приложен файл: ___-3-.xlsm (50.4 Kb)


О_о ...и так можно было?
 
Ответить
Сообщение
А так?
    StrHourOrig = Hour(CDate(Left(StrTim, 8)))
    StrMinOrig = Minute(CDate(Left(StrTim, 8)))


Так, к сожалению ругается.
---------------------------
Microsoft Visual Basic for Applications
---------------------------
Compile error:

Expected array
---------------------------
ОК Справка
---------------------------

Я приложу файл.

Автор - lopuxi
Дата добавления - 22.12.2015 в 13:32
_Boroda_ Дата: Вторник, 22.12.2015, 13:46 | Сообщение № 13
Группа: Админы
Ранг: Местный житель
Сообщений: 17006
Репутация: 6667 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
А нафига Вы обозвали переменную Hour As String?


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеА нафига Вы обозвали переменную Hour As String?

Автор - _Boroda_
Дата добавления - 22.12.2015 в 13:46
lopuxi Дата: Вторник, 22.12.2015, 13:58 | Сообщение № 14
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 142
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007, 2013
А нафига Вы обозвали переменную Hour As String?


Hour у меня использовалась в Функции. И что-то про это забыл. Заменил ее и теперь все работает )) Переменные получает верное время.

Спасибо)


О_о ...и так можно было?
 
Ответить
Сообщение
А нафига Вы обозвали переменную Hour As String?


Hour у меня использовалась в Функции. И что-то про это забыл. Заменил ее и теперь все работает )) Переменные получает верное время.

Спасибо)

Автор - lopuxi
Дата добавления - 22.12.2015 в 13:58
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2026 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!