2013-08-28 11 views
6

Tôi đã nhập tệp CSV có 2 cột ngày dài. Những ngày này ở định dạng Hoa Kỳ Aug/28/2013 và tôi muốn chúng ở định dạng chuẩn ở Vương quốc Anh dd/mm/yyyy.Excel 2010 - thay đổi ngày của Hoa Kỳ sang định dạng Vương quốc Anh

Tôi đã thử định dạng ô là ngày của Hoa Kỳ và sau đó chuyển đổi chúng thành định dạng chỉ số và nhiều hoán vị khác trong hộp định dạng ngày, nhưng không thành công.

Có ai có thể loại bỏ tôi những ngày tồi tệ này của Hoa Kỳ không?

+0

Bạn có thể lọc csv trước khi nhập vào Excel bằng Powershell trên Windows (sau ftp tới * nix server) ksh/bash trên * nix. –

Trả lời

1

Tôi giả sử rằng ngày bạn nhận được được định dạng dưới dạng văn bản và chỉ định dạng ngày tháng đó là ngày tháng sẽ không thay đổi gì. Bạn có thể chạy công thức sau vào ngày:

=(MID(A1,FIND("/",A1)+1,FIND("/",A1,FIND("/",A1)+1)-FIND("/",A1)-1)&"-"&LEFT(A1,FIND("/",A1)-1)&"-"&RIGHT(A1,4))*1 

Nếu bạn nhận được con số này, bạn chỉ cần phải định dạng nó như dd/mm/yyyy và nó nên được tốt.

3

Vấn đề là một ngày của Hoa Kỳ có thể phân tích cú pháp bằng Excel dưới dạng ngày Vương quốc Anh khi ngày nhỏ hơn 13. Khi điều này xảy ra, Excel sẽ chuyển đổi nó thành số nối tiếp (ngày) ở Vương quốc Anh.

Vì vậy, ngày 19 tháng 9 năm 2014 rõ ràng là ngày của Hoa Kỳ ngày 19 tháng 3. Tuy nhiên, ngày 05/03/2014 là không rõ ràng nên Excel phân tích định dạng ngày địa phương là ngày 5 tháng 3, thay vì ngày 3 tháng 5 của Hoa Kỳ. Bất kỳ công thức nào cũng phải kiểm tra xem Excel có lưu trữ Ngày của Hoa Kỳ như là một ngày ở Vương quốc Anh hay không. Ngày của Vương quốc Anh sẽ được lưu trữ trong Excel dưới dạng một số.

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

(Đối với ngày ở ô A2 và PC là dd/mm/yy).

Nếu ISNUMBER là đúng, ngày của Hoa Kỳ trông giống như ngày của Vương quốc Anh và Excel đã đăng ký nó làm số. Vì vậy, có thể định dạng ngày làm văn bản và quay lại một ngày nữa. Ngày ghi chú được chuyển đến tham số tháng của hàm DATE đầu tiên để thực hiện chuyển đổi. Nếu ISNUMBER là sai, giá trị được lưu trữ dưới dạng chuỗi như Excel không chuyển đổi chuỗi ngày tháng> 12 tháng. Vì vậy, hãy sử dụng các hàm chuỗi để phân tách nó cho hàm DATE.

+0

Công thức này sẽ trả về lỗi khi ngày chỉ có một chữ số (ngày từ 1 đến 9) và không có số 0 đứng đầu, như trong trường hợp đó nó cũng sẽ trích xuất dấu gạch chéo cùng với biểu tượng. Tôi đã tìm thấy giải pháp thay thế bằng cách sửa đổi cách giá trị ngày được trích xuất: '= IF (ISNUMBER (A2), DATE (TEXT (A2," yyyy "), TEXT (A2," dd "), TEXT (A2," mm ")), DATE (RIGHT (A2,4), LEFT (A2, FIND ("/", A2) -1), MID (LEFT (A2, FIND ("/", A2,4) -1), FIND ("/", A2) + 1, LEN (A2)))) 'Tôi đã thử nghiệm nó và có vẻ như nó hoạt động trong tất cả các trường hợp có thể. – Wayfarer

1

Về vấn đề này, công thức dưới đây chỉ đơn giản là có thể hữu ích cho việc thay đổi một ngày từ

"MM/DD/YYYY"

vào

"DD/MM/YYYY ".

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

Một giải pháp mà không sử dụng một công thức:

  • Chọn các cột có liên quan
  • Choose Data → Text to Columns ...
  • Chọn “Delimited” và nhấp Tiếp
  • Bỏ chọn tất cả các dấu phân cách và nhấp vào Tiếp theo
  • Chọn dữ liệu cột định dạng “ngày: MDY” và nhấp Hoàn

Những ngày bây giờ sẽ được chuyển đổi sang ngày Vương quốc Anh.

+1

Tôi có phải là người duy nhất mà kỹ thuật này thực sự không làm gì? – cbp

1

Chúng ta có thể có được tốt nhất của cả hai thế giới với công thức ngắn gọn hơn này:

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

Không thể tìm thấy bất cứ điều gì ngắn hơn.

+0

Công thức này sẽ trả về lỗi khi ngày chỉ có một chữ số (ngày từ 1 đến 9) và không có số 0 đứng đầu, như trong trường hợp đó nó cũng sẽ trích xuất dấu gạch chéo cùng với biểu tượng.Tôi đã tìm thấy giải pháp thay thế bằng cách sửa đổi cách giá trị ngày được trích xuất: '= IF (ISNUMBER (A2), VALUE (TEXT (A2," mm/dd/yyyy ")), DATE (RIGHT (A2,4), TRÁI (A2, FIND ("/", A2) -1), MID (LEFT (A2, FIND ("/", A2,4) -1), TÌM ("/", A2) + 1, LEN (A2)))) 'Tôi đã thử nghiệm nó và có vẻ như nó hoạt động trong mọi trường hợp có thể. – Wayfarer

0

Có thêm một vấn đề nữa đối với tôi, vì bằng cách nào đó, dữ liệu thô được cho là được đọc dưới dạng số, nhưng không. Do đó, tôi đã cập nhật công thức với 1 trường hợp cuối cùng:

= IFERROR (IF (ISNUMBER (A2), VALUE (TEXT (A2, "mm/dd/yyyy")), DATE (RIGHT (A2,4), TRÁI (A2, FIND ("/", A2) -1), MID (A2, FIND ("/", A2) +1,2))), DATE (PHẢI (A2,4), TRÁI (A2, TÌM KIẾM ("/", A2) -1), MID (A2, FIND ("/", A2) +1,1)))

0

Điều này có thể phức tạp khi ngày ở định dạng hỗn hợp, ví dụ: Anh và Mỹ trong cùng một cột. Tôi đã tìm thấy một giải pháp hiệu quả nếu không phù hợp:

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. 

Bước 4 đã được đề xuất ở nơi khác, nhưng điều đó đã không được thực hiện cho tôi. Tôi hy vọng sẽ kết hợp các bước này thành một vĩ mô nhưng không thành công cho đến nay.

0

Tôi đã thử một số đề xuất khác nhưng không có đề xuất nào phù hợp với tôi. Trong trường hợp của tôi, tôi đã nhập ngày của Hoa Kỳ dưới dạng M/d/yyyy hh: mm: ss. Nếu bạn không nhớ sử dụng một số VBA trong bảng tính của bạn sau đó các chức năng sau đây đã làm công việc cho tôi:

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 

Đơn giản chỉ cần sử dụng nó trong một công thức bảng tính ví dụ = USDate (A2)