Đôi khi bạn cần thực hiện tách ngày tháng năm từ một chuỗi văn bản không cố định trong Excel. Việc sử dụng các hàm như LEFT, RIGHT, MID… có lẽ sẽ hơi phức tạp. Vậy sử dụng VBA là cách sẽ giúp bạn tách được một cách dễ dàng hơn.
Bạn để ý, nếu ngày tháng năm được định dạng đầy đủ theo định dạng dd-MM-yyyy thì sẽ có độ dài chuỗi là 10. Nên nếu bạn tách được các phần tử của chuỗi ra từng phần tử riêng và kiểm tra độ dài của từng phần tử đó thì việc tách được ngày tháng năm sẽ khá đơn giản.
Tách chuỗi thành từng phần tử trong VBA
Để tách được chuỗi ra thành từng phần tử, bạn hãy sử dụng hàm SPLIT với cú pháp như sau:
= SPLIT(Expression As String, [dau-phan-chia])
Code language: JavaScript (javascript)
Trong đó:
- Expression As String: là một biến có định dạng kiểu String. Chứa văn bản cần tách.
- [dau-phan-chia]: là ký tự phân chia giữa các phần tử của văn bản.
|Ví dụ: tách chuỗi sau thành các phần tử bằng dấu phân cách ” ” (khoảng trắng).
"Hôm nay là ngày 20-01-2019"
Code language: VB.NET (vbnet)
|Thì bạn có thể sử dụng hàm:
Dim chuoi As String
Dim mang() As String
chuoi="Hôm nay là ngày 20-01-2019"
mang=Split(chuoi, " ")
Code language: VB.NET (vbnet)
|Trong đó:
- mang() As String: là khai báo dạng mảng 1 chiều. Nếu trong () rỗng là không xác định trước độ dài mảng. Và phần tử bắt đầu có vị trí là 0.
- Split(chuoi, ” “): sẽ thực hiện tách chuỗi với dấu phân chia là ” ” (khoảng trắng).
|Như vậy, kêt quả có được là:
- mang[0]= “Hôm”
- mang[1]=”nay”
- mang[2]=”là”
- mang[3]=”ngày”
- mang[4]=”20-01-2019″
Cách tách ngày tháng năm từ mảng dữ liệu VBA
Khi đã tách được chuỗi ra các phần tử đơn lẻ, tiếp theo bạn cần thực hiện là kiểm tra độ dài của từng phần tử đó.
Như đã đề cập ở phần đầu bài viết, nếu bạn sử dụng đầy đủ định dạng của ngày tháng năm thì phần tử đó sẽ có độ dài chuỗi là 10. Vậy bạn cần sử dụng thêm 1 vòng lặp FOR để quét kiểm tra độ dài tất cả phần tử của mảng là sẽ tìm ra được.
>>Tham khảo: Vòng lặp For trong VBA Excel
Dim i As Integer
Dim dodaimang As Long
dodaimang = UBound(mang) - LBound(mang)
For i = 0 To dodaimang Step 1
If Len(mang(i)) = 10 Then
MsgBox mang(i)
End If
Next i
Code language: VB.NET (vbnet)
Trong đó:
- UBound(mang): trả về kết quả kiểu Long, giá trị lớn nhất độ dài của mảng.
- LBound(mang): trả về kết quả kiểu Long, giá trị nhỏ nhất độ dài của mảng.
- Len(mang(i)) = 10: kiểm tra độ dài của phần tử thứ i nếu = 10. Tức là phần tử chứa ngày tháng năm.
Mẹo khi sử dụng hàm SPLIT để tách chuỗi
Cách trên sẽ giúp bạn dễ dàng tách được ngày tháng năm. Và mấu chốt sẽ nằm ở hàm SPLIT.
Trường hợp nếu các phần của chuỗi cách nhau bằng dấu phân cách là ” ” thì rất dễ để thực hiện. Nhưng khi bạn gặp thêm các dấu phân cách khác như “, ” (dấu phẩy và khoảng cách) thì bạn sẽ thực hiện như thế nào?
|Gặp trường hợp đó, bạn hãy sử dụng thêm hàm Replace để thay thế cho phù hợp trước khi tách. Và cú pháp hàm Replace như sau:
Replace( Expression As String, Find As String, Replace As String)
Code language: VB.NET (vbnet)
Trong đó:
- Find As String: văn bản cần thay thế.
- Replace As String: văn bản thay thế.
|Ví dụ: Chuỗi “hôm nay, 20/02/2019″, chứa 2 dấu cần phân tách là ” ” và “, “. Vậy, bạn cần chuyển “, ” về dấu ” ” như sau:
Dim chuoi As String
chuoi=Replace("hôm nay, 20/02/2019",", "," ")
Code language: VB.NET (vbnet)
|Kết quả: biến chuoi sẽ có giá trị:
"hôm nay 20/02/2019"
Code language: VB.NET (vbnet)
|Tiếp theo, sử dụng hàm SPLIT để tách chuỗi hoặc kết hợp cả 2 hàm SPLIT và REPLACE vào chung 1 dòng lệnh như sau:
mang=Split(Replace("hôm nay, 20/02/2019", ", ", " "), " ")
Code language: VB.NET (vbnet)
Như vậy, qua bài viết này bạn đã tìm hiểu qua các hàm như Split, Replace và ứng dụng để tách chuỗi trong VBA Excel. Việc kết hợp sử dụng các hàm này gần như sẽ giúp bạn tách được rất nhiều kiểu dữ liệu trong Excel bằng VBA.
Tham khảo: