Excel 2010 – 将美国date更改为英国格式

我导入了一个包含2列长date的CSV文件。 这些date是Aug/28/2013年的美国格式,我希望他们是在标准的英国dd/mm/yyyy格式。

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

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

不使用公式的另一个解决scheme:

  • select相关的列
  • select数据→文本到列…
  • select“分隔”,然后单击下一步
  • 取消所有分隔符,然后单击下一步
  • select数据列格式“date:MDY”,然后单击完成

date现在应该转换为英国date。

问题是美国的date可以通过Excelparsing为英国date,当日小于13.当发生这种情况时,Excel将其转换为本地化的英国序列号(date)。

所以03/19/2014显然是3月19日的美国date。 然而05/03/2014是不明确的,所以Excel在3月5日分析当地的date格式,而不是美国5月3日。 任何公式都必须检查Excel是否已将美国date存储为英国date。 英国的date将作为一个数字存储在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单元格和PCdate的date是dd / mm / yy)。

如果ISNUMBER为真,则美国date看起来像是英国的date,Excel已经将其序列化为一个数字。 所以可以将date格式化为文本,然后再重新设定date。 注意date被传递给第一个DATE函数的月份参数来执行转换。 如果ISNUMBER为false,则以Excelforms存储为string不会将datestring转换为大于12个月的string。 所以使用string函数来为DATE函数分割它。

我假设您收到的date被格式化为文本,并简单地格式化为date不会改变任何东西。 您可以在date运行以下公式:

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

与此相关,下面的简单公式可以帮助您更改date

“MM / DD / YYYY”

“DD / MM / YYYY”。

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

我们可以用这个更简洁的公式来获得最好的结果:

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

找不到更短的东西。

对我来说,还有一个问题,原始数据应该被看作是一个数字,但事实并非如此。 因此,我更新了最后一个案例的公式:

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

当混合格式的date例如,这可能是棘手的。 英国和美国在同一列。 我find了一个有效的,不雅的解决scheme:

 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. 

第四步是在其他地方提出的,但是它本身并没有为我做。 我希望把这些步骤合并成一个macros,但目前为止还没有成功。

我尝试了一些其他的build议,但似乎没有为我工作。 在我的情况下,我是以M / d / yyyy hh:mm:ss的格式input美国的date。 如果你不介意在你的电子表格中使用一些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 ie 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)