我导入了一个带有2个长日期列的CSV文件。这些日期采用美国格式Aug/28/2013
,我希望它们采用标准的英国dd/mm/yyyy
格式。Excel 2010 - 将美国日期更改为英国格式
我尝试格式化单元格作为美国日期,然后将它们转换为数字格式,以及日期格式框中的各种其他排列,但没有成功。
任何人都可以摆脱这些可怕的美国日期吗?
我导入了一个带有2个长日期列的CSV文件。这些日期采用美国格式Aug/28/2013
,我希望它们采用标准的英国dd/mm/yyyy
格式。Excel 2010 - 将美国日期更改为英国格式
我尝试格式化单元格作为美国日期,然后将它们转换为数字格式,以及日期格式框中的各种其他排列,但没有成功。
任何人都可以摆脱这些可怕的美国日期吗?
我假设您收到的日期被格式化为文本,并且简单地将其格式化为日期不会改变任何内容。您可以在日期运行下面的公式:
=(MID(A1,FIND("/",A1)+1,FIND("/",A1,FIND("/",A1)+1)-FIND("/",A1)-1)&"-"&LEFT(A1,FIND("/",A1)-1)&"-"&RIGHT(A1,4))*1
如果你得到的数字,你只需要格式化为dd/mm/yyyy
,它应该是不错的。
问题是,如果日期少于13天,美国日期可由Excel解析为英国日期。发生这种情况时,Excel会将其转换为本地化英国序列号(日期)。
所以03/19/2014显然是3月19日的美国日期。但05/03/2014不明确,因此Excel将它的当地日期格式解析为3月5日,而不是美国5月3日。任何公式必须检查Excel是否已将美国日期存储为英国日期。英国日期将作为数字存储在Excel中。
=IF(ISNUMBER(A2),DATE(TEXT(A2,"yyyy"),TEXT(A2,"dd"),TEXT(A2,"mm")),DATE(RIGHT(A2,4),LEFT(A2,FIND("/",A2)-1),MID(A2,FIND("/",A2)+1,2)))
(在单元格A2和PC日期的美国日期是dd/mm/yy)。
如果ISNUMBER
为真,则美国日期看起来像是英国日期,而Excel已将其序列化为数字。所以可以将日期格式化为文本并再次回到日期。注意日期被传递给第一个DATE函数的月份参数以执行转换。 如果ISNUMBER
为false,则其以字符串形式存储为Excel不会将日期字符串转换为大于12个月。因此,使用字符串函数将其分解为DATE函数。
当一天仅有一位数字(从1到9的天数)且没有前导零时,此公式将返回一个错误,因为在这种情况下,它将同时提取斜线和符号。通过修改日期值的提取方式,我找到了一个解决方法:'= IF(ISNUMBER(A2),DATE(TEXT(A2,“yyyy”),TEXT(A2,“dd”),TEXT(A2,“毫米 “)),DATE(RIGHT(A2,4),LEFT(A2,FIND(”/”,A2)-1),MID(LEFT(A2,FIND( “/”,A2,4)-1), FIND(“/”,A2)+ 1,LEN(A2))))''''我测试过了,看起来好像在所有可能的情况下都能正常工作。 – Wayfarer
与此相关,在下面简单地公式可以从
“MM/DD/YYYY”
改变日期到
“DD/MM是有帮助/ YYYY”。
=VALUE(TEXT(B2,"mm/dd/yyyy"))
不使用公式另一种解决方案:
的日期现在应该转换到英国的日期。
我是唯一一个对这个技术毫不起作用的人吗? – cbp
我们可以得到两个世界最好的,这个更简洁的公式:
=IF(ISNUMBER(A2),VALUE(TEXT(A2,"mm/dd/yyyy")),DATE(RIGHT(A2,4),LEFT(A2,FIND("/",A2)-1),MID(A2,FIND("/",A2)+1,2)))
找不到任何短。
当一天仅有一位数字(从1到9的天数)且没有前导零时,此公式将返回一个错误,因为在这种情况下,它将同时提取斜线和符号。通过修改提取星期值的方式,我找到了解决方法:'= IF(ISNUMBER(A2),VALUE(TEXT(A2,“mm/dd/yyyy”)),DATE(RIGHT(A2,4), LEFT(A2,FIND( “/”,A2)-1),MID(LEFT(A2,FIND( “/”,A2,4)-1),FIND( “/”,A2)+ 1,LEN(A2 ))))''我测试了它,看起来像在所有可能的情况下都能工作。 – Wayfarer
还有一个问题对我来说,因为不知何故原始数据应该被看作是一个数字,但它并没有。因此,我更新了最后一个案例的公式:
= IFERROR(IF(ISNUMBER(A2),VALUE(TEXT(A2,“mm/dd/yyyy”)),DATE(RIGHT(A2,4), LEFT(A2,FIND( “/”,A2)-1),MID(A2,FIND( “/”,A2)+1,2))),DATE(RIGHT(A2,4),LEFT(A2,FIND (“/”,A2)-1),MID(A2,FIND(“/”,A2)+1,1)))
当混合格式的日期例如。英国和美国在同一专栏。我发现了一个有效的,如果不雅的解决方案:
Step1) Select the column containing the dates to be converted;
Step2) Format, Cells, Text;
Step3) Format, Cells, Date, US;
Step4) Data, Text to column, Next, Delimited, Next, delete all delimiters, Next, select format MDY;
Step5) Format, Cells, Date, UK.
第四步:有人建议在其他地方,但它自己并没有为我做。我希望将这些步骤合并为一个宏,但目前尚未成功。
我尝试了一些其他的建议,但没有人似乎为我工作。在我的情况下,我是以M/d/yyyy hh:mm:ss的格式输入美国日期。如果你不介意在电子表格中使用一些VBA那么下面的函数为我做的工作:
Public Function USDate(ds As Variant) As Variant
Dim sp() As String
Dim spt() As String
Dim spt2() As String
If ds = vbNullString Then
USDate = ""
ElseIf IsNumeric(ds) Then
' Convert numeric US dates wrongly interpreted as UK i.e. 1/7/2017 as 7th January 2017
USDate = DateSerial(Year(ds), Day(ds), Month(ds))
Else
sp = Split(ds, "/") ' split the date portion
spt = Split(sp(2), " ") ' split the time from the year
spt2 = Split(spt(1), ":") 'split the time hms
USDate = DateSerial(spt(0), sp(0), sp(1)) + TimeSerial(spt2(0), spt2(1), spt2(2))
End If
End Function
简单地用它在电子表格中的公式,例如= USDate(A2)
可以过滤在Windows中使用Powershell导入Excel之前的csv(在ftp到* nix服务器之后)* nix上的ksh/bash。 –