Visual Basic for Applications:
Phân tích ngày từ chuỗi ký tự

Cách thực hiện:

VBA cung cấp một cách trực tiếp để phân tích cú pháp một chuỗi thành ngày bằng cách sử dụng hàm CDate hoặc hàm DateValue. Tuy nhiên, điều quan trọng là chuỗi phải ở trong một định dạng ngày đúng.

Dưới đây là một ví dụ cơ bản sử dụng CDate:

Sub ParseDateUsingCDate()
    Dim dateString As String
    Dim parsedDate As Date
    
    dateString = "2023-04-01"
    parsedDate = CDate(dateString)
    
    Debug.Print "Ngày đã phân tích cú pháp: "; parsedDate
End Sub

Nếu bạn chạy đoạn mã này, đầu ra trong Cửa sổ Ngay lập tức (truy cập qua Ctrl+G trong trình soạn thảo VBA) sẽ là:

Ngày đã phân tích cú pháp: 4/1/2023 

Ngoài ra, bạn có thể sử dụng hàm DateValue, hay chính xác hơn về ngày (bỏ qua phần thời gian):

Sub ParseDateUsingDateValue()
    Dim dateString As String
    Dim parsedDate As Date
    
    dateString = "Ngày 1 Tháng 4, 2023"
    parsedDate = DateValue(dateString)
    
    Debug.Print "Ngày đã phân tích cú pháp bằng DateValue: "; parsedDate
End Sub

Mẫu đầu ra cho này cũng sẽ hiển thị trong Cửa sổ Ngay lập tức:

Ngày đã phân tích cú pháp bằng DateValue: 4/1/2023

Hãy nhớ rằng, sự thành công của việc phân tích cú pháp phụ thuộc vào việc định dạng ngày của chuỗi khớp với cài đặt hệ thống hoặc ứng dụng.

Kỹ lưỡng hơn

Bên trong, khi VBA phân tích cú pháp một chuỗi thành ngày, nó sử dụng các cài đặt khu vực của hệ điều hành Windows để giải thích định dạng ngày. Điều này rất quan trọng để hiểu vì một chuỗi ngày được phân tích cú pháp hoàn hảo trên một hệ thống có thể gây ra lỗi trên hệ thống khác nếu chúng sử dụng các cài đặt ngày/giờ khác nhau.

Lịch sử, xử lý ngày đã là một nguồn cơn của các lỗi trong ứng dụng, đặc biệt là những ứng dụng được sử dụng quốc tế. Sự phụ thuộc vào các cài đặt khu vực trong VBA là lý do mà một số người có thể xem xét các alternativ như định dạng ISO 8601 (ví dụ: “YYYY-MM-DD”) để biểu diễn và phân tích cú pháp ngày một cách không mơ hồ trên các hệ thống khác nhau. Thật không may, VBA không hỗ trợ ISO 8601 một cách tự nhiên và việc phân tích cú pháp thủ công sẽ được cần cho tuân thủ chặt chẽ.

Đối với việc phân tích cú pháp ngày phức tạp hơn ngoài những gì CDate hoặc DateValue có thể xử lý, hoặc để đảm bảo phân tích cú pháp nhất quán bất kể cài đặt địa phương của hệ thống, các lập trình viên có thể recour đến các hàm phân tích cú pháp tùy chỉnh. Những cái này có thể bao gồm việc tách chuỗi ngày thành các thành phần (năm, tháng, ngày) và xây dựng một ngày sử dụng hàm DateSerial. Người khác có thể chọn ngôn ngữ hoặc thư viện mạnh mẽ hơn được thiết kế với ý định quốc tế hoá cho những tác vụ này.