Nhờ chuyển kiểu text sang date

Liên hệ QC

nncb2008

Thành viên chính thức
Tham gia
14/2/08
Bài viết
88
Được thích
3
Chào các bác.
Em có 1 cột (A) dữ liệu định dạng kiểu text thể hiện ngày/tháng (1/2, 12/03, 09/12...). Em muốn dùng VBA (không dùng công thức có sẵn của Excel) điền vào cột khác (B) dữ liệu kiểu Date với ngày tháng lấy từ cột trước (A) và năm là 2009.
Các bác giúp em nha. Cảm ơn nhiều.
 
Bạn xài hàm tự tạo ni xem sao?

PHP:
Option Explicit
Function StringToDate(Dat As Range) As Date
 Const PC As String = "/":                   Dim SDat As String
 Dim VTri As Byte, Jj As Byte
 ReDim Ngth(1 To 2) As Integer
              
 SDat = Dat.Value
 For Jj = 1 To 2
   VTri = InStr(SDat, PC)
   Ngth(Jj) = CStr(Left(SDat, VTri - 1))
   SDat = Mid(SDat, VTri + 1)
 Next Jj
 StringToDate = DateSerial(2009, Ngth(2), Ngth(1))
End Function

Cú pháp hàm tại [B2]: =StringToDate(A1)
Mà tại [A1] đang là chuỗi '13/8/2008'
 
Cái vụ ngày tháng chuyển từ text sang dạng ngày tháng rất gây ra nhiều tranh cải.
Ví dụ chuổi là dạng dd/mm/yyyy, mà định dạng ở máy kiểu mm/dd/yyyy thì kết quả đôi lúc cho ra bị sai. Do đó bạn lưu ý là phải kiểm tra chuổi của bạn muốn chuyển có đúng định dạng của máy bạn không rồi mới tính tiếp.
 
PHP:
Option Explicit
Function StringToDate(Dat As Range) As Date
 Const PC As String = "/":                   Dim SDat As String
 Dim VTri As Byte, Jj As Byte
 ReDim Ngth(1 To 2) As Integer
              
 SDat = Dat.Value
 For Jj = 1 To 2
   VTri = InStr(SDat, PC)
   Ngth(Jj) = CStr(Left(SDat, VTri - 1))
   SDat = Mid(SDat, VTri + 1)
 Next Jj
 StringToDate = DateSerial(2009, Ngth(2), Ngth(1))
End Function
Cú pháp hàm tại [B2]: =StringToDate(A1)
Mà tại [A1] đang là chuỗi '13/8/2008'
Cảm ơn bác nhiều. Với hàm này thì "15/0" hoặc "12/13" có vẫn chuyển ra kiểu ngày được. Nay em muốn nếu chuỗi không chuyển được thành kiểu date thì trả về StringToDate="Er" . Các bác tiếp tục giúp em nhé.
 
Lần chỉnh sửa cuối:
Với hàm này thì "15/0" hoặc "12/13" có vẫn chuyển ra kiểu ngày được. Nay em muốn nếu chuỗi không chuyển được thành kiểu date thì trả về StringToDate="Er" . Các bác tiếp tục giúp em nhé.

Tại bạn không nói rõ từ đầu, rằng trong các chuỗi đó có những trường hợp như vậy, nên chúng ta phải tự mất thời gian & hao tốn tài nguyên của cộng đồng!

Để giải quyết tiếp, ta phải đặt ra các điều kiện cho dòng lệnh này, vậy thôi:

Mã:
[B]StringToDate = DateSerial(2009, Ngth(2), Ngth(1))[/B]

Ví dụ
PHP:
 If Ngth(1) > 0 And (Ngth(2)>0 Or Ngth(2) <13) Then 
 'Câu lệnh trên'
 
Chào các bác.
Em có 1 cột (A) dữ liệu định dạng kiểu text thể hiện ngày/tháng (1/2, 12/03, 09/12...). Em muốn dùng VBA (không dùng công thức có sẵn của Excel) điền vào cột khác (B) dữ liệu kiểu Date với ngày tháng lấy từ cột trước (A) và năm là 2009.
Các bác giúp em nha. Cảm ơn nhiều.
Bạn xem thử hàm S2D này nha :
PHP:
Function S2D(Str As String) 'As Date
Dim arr() As String
Application.Volatile (False)
arr() = Split(Trim(Replace(Replace(Str, "/", " "), "-", " ")), " ")
If InStr(1, Str, "/") + InStr(1, Str, "-") <> 0 Then
S2D = DateSerial(2009, CLng(arr(1)), CLng(arr(0)))
Else: S2D = "ERR"
End If
End Function
 

File đính kèm

Web KT

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

Back
Top Bottom