L
Xin chào các Bạn,
Xin trao đổi cùng các bạn hàm tự viết để đáp ứng nhu cầu sau của 1 người bạn đang sử dụng Excel nêu ra với tôi:
Nhu cầu: Có 1 chuổi ghi địa chỉ theo dạng thức: số nhà và đường phố - ngõ - khu phố - phường - quận
Cần tách các chuổi số là: số nhà, ngõ, khu phố ghi trong chuổi địa chỉ nêu trên (chỉ cần tách lấy ra các ký tự số và các dấu đặc biệt nối liền các ký tự số như "/" trong chuổi "25/124")
Sau đây là code của hàm để đáp ứng nhu cầu trên. Các Bạn có ý kiến gì không?
Function TachSo(ChuoiGoc, Kytu As String, DauNoi As String, VitriBatDau As Integer, TraiPhai As Boolean)
'
'ChuoiGoc: Chuoi goc de xu ly
'Kytu: ky tu ngan cach
'VitriBatdau: Bat dau cat tai vi tri nay cua Kytu
'DauNoi: dau noi cac ky so
'TraiPhai: Cat tu ben trai hay ben phai ChuoiGoc?
'+ TraiPhai = True => Cat tu ben Trai ChuoiGoc (tu dau chuoi)
'+ TraiPhai = False => Cat tu ben phai chuoi (tu Cuoi Chuoi)
Dim SubSt As String, i As Integer, LngSt As Integer, ChuoiKq As String
Dim k As Integer, intChk As Integer
Dim vBegin As Integer, vLast As Integer, vStep As Integer
'
If IsNull(ChuoiGoc) Then Exit Function
LngSt = Len(Trim(CStr(ChuoiGoc)))
ChuoiKq = ""
intChk = 0
If TraiPhai = True Then
vBegin = 1
vLast = LngSt
vStep = 1
Else
vBegin = LngSt
vLast = 1
vStep = -1
End If
'Xac dinh vi tri bat dau cat
If VitriBatDau > 0 Then
For k = vBegin To vLast Step vStep
'Xet tung ky tu tu dau chuoi
SubSt = Mid(ChuoiGoc, k, 1)
If SubSt = Kytu Then
intChk = intChk + 1
If intChk = VitriBatDau Then Exit For
End If
Next k
If TraiPhai = True Then
k = k + 1
Else
k = k - 1
End If
Else
If TraiPhai = True Then
k = 1
Else
k = LngSt
End If
End If
Debug.Print "k: " & k
Debug.Print "vBegin: " & vBegin
Debug.Print "vLast: " & vLast
Debug.Print "Step: " & vStep
'Bat dau cat tu VitriBatdau
For i = k To vLast Step vStep
'Xet tung ky tu tu VitriBatdau den cuoi chuoi
SubSt = Mid(ChuoiGoc, i, 1)
Debug.Print "SubSt: " & SubSt
If SubSt = Kytu Then Exit For
If IsNumeric(SubSt) Or SubSt = DauNoi Then
If TraiPhai = True Then
ChuoiKq = ChuoiKq & SubSt
Else
ChuoiKq = SubSt & ChuoiKq
End If
End If
Next i
TachSo = ChuoiKq
End Function
Xin trao đổi cùng các bạn hàm tự viết để đáp ứng nhu cầu sau của 1 người bạn đang sử dụng Excel nêu ra với tôi:
Nhu cầu: Có 1 chuổi ghi địa chỉ theo dạng thức: số nhà và đường phố - ngõ - khu phố - phường - quận
Cần tách các chuổi số là: số nhà, ngõ, khu phố ghi trong chuổi địa chỉ nêu trên (chỉ cần tách lấy ra các ký tự số và các dấu đặc biệt nối liền các ký tự số như "/" trong chuổi "25/124")
Sau đây là code của hàm để đáp ứng nhu cầu trên. Các Bạn có ý kiến gì không?
Function TachSo(ChuoiGoc, Kytu As String, DauNoi As String, VitriBatDau As Integer, TraiPhai As Boolean)
'
'ChuoiGoc: Chuoi goc de xu ly
'Kytu: ky tu ngan cach
'VitriBatdau: Bat dau cat tai vi tri nay cua Kytu
'DauNoi: dau noi cac ky so
'TraiPhai: Cat tu ben trai hay ben phai ChuoiGoc?
'+ TraiPhai = True => Cat tu ben Trai ChuoiGoc (tu dau chuoi)
'+ TraiPhai = False => Cat tu ben phai chuoi (tu Cuoi Chuoi)
Dim SubSt As String, i As Integer, LngSt As Integer, ChuoiKq As String
Dim k As Integer, intChk As Integer
Dim vBegin As Integer, vLast As Integer, vStep As Integer
'
If IsNull(ChuoiGoc) Then Exit Function
LngSt = Len(Trim(CStr(ChuoiGoc)))
ChuoiKq = ""
intChk = 0
If TraiPhai = True Then
vBegin = 1
vLast = LngSt
vStep = 1
Else
vBegin = LngSt
vLast = 1
vStep = -1
End If
'Xac dinh vi tri bat dau cat
If VitriBatDau > 0 Then
For k = vBegin To vLast Step vStep
'Xet tung ky tu tu dau chuoi
SubSt = Mid(ChuoiGoc, k, 1)
If SubSt = Kytu Then
intChk = intChk + 1
If intChk = VitriBatDau Then Exit For
End If
Next k
If TraiPhai = True Then
k = k + 1
Else
k = k - 1
End If
Else
If TraiPhai = True Then
k = 1
Else
k = LngSt
End If
End If
Debug.Print "k: " & k
Debug.Print "vBegin: " & vBegin
Debug.Print "vLast: " & vLast
Debug.Print "Step: " & vStep
'Bat dau cat tu VitriBatdau
For i = k To vLast Step vStep
'Xet tung ky tu tu VitriBatdau den cuoi chuoi
SubSt = Mid(ChuoiGoc, i, 1)
Debug.Print "SubSt: " & SubSt
If SubSt = Kytu Then Exit For
If IsNumeric(SubSt) Or SubSt = DauNoi Then
If TraiPhai = True Then
ChuoiKq = ChuoiKq & SubSt
Else
ChuoiKq = SubSt & ChuoiKq
End If
End If
Next i
TachSo = ChuoiKq
End Function
Đính kèm
Sửa lần cuối: