Xin gởi hàm FieldSplit

Liên hệ QC

tedaynui

(*_*)
Thành viên danh dự
Tham gia
12/8/06
Bài viết
1,875
Được thích
2,475
Hàm FieldSplit dùng để tách chuỗi. Cú pháp :
FiedlSplit(String,FieldNum,SplitChar)

VD : Ô A1 có giá trị là "Nguyễn Minh Thành"
FieldSplit(A1,2," ") sẽ cho kết quả là "Minh"
FieldSplit(A1,3," ") sẽ cho kết quả là "Thành"

VD : Ô B3 có giá trị là "Nguyễn-Lý-Minh-Thành"
FieldSplit(B3,1,"-") sẽ cho kết quả là "Nguyễn"
FieldSplit(B3,3,"-") sẽ cho kết quả là "Minh"


Đây là đoạn code của hàm FieldSplit

Mã:
Function FieldSplit(FullString As Variant, FieldNum As Integer, SplitChar As String) As Variant
Dim MyArray As Variant
Dim j As Integer, k As Integer
Dim x As Integer, z As Integer
Dim TempString As String
 
z = 1
For k = 1 To Len(FullString) - 1
If Mid(FullString, k, 1) = SplitChar Then
z = z + 1
End If
Next k
 
If FieldNum > z Then
FieldSplit = Null
Exit Function
End If
 
ReDim MyArray(z)
TempString = ""
j = 0
For x = 1 To Len(FullString)
If Mid(FullString, x, 1) = SplitChar Then
MyArray(j) = TempString
TempString = ""
j = j + 1
End If
If Mid(FullString, x, 1) <> SplitChar Then
TempString = TempString & Mid(FullString, x, 1)
End If
Next x
MyArray(j) = TempString
FieldSplit = MyArray(FieldNum - 1)
End Function
Sưu tầm
Thân
 
hii! một hàm rât hữu ích.... cảm ơn bạn đã share cho mọi người.....-=.,,
 
Upvote 0
Các bạn kiểm tra hàm sau giúp nha:

Mã:
[b]Function FieldSplit(FullString As Variant, FieldNum As Integer, SplitChar As String)[/b]
 Dim ij As Integer, iZ As Integer
 
 For ij = 1 To FieldNum - 1
    iZ = InStr(1, FullString, SplitChar)
    FullString = LTrim(Mid(FullString, iZ + 1))
 Next ij
 iZ = InStr(1, FullString, SplitChar)
 FullString = LTrim(Left(FullString, iZ - 1))
 FieldSplit = FullString [b]
End Function[/b]
 
Upvote 0
Dear all,
--------
Em rút ngắn thêm tí nữa nhé:
Split(expression[, delimiter[, limit[, compare]]])
Và đây là Split đã được modified:

Mã:
Public Function String_Split(stString As String, _
          Optional lgWhere As Long, _
          Optional stDelimiter As String = " ", _
          Optional lgLimit As Long = -1, _
          Optional cmCompareMethod As VbCompareMethod = vbBinaryCompare) As String
Dim vrSplitString As Variant
vrSplitString = Split(stString, stDelimiter, lgLimit, cmCompareMethod)
String_Split = vrSplitString(lgWhere)
End Function
Chú ý:
- Kết quả Split là một Array nên cần thiết phải tạo một Variant để thu kết quả sau đó định phần tử để tách
- Muốn làm ngược lại thì chúng ta "Join" nó lại:
Join(sourcearray[, delimiter])

Mọi thứ có trong F1!
 
Upvote 0
Chào các bạn.
Rất cảm ơn hai bạn SA_DQ và Cường, Code ngắn gọn và hiệu quả.

Tuy nhiên, đoạn Code của bạn SA_DQ mình test thấy báo lỗi nhỏ.
VD : ô A1 có giá trị là "Nguyễn*Hùng*Minh"
FieldSplit(A1,1,"*") cho kết quả là "Nguyễn"
FieldSplit(A1,2,"*") cho kết quả là "Hùng"
FieldSplit(A1,3,"*") cho kết quả là #VALUE

Thân !
 
Upvote 0
(ảm ơn bạn nhiều

dòng lệnh
FullString = LTrim(Mid(FullString, iZ + 1))
trong vòng lặp phải là vầy
Mã:
FullString = LTrim(Mid(FullString, iZ + 1)) & SplitChar
!$@!!
(ách #, như sau
Dòng lệnh:
iZ = InStr(1, FullString, SplitChar)
ngoài vòng lặp phải là:
Mã:
 iZ = InStr(1, FullString & SplitChar, SplitChar)
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT
Back
Top Bottom