VBA Excel (Bài 25): Cách sử dụng hàm đa chức năng Split trong Excel

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