Hướng Dẫn Chuyển Đổi Chuỗi Ngày Tháng Thành Date Trong VBA
Giới Thiệu
Trong quá trình làm việc với Excel, đôi khi chúng ta cần chuyển đổi chuỗi ngày tháng có định dạng không cố định thành kiểu dữ liệu Date
để thuận tiện cho việc tính toán và xử lý dữ liệu. Trong bài viết này, chúng ta sẽ sử dụng VBA (Visual Basic for Applications) kết hợp với Regular Expressions (Regex) để trích xuất ngày, tháng, năm từ chuỗi và chuyển đổi thành Date
trong Excel.
1. Ví Dụ Dữ Liệu Đầu Vào & Kết Quả Mong Muốn
Dưới đây là một số ví dụ về các chuỗi ngày tháng đầu vào và kết quả mong muốn sau khi chuyển đổi:
STT | Chuỗi đầu vào | Kết quả mong muốn |
---|---|---|
1 | Ngày 01 tháng 10 năm 2024 | 01-Oct-24 |
2 | Ngày 1 tháng 10 năm 2024 | 01-Oct-24 |
3 | 1/10/2024 | 01-Oct-24 |
4 | 01-10-2024 | 01-Oct-24 |
5 | Ngày 5 tháng 6 năm 2023 | 05-Jun-23 |
6 | 5.6.2023 | 05-Jun-23 |
7 | 05/06/2023 | 05-Jun-23 |
8 | Ngày 01 tháng 10 năm 2024 | 01-Oct-24 |
9 | Ngày 9 tháng 7 năm 2022 | 09-Jul-22 |
10 | 9-7-2022 | 09-Jul-22 |
11 | Ngày 01, tháng 10, năm 2024 | 01-Oct-24 |
12 | Ngày 1-tháng 10.năm 2024 | 01-Oct-24 |
13 | Ngày 01…. tháng: 10 – năm = 2024 | 01-Oct-24 |
14 | Ngày 6 / tháng 5 / năm 2021 | 06-May-21 |
15 | Ngày 1.. tháng 2— năm 2020 | 01-Feb-20 |
2. Viết Hàm VBA Chuyển Đổi Chuỗi Ngày Thành Date
Chúng ta sẽ sử dụng VBA để viết một hàm ConvertToDate nhằm chuyển đổi các chuỗi ngày tháng có định dạng khác nhau thành kiểu dữ liệu Date
.
Hàm VBA:
Function ConvertToDate(dateString As String) As Date
Dim regex As Object
Dim matches As Object
Dim dayPart As Integer, monthPart As Integer, yearPart As Integer
' Khởi tạo RegExp
Set regex = CreateObject("VBScript.RegExp")
regex.Pattern = "(\d{1,2})\D+(\d{1,2})\D+(\d{4})"
regex.IgnoreCase = True
regex.Global = False
' Kiểm tra nếu chuỗi phù hợp với pattern
If regex.Test(dateString) Then
Set matches = regex.Execute(dateString)
If matches.Count > 0 Then
' Lấy số ngày, tháng, năm từ chuỗi
dayPart = CInt(matches(0).SubMatches(0))
monthPart = CInt(matches(0).SubMatches(1))
yearPart = CInt(matches(0).SubMatches(2))
' Trả về giá trị Date
ConvertToDate = DateSerial(yearPart, monthPart, dayPart)
Exit Function
End If
End If
' Trả về 0 nếu không hợp lệ
ConvertToDate = 0
End Function
3. Giải Thích Code VBA
- Sử dụng RegExp (Regular Expressions) để tìm kiếm và trích xuất dữ liệu ngày, tháng, năm từ chuỗi đầu vào.
- regex.Pattern = “(\d{1,2})\D+(\d{1,2})\D+(\d{4})”:
\d{1,2}
: Nhận diện ngày (1 hoặc 2 chữ số).\D+
: Nhận diện bất kỳ ký tự nào không phải số (dấu cách, dấu chấm, dấu gạch ngang,…).\d{4}
: Nhận diện năm (4 chữ số).
- Chuyển đổi giá trị ngày, tháng, năm thành
DateSerial
để tạo kiểu dữ liệuDate
trong Excel. - Hàm sẽ trả về 0 nếu chuỗi không hợp lệ.
4. Cách Sử Dụng Hàm Trong Excel
- Mở VBA Editor:
- Nhấn
ALT + F11
để mở VBA Editor. - Chọn
Insert
>Module
. - Dán đoạn mã VBA trên vào module mới.
- Nhấn
- Gọi hàm trong Excel:
- Ví dụ: Ô A1 chứa chuỗi
Ngày 01 tháng 10 năm 2024
. - Tại ô B1, nhập công thức:
=ConvertToDate(A1)
- Nhấn
Enter
, ô B1 sẽ hiển thị01-Oct-24
.
- Ví dụ: Ô A1 chứa chuỗi
- Định dạng lại cột ngày tháng (nếu cần):
- Chọn cột chứa kết quả.
- Vào
Format Cells
(CTRL + 1
), chọnDate
và kiểu hiển thị mong muốn (VD:DD-MMM-YY
).
5. Tải File Thực Hành
Bạn có thể tải xuống file Excel mẫu chứa dữ liệu thực hành và mã VBA sẵn có tại đây: 📥 Download File Thực Hành
6. Tổng Kết
- Bài viết này hướng dẫn cách chuyển đổi chuỗi ngày tháng có nhiều định dạng khác nhau thành kiểu dữ liệu Date trong VBA.
- Sử dụng Regular Expressions (Regex) giúp tự động nhận diện và chuẩn hóa dữ liệu đầu vào.
- Hàm VBA này hữu ích khi làm việc với dữ liệu nhập từ nhiều nguồn khác nhau.
📌 Bạn có muốn mở rộng hàm để nhận diện tháng viết bằng chữ (ví dụ: “Tháng Một” thành “01”) không? Hãy để lại bình luận! 🚀