Chức năng Split trong VBA, xuất hiện lần đầu tiên trong phiên bản Excel 2000, có khả năng khiến việc thực hiện các tác vụ thông thường trở nên đơn giản hơn. Hàm này hỗ trợ tối đa các ký tự chữ dạng string, và trả về kết quả là tổ hợp các biến thể từ số 0, trong đó chứa các thành phần tạo nên ký tự đó (lưu ý bạn nên ghi rõ các ký tự được sử dụng để phân tách các thành phần này với nhau).
Ví dụ minh hoạ đơn giản
Chuỗi câu lệnh dưới đây sẽ hướng dẫn bạn cách thức hoạt động của hàm chức năng Split.
Sub SplitDemo() Dim txt As String Dim x As Variant Dim i As Long txt = "The Split function is versatile" x = Split(txt, " ") For i = 0 To UBound(x) Debug.Print x(i) Next i End Sub
Kết quả của lệnh này sẽ được thể hiện ở phần tiếp theo.
Ở đây ta sử dụng dấu cách làm dấu phân tách chính. Bạn có thể sử dụng bất kỳ chữ cái hay ký tự string nào để làm dấu phân tách. Ở những ví dụ sau ta sẽ thấy các cách sử dụng khác của chức năng Split.
Cách trích xuất riêng một ký tự riêng lẻ
Split về bản chất là một hàm chức năng trong VBA nên nó không thể hoạt động được với các công thức Excel khác. Dưới đây ta sẽ sử dụng một hàm có tên là ExtractElement có khả năng “bao bọc” hàm Split, từ đó có thể tận dụng được tính năng hữu ích này trong các công thức Excel khác.
Function ExtractElement(str, n, sepChar) ' Returns the nth element from a string, ' using a specified separator character Dim x As Variant x = Split(str, sepChar) If n > 0 And n - 1 <= UBound(x) Then ExtractElement = x(n - 1) Else ExtractElement = "" End If End Function
Đây là cách sử dụng hàm ExtractElement khi lập công thức Excel.
=ExtractElement("546-339-909-944",3,"-")
Công thức này trả về kết quả là số 909, cũng chính là thành phần thứ 3 tạo nên chuỗi ký tự (dấu “-” được sử dụng làm dấu phân tách).
Cách đếm số ký tự
Hàm dưới đây sẽ tính được số ký tự xuất hiện trong một đoạn văn bản dạng string. Các dấu cách dòng sẽ không được tính là 1 ký tự hợp lệ nhờ vào hàm Excel có tên là TRIM (điều này giúp làm giảm thiểu sai số trong kết quả nhận được).
Function WordCount(txt) As Long ' Returns the number of words in a string Dim x As Variant txt = Application.Trim(txt) x = Split(txt, " ") WordCount = UBound(x) + 1 End Function
Cách chia nhỏ tên đường dẫn của tệp
Hai ví dụ dưới đây sẽ minh họa cách để bạn dễ dàng tách được tên tệp hoặc đường dẫn chứa tệp ra khỏi địa chỉ đầy đủ của tệp đó. Lấy ví dụ với tệp có địa chỉ đường dẫn như sau: “c:\files\workbooks\archives\budget98.xls”
Function ExtractFileName(filespec) As String ' Returns a filename from a filespec Dim x As Variant x = Split(filespec, Application.PathSeparator) ExtractFileName = x(UBound(x)) End Function Function ExtractPathName(filespec) As String ' Returns the path from a filespec Dim x As Variant x = Split(filespec, Application.PathSeparator) ReDim Preserve x(0 To UBound(x) - 1) ExtractPathName = Join(x, Application.PathSeparator) & _ Application.PathSeparator End Function
Với địa chỉ của tệp như trên, hàm ExtractFileName đã tách riêng được tên tệp “budget98.xls” và đường dẫn chứa tệp “c:\files\workbooks\archives\”.
Cách đếm số ký tự đặc biệt có trong một chuỗi văn bản
Dựa vào độ dài của chuỗi ký tự chính và chuỗi ký tự con, hàm CountOccurrences sẽ tính được số lần chuỗi ký tự con xuất hiện trong một đoạn chuỗi ký tự chính bất kỳ.
Function CountOccurrences(str, substring) As Long ' Returns the number of times substring appears in str Dim x As Variant x = Split(str, substring) CountOccurrences = UBound(x) End Function
Cách tìm ký tự dài nhất
Dựa vào nội dung của câu, hàm LongestWord sẽ cho ra kết quả đâu là ký tự dài nhất xuất hiện trong câu.
Function LongestWord(str) As String ' Returns the longest word in a string of words Dim x As Variant Dim i As Long str = Application.Trim(str) x = Split(str, " ") LongestWord = x(0) For i = 1 To UBound(x) If Len(x(i)) > Len(LongestWord) Then LongestWord = x(i) End If Next i End Function
2 Th10 2020
2 Th10 2020
2 Th10 2020
2 Th10 2020
2 Th10 2020
2 Th10 2020