2016-11-02 6 views
1

В моей таблице у меня есть два столбца, содержащие данные типа: yyyymmdd и hhmmddxx - первый содержит дату и другое время с точностью до 0,01 секунды. Так, например, у меня есть 20161102 и 17052349.Excel VBA создать дату + значение времени

Я хочу преобразовать это в одно значение, отображающее момент времени и отобразив его в формате dd/mm/yyyy hh:mm:ss.xx, поэтому, например, я хочу получить 02/11/2016 17:05:23.49. Я думаю, что нужно использовать DateSerial и TimeSerial функции, но есть две проблемы, я понятия не имею, как идти вокруг:

  1. TimeSerial принимает час, минуту и ​​второй в качестве аргумента, все тип Integer, как передать фракции второго?
  2. DateSerial создаст мой день, и TimeSerial создаст мое время, есть функция, которая принимает дату и время в качестве аргумента и создает значение «тот день, в то время» из этого?
+0

Нет, но вы можете использовать то, что у вас есть для даты, а затем раз в середине разделов 2, для временного и добавить, и иметь собственную строку o/p, по сути, свою собственную функцию GENERATE_TIMESTAMP () как строка может быть –

+0

относительно числа 2, добавьте их вместе, чтобы получить дату и время DateSerial() + TimeSerial() = конкретное время. Дата - это длинное и временное число, поэтому два вместе = двойное. –

+0

Даты и время хранятся как цифры. Они отображаются только как даты и/или времена из-за NumberFormat. Даты проводятся как дни с 01.01.1900. Времена проводятся как SecondsSinceMidnight/SecondsInDay. Итак, даты - целые числа. Времена - это фракции. Их можно добавить. –

ответ

1

Что-то вроде этого, может быть?

? generate_timestamp("20161102","170522349")

дает

02/11/2016 17:05:23.49

Function GENERATE_TIMESTAMP(strDate As String, strTime As String) As String 

Dim dtDate As Date 
Dim dtTime As Date 

dtDate = DateSerial(Mid(strDate, 1, 4), Mid(strDate, 5, 2), Mid(strDate, 8, 2)) 
dtTime = TimeSerial(Mid(strTime, 1, 2), Mid(strTime, 3, 2), Mid(strTime, 6, 2)) 

GENERATE_TIMESTAMP = FormatDateTime(dtDate, vbShortDate) & " " & _ 
         FormatDateTime(dtTime, vbLongTime) & "." & _ 
         Mid(strTime, 8, 2) 

End Function 
0

EDIT: После того, как тестирование показало форматирование было сбросив доли секунды, а просто повторять дроби. Я разработал эту формулу для решения. Обратите внимание, что формула здесь не выводит последовательное представление datetime, а просто текстовую строку.

=TEXT(DATE(LEFT(A1,4),MID(A1,5,2),RIGHT(A1,2))+TIME(LEFT(B1,2),MID(B1,3,2),MID(B1,5,2)),"m/d/yyyy hh:mm:ss")&"."&RIGHT(B1,2) 

ПРЕДЫДУЩИЙ ОТВЕТ:

Вы можете создать последовательную, используя следующую формулу:

=DATE(LEFT(A1,4),MID(A1,5,2),RIGHT(A1,2))+TIME(LEFT(B1,2),MID(B1,3,2),MID(B1,5,2))+(RIGHT(B1,2)/(24*60*60*100)) 

А затем отформатировать ячейку как Настраиваемый с т/д/гггг чч: мм: сс. песчаники Здесь я не передаю часть секунд функции TIME(), но добавляю ее как часть дня.

+0

На самом деле тестирование дальше Я вижу ошибку в том, что пользовательское форматирование будет показывать только целые секунды. Таким образом, в вашем примере за секунды он будет показывать «23.23», а не «23.49». Думая об альтернативном решении. Извиняюсь. – nbayly

Смежные вопросы