Cho mình hỏi về Code chuyển Text sang dạng Date (1 người xem)

Người dùng đang xem chủ đề này

porsche911gt1

Thành viên mới
Tham gia
1/11/11
Bài viết
12
Được thích
0
Tình hình là mình có dữ liệu lưu dạng sau: "Saturday 7 December 2013"
Bây giờ mình muốn lập một Function để chuyển chúng thành : "December 7, 2013" hay bất cứ kiểu gì để Excel hiểu là định dạng ngày ( Vd: 12/07/2013). Đại loại là chuyển sang kiểu dữ liệu Date.

Đây là code mình làm, nhưng không hiểu sao báo lỗi: #VALUE

Mã:
Function DateCon(Str As String) As Date


    Dim i As Long, Text1 As String, j As String
    Dim Mlen As Long
    Str = Trim(Str)
    Mlen = Len(Str)
    For i = 1 To Mlen
        If Mid(Str, i, 1) = " " Then
            Exit For
        End If
    Next
    
    
    Text1 = Replace(Str, 1, i, "")
    j = Left(Str, 1)
    Text1 = Replace(Text1, 1, 2, "")
    
    For i = 1 To Mlen
        If Mid(Str, i, 1) = " " Then
         Exit For
        End If
    Next
    
    DateCon = Replace(Text1, i, 1, " " & j & ", ")
    
End Function
 

File đính kèm

Lần chỉnh sửa cuối:
Tình hình là mình có dữ liệu lưu dạng sau: "Saturday 7 December 2013"
Bây giờ mình muốn lập một Function để chuyển chúng thành : "December 7, 2013" hay bất cứ kiểu gì để Excel hiểu là định dạng ngày ( Vd: 12/07/2013). Đại loại là chuyển sang kiểu dữ liệu Date.

Đây là code mình làm, nhưng không hiểu sao báo lỗi: #VALUE

Mã:
Function DateCon(Str As String) As Date


    Dim i As Long, Text1 As String, j As String
    Dim Mlen As Long
    Str = Trim(Str)
    Mlen = Len(Str)
    For i = 1 To Mlen
        If Mid(Str, i, 1) = " " Then
            Exit For
        End If
    Next
    
    
    Text1 = Replace(Str, 1, i, "")
    j = Left(Str, 1)
    Text1 = Replace(Text1, 1, 2, "")
    
    For i = 1 To Mlen
        If Mid(Str, i, 1) = " " Then
         Exit For
        End If
    Next
    
    DateCon = Replace(Text1, i, 1, " " & j & ", ")
    
End Function

Sao phức tạp vây?
PHP:
Function DateCon(cell As Range)
DateCon = Format(cell, "mmmm-dd-yyyy")
End Function
 
Saturday 7 December 2013 cái này nó đã viết đúng đâu mà Dùng Format đc.
 
Mình chưa thử, bạn thử sửa lệnh cuối thành DateCon = cdate(Replace(Text1, i, 1, " " & j & ", ")) xem.
 
Saturday 7 December 2013 cái này nó đã viết đúng đâu mà Dùng Format đc.
Cách thì thiếu gì. Chỉ là biết hay không biết thôi
PHP:
Function DateCon(cell As Range)
Dim tam
tam = Split(cell, " ")
DateCon = CDate(tam(1) & "-" & tam(2) & "-" & tam(3))
End Function
 
Cám ơn mọi người, tại mình ko biết mấy hàm kia. H đi tìm hiểu cái
 
Chả hiểu tại sao nó lại ra #VALUE! Hàm của bạn có compile được đâu mà chạy?
Bạn dùng hàm Replace không đúng tham số. Xem lại Help.

Muón dùng cách ép kiểu như #2 thì như sau:

Function DateCon2(str As String) As String
' Loại bỏ từ đầu tiên, và dùng format date để ép kiểu
DateCon2 = Format(Mid(str, InStr(str, " "), Len(str)), "mmmm-dd-yyyy")
End Function

Muốn dùng cách dổi vị trí strings thì như sau:

Function DateCon3(str As String) As String
' Loại bỏ từ đầu tiên và ráp các từ còn lại theo thứ tự khác
Dim a
a = Split(str, " ")
DateCon3 = a(2) & "-" & a(1) & "-" & a(3)
End Function
 
Bạn nói rằng:
Tình hình là mình có dữ liệu lưu dạng sau: "Saturday 7 December 2013"
Bây giờ mình muốn lập một Function để chuyển chúng thành : "December 7, 2013" hay bất cứ kiểu gì để Excel hiểu là định dạng ngày ( Vd: 12/07/2013). Đại loại là chuyển sang kiểu dữ liệu Date.

Cái dữ liệu màu đỏ ở trên chỉ cần cắt bỏ phần THỨ (Saturday) thì phần còn lại tự nhiên sẽ trở thành Date (bất chấp mọi setting trong control Panel)
Vậy hàm sẽ là:
Mã:
Function DateCon(Str As String) As Date
  Dim tmp As String, pos As Long
  tmp = Trim(Str)
  pos = InStr(1, tmp, " ")
  If pos Then DateCon = CDate(Mid(tmp, pos))
End Function
Sau khi ra kết quả trên bảng tính, bạn tự định dạng thành kiểu gì tùy ý
 
Lần chỉnh sửa cuối:
Tình hình là mình có dữ liệu lưu dạng sau: "Saturday 7 December 2013"
Bây giờ mình muốn lập một Function để chuyển chúng thành : "December 7, 2013" hay bất cứ kiểu gì để Excel hiểu là định dạng ngày ( Vd: 12/07/2013). Đại loại là chuyển sang kiểu dữ liệu Date.

Đây là code mình làm, nhưng không hiểu sao báo lỗi: #VALUE

Mã:
Function DateCon(Str As String) As Date


    Dim i As Long, Text1 As String, j As String
    Dim Mlen As Long
    Str = Trim(Str)
    Mlen = Len(Str)
    For i = 1 To Mlen
        If Mid(Str, i, 1) = " " Then
            Exit For
        End If
    Next
    
    
    Text1 = Replace(Str, 1, i, "")
    j = Left(Str, 1)
    Text1 = Replace(Text1, 1, 2, "")
    
    For i = 1 To Mlen
        If Mid(Str, i, 1) = " " Then
         Exit For
        End If
    Next
    
    DateCon = Replace(Text1, i, 1, " " & j & ", ")
    
End Function

Mọi code trong chủ đề này đều phụ thuộc vào thiết lập trong Control Panel.

1. Nếu bạn luôn có trong CP thiết lập là Anh. Và nếu mỗi khi gửi cho bất cứ ai ở bất cứ đâu trên cõi đời này bạn bắt người ta phải đổi thiết lập của người ta thì vấn đề quá đơn giản. Chỉ cần bỏ THỨ đi rồi chuỗi còn lại cho vào ép kiểu CDate("chuỗi đã bỏ thứ")

Với thiết lập Anh trong CP thì chả cần gì Format hoặc làm xiếc cho tháng lên đầu (đỏ đỏ) này nọ.

Chỉ có điều là bạn có quyền bắt thế này thế nọ trong nhà mình thôi. Bạn không thể bắt tôi bố trí nội thất trong nhà tôi theo ý bạn được.

2. Nếu thiết lập trong CP khác Anh thì mọi code trong chủ đề đều toi

Hãy nhìn hình. Tôi đã thiết lập Pháp trong CP

View attachment 121493

Ai không tin thì tự thử
---------
Theo tôi nếu chuỗi của bạn là tiếng Anh và bạn muốn code không phụ thuộc vào CP thì chỉ còn nước lập bảng biến đổi "Tên tháng ra số"
 
Lần chỉnh sửa cuối:
Bạn nói rằng:


Cái dữ liệu màu đỏ ở trên chỉ cần cắt bỏ phần THỨ (Saturday) thì phần còn lại tự nhiên sẽ trở thành Date (bất chấp mọi setting trong control Panel)
Vậy hàm sẽ là:
Mã:
Function DateCon(Str As String) As Date
  Dim tmp As String, pos As Long
  tmp = Trim(Str)
  pos = InStr(1, tmp, " ")
  If pos Then DateCon = CDate(Mid(tmp, pos))
End Function
Sau khi ra kết quả trên bảng tính, bạn tự định dạng thành kiểu gì tùy ý

- Setting trong Control Panel quan trọng mà, thiết lập là mm/dd/yyyy thì trong excel bạn có chọn dd/mm/yyyy thì lúc nhập vấn phải nhập mm/dd/yyyy còn trường hợp nhập kiểu "14-Mar-2010" thì thoải mái excel tự hiểu.
- Dù bạn có chon Format cell định dạng ngày là "Saturday 7 December 2013" thì khi nháy đúp vào ô thì nó sẽ hiện là "12/7/2013" theo kiểu định dạng của WIn thôi.
 
Lần chỉnh sửa cuối:

Bài viết mới nhất

Back
Top Bottom