我需要转换这个字符串:
Donnerstag, Juni 05 2014
转换为可用的 Excel 日期。我尝试使用类似以下内容的内容:
DATEVALUE(MID(A1,FIND(",",A1)+2,LEN(A1))))+RIGHT(A1,11)
但无法解决。有人能帮忙吗?
谢谢。
答案1
选择您想要转换的单元格并运行这个简短的宏:
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
然后将任何所需的格式应用到结果值。
编辑#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
答案2
我将使用 Power Query 插件来实现这一点。从 Excel 2016 开始,Power Query 内置于“获取和转换”部分下的数据功能区中。
PQ 具有内置的日期转换功能,通常无需任何编码即可使用。在 PQ 编辑器中,只需选择列并将数据类型设置为日期即可。
我有英文版 Excel,但我能够处理等效日期字符串“2014 年 6 月 5 日,星期四”并添加列以获取一年中的第几周和星期几(数字和文本)。
您只需单击 PQ UI 即可构建它,或者这里有一个示例 PQ 脚本可以帮助您入门(假设您的输入在名为“Table1”的表中,其列标题为“输入日期”)。
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"
答案3
通过反复试验,我使用以下公式找到了解决方案:
=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))))
代码是德文,但你明白我的意思。我只是提取了我需要的日期的每个部分,然后将它们重新组合在一起。
感谢其他建议 - 都很好。但我想使用正常公式 ;)