2013-08-28 134 views
6

我导入了一个带有2个长日期列的CSV文件。这些日期采用美国格式Aug/28/2013,我希望它们采用标准的英国dd/mm/yyyy格式。Excel 2010 - 将美国日期更改为英国格式

我尝试格式化单元格作为美国日期,然后将它们转换为数字格式,以及日期格式框中的各种其他排列,但没有成功。

任何人都可以摆脱这些可怕的美国日期吗?

+0

可以过滤在Windows中使用Powershell导入Excel之前的csv(在ftp到* nix服务器之后)* nix上的ksh/bash。 –

回答

1

我假设您收到的日期被格式化为文本,并且简单地将其格式化为日期不会改变任何内容。您可以在日期运行下面的公式:

=(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,它应该是不错的。

3

问题是,如果日期少于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函数。

+0

当一天仅有一位数字(从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

1

与此相关,在下面简单地公式可以从

“MM/DD/YYYY”

改变日期到

“DD/MM是有帮助/ YYYY”。

=VALUE(TEXT(B2,"mm/dd/yyyy")) 
16

不使用公式另一种解决方案:

  • 选择相关的列
  • 选择数据→分列...
  • 选择“分隔符号”,然后单击下一步
  • 解开所有分隔符并点击Next
  • 选择数据列格式“日期:MDY”,然后单击完成

的日期现在应该转换到英国的日期。

+1

我是唯一一个对这个技术毫不起作用的人吗? – cbp

1

我们可以得到两个世界最好的,这个更简洁的公式:

=IF(ISNUMBER(A2),VALUE(TEXT(A2,"mm/dd/yyyy")),DATE(RIGHT(A2,4),LEFT(A2,FIND("/",A2)-1),MID(A2,FIND("/",A2)+1,2))) 

找不到任何短。

+0

当一天仅有一位数字(从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

0

还有一个问题对我来说,因为不知何故原始数据应该被看作是一个数字,但它并没有。因此,我更新了最后一个案例的公式:

= 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)))

0

当混合格式的日期例如。英国和美国在同一专栏。我发现了一个有效的,如果不雅的解决方案:

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. 

第四步:有人建议在其他地方,但它自己并没有为我做。我希望将这些步骤合并为一个宏,但目前尚未成功。

0

我尝试了一些其他的建议,但没有人似乎为我工作。在我的情况下,我是以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)

相关问题