Всем привет. У меня вот такая проблема. Есть сетки, которые мы получаем программным путем (выгрузка в общем). Там есть колонка со временем, формат такой - (все форматы), Тип - Ч:ММ
Как мне сделать так, что бы написанное время 6:00, макросом читалось как 6:00, а не числовым значением 0,25 ?
Мне нужно макрос научить видеть время.
Всем привет. У меня вот такая проблема. Есть сетки, которые мы получаем программным путем (выгрузка в общем). Там есть колонка со временем, формат такой - (все форматы), Тип - Ч:ММ
Как мне сделать так, что бы написанное время 6:00, макросом читалось как 6:00, а не числовым значением 0,25 ?
Мне надо обработать колоночку со временем, которое изначально выглядит так 12:15:00 - 12:30:00.
Я сделал это так: Сначала беру всю строку, из нее беру первые 8 символов и преобразую ее в формат времени через CDate. И далее снова заношу в туже переменную.
Проблема вот в чем. Когда я это время пропускаю через CDate ексель его пишет как 12:15:00 АМ. А мне не нужен АМ. Потому что после наступления 12 часов дня, у меня наступает не 13 часов, а снова 12 только с пометкой PM ....
StrTimFun_1 = CDate(Cells(FunRow, FunCol).Value) ' Переменная из которой берем час
[/vba]
Я пробовал без CDate... тогда у меня формат времени 6:00 преобразуется в число 0,25... и далее снова эксель видит его как 0,25 [moder]Показывайте весь макрос в файле. А то так долго еще в угадайку играть будем
Столкнулся с еще одной интересной бедой.
Мне надо обработать колоночку со временем, которое изначально выглядит так 12:15:00 - 12:30:00.
Я сделал это так: Сначала беру всю строку, из нее беру первые 8 символов и преобразую ее в формат времени через CDate. И далее снова заношу в туже переменную.
Проблема вот в чем. Когда я это время пропускаю через CDate ексель его пишет как 12:15:00 АМ. А мне не нужен АМ. Потому что после наступления 12 часов дня, у меня наступает не 13 часов, а снова 12 только с пометкой PM ....
StrTimFun_1 = CDate(Cells(FunRow, FunCol).Value) ' Переменная из которой берем час
[/vba]
Я пробовал без CDate... тогда у меня формат времени 6:00 преобразуется в число 0,25... и далее снова эксель видит его как 0,25 [moder]Показывайте весь макрос в файле. А то так долго еще в угадайку играть будемlopuxi
О_о ...и так можно было?
Сообщение отредактировал _Boroda_ - Понедельник, 21.12.2015, 20:47
Формат ячейки если поменять, то получается числа, типа 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
Формат ячейки если поменять, то получается числа, типа 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:00lopuxi
Вы про это: для часов 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