Мне нужно преобразовать эту строку:
Donnerstag, Juni 05 2014
в удобную дату Excel. Я пытаюсь использовать что-то вроде:
DATEVALUE(MID(A1,FIND(",",A1)+2,LEN(A1))))+RIGHT(A1,11)
но не могу решить это. Может кто-нибудь помочь?
Благодарю.
Мне нужно преобразовать эту строку:
Donnerstag, Juni 05 2014
в удобную дату Excel. Я пытаюсь использовать что-то вроде:
DATEVALUE(MID(A1,FIND(",",A1)+2,LEN(A1))))+RIGHT(A1,11)
но не могу решить это. Может кто-нибудь помочь?
Благодарю.
Выберите ячейки, которые вы хотите преобразовать, и запустите этот короткий макрос:
Sub dural()
Dim dy As Long, mnth As Long, yr As Long
Dim t As String, U As Long, d As Date
Dim r As Range
bry = Split("Januar,Februar,März,April,Mai,Juni,Juli,August,September,Oktober,November,Dezember", ",")
For Each r In Selection
t = r.Text
ary = Split(t, " ")
U = UBound(ary)
yr = CLng(ary(U))
dy = CLng(ary(U - 1))
For i = 0 To 11
If ary(U - 2) = bry(i) Then
mnth = i + 1
End If
Next i
d = DateSerial(yr, mnth, dy)
r.Value = d
Next r
End Sub
Затем примените любое желаемое форматирование к результирующим значениям.
EDIT # 1:
Чтобы использовать это преобразование как функцию (UDF ()), используйте следующий код:
Public Function EngDate(inpt As String) As Date
Dim dy As Long, mnth As Long, yr As Long
Dim t As String, U As Long, d As Date
bry = Split("Januar,Februar,März,April,Mai,Juni,Juli,August,September,Oktober,November,Dezember", ",")
t = inpt
ary = Split(t, " ")
U = UBound(ary)
yr = CLng(ary(U))
dy = CLng(ary(U - 1))
For i = 0 To 11
If ary(U - 2) = bry(i) Then
mnth = i + 1
End If
Next i
d = DateSerial(yr, mnth, dy)
EngDate = d
End Function
Я бы использовал Power Query Add-In для этого. В Excel 2016 Power Query встроен в ленту данных в разделе "Получить и преобразовать".
PQ имеет встроенные функции преобразования даты, которые обычно работают без какого-либо кодирования. В редакторе PQ просто выберите столбец и установите тип данных на дату.
У меня английский Excel, но мне удалось обработать эквивалентную строку даты «Четверг, 5 июня 2014 года» и добавить столбцы, чтобы получить «Неделя года» и «День недели» (число и текст).
Вы можете создать это, просто щелкнув в пользовательском интерфейсе PQ, или вот пример PQ-сценария, который поможет вам (предполагается, что ваш ввод находится в таблице с именем "Table1" с заголовком столбца "Input Date").
let
Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
#"Changed Type" = Table.TransformColumnTypes(Source,{{"Input Date", type date}}),
#"Inserted Week of Year" = Table.AddColumn(#"Changed Type", "WeekOfYear", each Date.WeekOfYear([Input Date]), type number),
#"Inserted Day of Week" = Table.AddColumn(#"Inserted Week of Year", "DayOfWeek", each Date.DayOfWeek([Input Date]), type number),
#"Added Day of Week Name" = Table.AddColumn(#"Inserted Day of Week", "Day of Week Name", each Date.ToText([Input Date], "dddd"))
in
#"Added Day of Week Name"
Методом проб и ошибок я нашел решение по следующей формуле:
=DATUM((WERT(RECHTS(RECHTS(G5;LÄNGE(G5)-FINDEN(" ";G5));4)));
(MONAT(DATWERT(TEXT(LINKS(RECHTS(G5;LÄNGE(G5)-FINDEN(" ";G5));FINDEN(" ";RECHTS(G5;LÄNGE(G5)-FINDEN(" ";G5)))-1);1)&" 1")));
(WERT(TEIL(RECHTS(G5;LÄNGE(G5)-FINDEN(" ";G5));FINDEN(" ";RECHTS(G5;LÄNGE(G5)-FINDEN(" ";G5)))+1;2))))
Код на немецком языке, но вы поняли. Я просто извлек каждую часть даты, в которой я нуждался, и снова собрал ее.
Спасибо за другие предложения - все они хороши. Но я хотел использовать нормальную формулу;)