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

Вход

Регистрация

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

 

= Мир MS Excel/Извлечь дату и преобразовать к одному формату - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Извлечь дату и преобразовать к одному формату (Макросы/Sub)
Извлечь дату и преобразовать к одному формату
bosse-sl Дата: Среда, 18.02.2015, 18:21 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 21
Репутация: 0 ±
Замечаний: 20% ±

Пожалуйста помогите.

Необходимо извлечь дату и преобразовать к одному формату - дата и время
В прилагаемом файле из ячеек B и C получить - E
К сообщению приложен файл: ___.xls (20.5 Kb)
 
Ответить
СообщениеПожалуйста помогите.

Необходимо извлечь дату и преобразовать к одному формату - дата и время
В прилагаемом файле из ячеек B и C получить - E

Автор - bosse-sl
Дата добавления - 18.02.2015 в 18:21
Pelena Дата: Среда, 18.02.2015, 18:40 | Сообщение № 2
Группа: Админы
Ранг: Местный житель
Сообщений: 19187
Репутация: 4421 ±
Замечаний: ±

Excel 365 & Mac Excel
Вариант с доп. столбцом
К сообщению приложен файл: -6-.xls (31.5 Kb)


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
СообщениеВариант с доп. столбцом

Автор - Pelena
Дата добавления - 18.02.2015 в 18:40
bosse-sl Дата: Среда, 18.02.2015, 19:03 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 21
Репутация: 0 ±
Замечаний: 20% ±

1. Почему-то не правильно отображается вместо 16.02.2015 показывает 06.02.2015;
2. А как сделать, чтобы понимало какую из двух дат выбирать
Мне бы макросом.
 
Ответить
Сообщение1. Почему-то не правильно отображается вместо 16.02.2015 показывает 06.02.2015;
2. А как сделать, чтобы понимало какую из двух дат выбирать
Мне бы макросом.

Автор - bosse-sl
Дата добавления - 18.02.2015 в 19:03
Pelena Дата: Среда, 18.02.2015, 19:10 | Сообщение № 4
Группа: Админы
Ранг: Местный житель
Сообщений: 19187
Репутация: 4421 ±
Замечаний: ±

Excel 365 & Mac Excel
Не заметила сразу, что тема в разделе макросов, но раз уж начала, то подкорректировала формульный вариант.

Подождите макрописателей
К сообщению приложен файл: -6-1-.xls (31.5 Kb)


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
СообщениеНе заметила сразу, что тема в разделе макросов, но раз уж начала, то подкорректировала формульный вариант.

Подождите макрописателей

Автор - Pelena
Дата добавления - 18.02.2015 в 19:10
bosse-sl Дата: Среда, 18.02.2015, 19:31 | Сообщение № 5
Группа: Пользователи
Ранг: Новичок
Сообщений: 21
Репутация: 0 ±
Замечаний: 20% ±

Вариант с доп. столбцом
К сообщению приложен файл: -6-.xls(32Kb)


Кстати, делал без доп. столбца
Мой вариант G

Но нужен макрос.
К сообщению приложен файл: -6-11-.xls (36.5 Kb)


Сообщение отредактировал bosse-sl - Среда, 18.02.2015, 19:31
 
Ответить
Сообщение
Вариант с доп. столбцом
К сообщению приложен файл: -6-.xls(32Kb)


Кстати, делал без доп. столбца
Мой вариант G

Но нужен макрос.

Автор - bosse-sl
Дата добавления - 18.02.2015 в 19:31
Michael_S Дата: Среда, 18.02.2015, 21:34 | Сообщение № 6
Группа: Друзья
Ранг: Старожил
Сообщений: 2012
Репутация: 373 ±
Замечаний: 0% ±

Excel2016
Но нужен макрос.

А если UDF?
[vba]
Код
Function Как_получить(Время As Date, Дата As Range) As Date
Dim a, i&
a = Split(Дата.MergeArea.Cells(1, 1).Value)
Время = IIf(Время - Int(Время) > 20 / 24 And Время - Int(Время) < 8 / 24, Время - Int(Время) + 1, Время - Int(Время))
For i = 0 To UBound(a)
      If IsDate(a(i)) Then
          Как_получить = Format(CDate(a(i)) + Время, "DD.MM.YYYY h:mm")
          Exit Function
      End If
Next
End Function
[/vba]
К сообщению приложен файл: bosse-sl.xls (43.5 Kb)


Сообщение отредактировал Michael_S - Среда, 18.02.2015, 21:36
 
Ответить
Сообщение
Но нужен макрос.

А если UDF?
[vba]
Код
Function Как_получить(Время As Date, Дата As Range) As Date
Dim a, i&
a = Split(Дата.MergeArea.Cells(1, 1).Value)
Время = IIf(Время - Int(Время) > 20 / 24 And Время - Int(Время) < 8 / 24, Время - Int(Время) + 1, Время - Int(Время))
For i = 0 To UBound(a)
      If IsDate(a(i)) Then
          Как_получить = Format(CDate(a(i)) + Время, "DD.MM.YYYY h:mm")
          Exit Function
      End If
Next
End Function
[/vba]

Автор - Michael_S
Дата добавления - 18.02.2015 в 21:34
bosse-sl Дата: Среда, 18.02.2015, 23:29 | Сообщение № 7
Группа: Пользователи
Ранг: Новичок
Сообщений: 21
Репутация: 0 ±
Замечаний: 20% ±

А если UDF?

Спасибо

1. Если правильно понимаю, то это можно использовать и как часть макроса?
2. У меня почему-то в тексте выбирает только первую дату из двух, где есть две даты
К сообщению приложен файл: bosse-test.xls (41.5 Kb)
 
Ответить
Сообщение
А если UDF?

Спасибо

1. Если правильно понимаю, то это можно использовать и как часть макроса?
2. У меня почему-то в тексте выбирает только первую дату из двух, где есть две даты

Автор - bosse-sl
Дата добавления - 18.02.2015 в 23:29
Leanna Дата: Четверг, 19.02.2015, 00:11 | Сообщение № 8
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 189
Репутация: 78 ±
Замечаний: 0% ±

excel 2010
Мне очень понравилось это решение Михаила. Поковыряла udf по косточкам. Как я поняла эта строчка должна быть такой:
[vba]
Код
Время = IIf(Время - Int(Время) >= 0 / 24 And Время - Int(Время) < 8 / 24, Время - Int(Время) + 1, Время - Int(Время))
[/vba]


Лучше день потерять, потом за пять минут долететь!
 
Ответить
СообщениеМне очень понравилось это решение Михаила. Поковыряла udf по косточкам. Как я поняла эта строчка должна быть такой:
[vba]
Код
Время = IIf(Время - Int(Время) >= 0 / 24 And Время - Int(Время) < 8 / 24, Время - Int(Время) + 1, Время - Int(Время))
[/vba]

Автор - Leanna
Дата добавления - 19.02.2015 в 00:11
Michael_S Дата: Четверг, 19.02.2015, 01:00 | Сообщение № 9
Группа: Друзья
Ранг: Старожил
Сообщений: 2012
Репутация: 373 ±
Замечаний: 0% ±

Excel2016
Leanna, Да, пожалуй вы правы. только чуть проще
[vba]
Код
Время = IIf(Время - Int(Время) < 8 / 24, Время - Int(Время) + 1, Время - Int(Время))
[/vba]
проверка времени на больше или равно нулю излишняя, хоть и не вредит.
 
Ответить
СообщениеLeanna, Да, пожалуй вы правы. только чуть проще
[vba]
Код
Время = IIf(Время - Int(Время) < 8 / 24, Время - Int(Время) + 1, Время - Int(Время))
[/vba]
проверка времени на больше или равно нулю излишняя, хоть и не вредит.

Автор - Michael_S
Дата добавления - 19.02.2015 в 01:00
Michael_S Дата: Четверг, 19.02.2015, 01:24 | Сообщение № 10
Группа: Друзья
Ранг: Старожил
Сообщений: 2012
Репутация: 373 ±
Замечаний: 0% ±

Excel2016
Если правильно понимаю, то это можно использовать и как часть макроса?

Можно, как вариант
К сообщению приложен файл: bosse-test_1.xls (43.5 Kb)


Сообщение отредактировал Michael_S - Четверг, 19.02.2015, 01:33
 
Ответить
Сообщение
Если правильно понимаю, то это можно использовать и как часть макроса?

Можно, как вариант

Автор - Michael_S
Дата добавления - 19.02.2015 в 01:24
bosse-sl Дата: Четверг, 19.02.2015, 14:14 | Сообщение № 11
Группа: Пользователи
Ранг: Новичок
Сообщений: 21
Репутация: 0 ±
Замечаний: 20% ±

Michael_S, Leanna, Огромное Вам спасибо

Можно, как вариант

Это вообще потрясающе. Давно об этом мечтал.
 
Ответить
СообщениеMichael_S, Leanna, Огромное Вам спасибо

Можно, как вариант

Это вообще потрясающе. Давно об этом мечтал.

Автор - bosse-sl
Дата добавления - 19.02.2015 в 14:14
bosse-sl Дата: Вторник, 24.02.2015, 20:00 | Сообщение № 12
Группа: Пользователи
Ранг: Новичок
Сообщений: 21
Репутация: 0 ±
Замечаний: 20% ±

Michael_S, подскажите пожалуйста, можно ли при помощи функции которая приведена выше добывать даты, но не из диапазона ячеек а всего из одной ячейки, т.е. двух конечно 1-дата 2-время

[vba]
Код
Как_получить .Cells(i, 2).Value, .Cells(i, 3).Value, dat,
[/vba] - как-то так
Или может быть:
Вытащить даты в переменные d1 и d2

[spoiler][vba]
Код
If Not IsEmpty(Cells(i, 3)) Then                       'проверяю ячейку есть ли там дата
    dat = .Cells(i, 3).Value
             If .Count >= 1 Then d1 = CDate(.Item(1))                      
             If .Count >= 2 Then d2 = CDate(.Item(2)) Else d2 = 0
       
                         If d2 = 0 Then
                           DateOffLoad = d1
                         Else
                           DateOffLoad = IIf(.Cells(i, 2) < #8:00:00 AM#, d2, d1)
                         End If
[/vba]
Помогите пожалуйста. :(


Сообщение отредактировал bosse-sl - Среда, 25.02.2015, 13:08
 
Ответить
СообщениеMichael_S, подскажите пожалуйста, можно ли при помощи функции которая приведена выше добывать даты, но не из диапазона ячеек а всего из одной ячейки, т.е. двух конечно 1-дата 2-время

[vba]
Код
Как_получить .Cells(i, 2).Value, .Cells(i, 3).Value, dat,
[/vba] - как-то так
Или может быть:
Вытащить даты в переменные d1 и d2

[spoiler][vba]
Код
If Not IsEmpty(Cells(i, 3)) Then                       'проверяю ячейку есть ли там дата
    dat = .Cells(i, 3).Value
             If .Count >= 1 Then d1 = CDate(.Item(1))                      
             If .Count >= 2 Then d2 = CDate(.Item(2)) Else d2 = 0
       
                         If d2 = 0 Then
                           DateOffLoad = d1
                         Else
                           DateOffLoad = IIf(.Cells(i, 2) < #8:00:00 AM#, d2, d1)
                         End If
[/vba]
Помогите пожалуйста. :(

Автор - bosse-sl
Дата добавления - 24.02.2015 в 20:00
bosse-sl Дата: Среда, 25.02.2015, 13:19 | Сообщение № 13
Группа: Пользователи
Ранг: Новичок
Сообщений: 21
Репутация: 0 ±
Замечаний: 20% ±

Спасибо всё решил.
 
Ответить
СообщениеСпасибо всё решил.

Автор - bosse-sl
Дата добавления - 25.02.2015 в 13:19
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Извлечь дату и преобразовать к одному формату (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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