Hàm trích các phần tử của chuổi

  • Thread starter Thread starter ngvanho
  • Ngày gửi Ngày gửi
Liên hệ QC

ngvanho

Thành viên chính thức
Tham gia
25/5/07
Bài viết
82
Được thích
125
Tôi có hàm tự tạo ( củ chuối ) như sau :

Private Function TRICH(CHU As String, J As Integer) As String
Dim I As Integer
Dim strText() As String
CHU = UCase(Trim(CHU))
CHU = Application.WorksheetFunction.Substitute(CHU, "//", " 0 ")
CHU = Application.WorksheetFunction.Substitute(CHU, "/ /", " 0 ")
CHU = Application.WorksheetFunction.Substitute(CHU, "/ /", " 0 ")
CHU = Application.WorksheetFunction.Substitute(CHU, "/ /", " 0 ")
CHU = Application.WorksheetFunction.Substitute(CHU, "/ /", " 0 ")
CHU = Application.WorksheetFunction.Substitute(CHU, "\\", " 0 ")
CHU = Application.WorksheetFunction.Substitute(CHU, "\ \", " 0 ")
CHU = Application.WorksheetFunction.Substitute(CHU, "\ \", " 0 ")
CHU = Application.WorksheetFunction.Substitute(CHU, "\ \", " 0 ")
CHU = Application.WorksheetFunction.Substitute(CHU, "\ \", " 0 ")
CHU = Application.WorksheetFunction.Substitute(CHU, "/", " ")
CHU = Application.WorksheetFunction.Substitute(CHU, "\", " ")
CHU = Application.WorksheetFunction.Substitute(CHU, "(", " ")
CHU = Application.WorksheetFunction.Substitute(CHU, ")", " ")
CHU = Application.WorksheetFunction.Substitute(CHU, "'", " ")
CHU = Application.WorksheetFunction.Substitute(CHU, ";", " ")
CHU = Application.WorksheetFunction.Substitute(CHU, ",", " ")
CHU = Application.WorksheetFunction.Substitute(CHU, ".", " ")
CHU = Application.WorksheetFunction.Substitute(CHU, " ", " ")
CHU = Application.WorksheetFunction.Substitute(CHU, " ", " ")
CHU = Application.WorksheetFunction.Substitute(CHU, " ", " ")
CHU = Application.WorksheetFunction.Substitute(CHU, " ", " ")
CHU = Application.WorksheetFunction.Substitute(CHU, " ", " ")
strText = Split(CHU, Space(1))
J = J - 1
TRICH = Trim(strText(J))
End Function

Cách sử dụng như file đính kèm.Các bạn chưa thấy hay thì cải tiến giùm mình nhé.Thành hàm mảng càng tốt.cám ơn
 

File đính kèm

Mình xin mạo muội góp ý đó là việc trích trong, ngoài, phải trái, giữa...đã có sẵn trong Excel rồi chứ nhỉ? Trích ở giữa một chuỗi thì dùng hàm MID là xong thôi chứ? Hoặc là phải hay trái thì dùng LEFT hay RIGHT....có đúng không? Hay ý của bạn còn cái gì hay hơn?
 
Upvote 0
Tôi có hàm tự tạo ( củ chuối ) như sau :

Private Function TRICH(CHU As String, J As Integer) As String
Dim I As Integer
Dim strText() As String
CHU = UCase(Trim(CHU))
CHU = Application.WorksheetFunction.Substitute(CHU, "//", " 0 ")
CHU = Application.WorksheetFunction.Substitute(CHU, "/ /", " 0 ")
CHU = Application.WorksheetFunction.Substitute(CHU, "/ /", " 0 ")
CHU = Application.WorksheetFunction.Substitute(CHU, "/ /", " 0 ")
CHU = Application.WorksheetFunction.Substitute(CHU, "/ /", " 0 ")
CHU = Application.WorksheetFunction.Substitute(CHU, "\\", " 0 ")
CHU = Application.WorksheetFunction.Substitute(CHU, "\ \", " 0 ")
CHU = Application.WorksheetFunction.Substitute(CHU, "\ \", " 0 ")
CHU = Application.WorksheetFunction.Substitute(CHU, "\ \", " 0 ")
CHU = Application.WorksheetFunction.Substitute(CHU, "\ \", " 0 ")
CHU = Application.WorksheetFunction.Substitute(CHU, "/", " ")
CHU = Application.WorksheetFunction.Substitute(CHU, "\", " ")
CHU = Application.WorksheetFunction.Substitute(CHU, "(", " ")
CHU = Application.WorksheetFunction.Substitute(CHU, ")", " ")
CHU = Application.WorksheetFunction.Substitute(CHU, "'", " ")
CHU = Application.WorksheetFunction.Substitute(CHU, ";", " ")
CHU = Application.WorksheetFunction.Substitute(CHU, ",", " ")
CHU = Application.WorksheetFunction.Substitute(CHU, ".", " ")
CHU = Application.WorksheetFunction.Substitute(CHU, " ", " ")
CHU = Application.WorksheetFunction.Substitute(CHU, " ", " ")
CHU = Application.WorksheetFunction.Substitute(CHU, " ", " ")
CHU = Application.WorksheetFunction.Substitute(CHU, " ", " ")
CHU = Application.WorksheetFunction.Substitute(CHU, " ", " ")
strText = Split(CHU, Space(1))
J = J - 1
TRICH = Trim(strText(J))
End Function

Cách sử dụng như file đính kèm.Các bạn chưa thấy hay thì cải tiến giùm mình nhé.Thành hàm mảng càng tốt.cám ơn

Không hiểu ý của bạn là như thế nào ??? Hàm này để làm gì ??

Thân!
 
Upvote 0
Trích phần tử của chuổi

Bắp ơi! các phần tử độ dài ngắn khác nhau.chỉ có quy luật là khoảng trắng,hoặc gạch sổ \ / ( . .... mà.có nghĩa là công thức cho ô trên phải sử dụng được cho ô dưới.
 
Upvote 0
Tôi có hàm tự tạo ( củ chuối ) như sau :

Private Function TRICH(CHU As String, J As Integer) As String
Dim I As Integer
Dim strText() As String
CHU = UCase(Trim(CHU))
CHU = Application.WorksheetFunction.Substitute(CHU, "//", " 0 ")
CHU = Application.WorksheetFunction.Substitute(CHU, "/ /", " 0 ")
CHU = Application.WorksheetFunction.Substitute(CHU, "/ /", " 0 ")
CHU = Application.WorksheetFunction.Substitute(CHU, "/ /", " 0 ")
CHU = Application.WorksheetFunction.Substitute(CHU, "/ /", " 0 ")
CHU = Application.WorksheetFunction.Substitute(CHU, "\\", " 0 ")
CHU = Application.WorksheetFunction.Substitute(CHU, "\ \", " 0 ")
CHU = Application.WorksheetFunction.Substitute(CHU, "\ \", " 0 ")
CHU = Application.WorksheetFunction.Substitute(CHU, "\ \", " 0 ")
CHU = Application.WorksheetFunction.Substitute(CHU, "\ \", " 0 ")
CHU = Application.WorksheetFunction.Substitute(CHU, "/", " ")
CHU = Application.WorksheetFunction.Substitute(CHU, "\", " ")
CHU = Application.WorksheetFunction.Substitute(CHU, "(", " ")
CHU = Application.WorksheetFunction.Substitute(CHU, ")", " ")
CHU = Application.WorksheetFunction.Substitute(CHU, "'", " ")
CHU = Application.WorksheetFunction.Substitute(CHU, ";", " ")
CHU = Application.WorksheetFunction.Substitute(CHU, ",", " ")
CHU = Application.WorksheetFunction.Substitute(CHU, ".", " ")
CHU = Application.WorksheetFunction.Substitute(CHU, " ", " ")
CHU = Application.WorksheetFunction.Substitute(CHU, " ", " ")
CHU = Application.WorksheetFunction.Substitute(CHU, " ", " ")
CHU = Application.WorksheetFunction.Substitute(CHU, " ", " ")
CHU = Application.WorksheetFunction.Substitute(CHU, " ", " ")
strText = Split(CHU, Space(1))
J = J - 1
TRICH = Trim(strText(J))
End Function

Cách sử dụng như file đính kèm.Các bạn chưa thấy hay thì cải tiến giùm mình nhé.Thành hàm mảng càng tốt.cám ơn
Application.WorksheetFunction.Substitute(CHU, "//", " 0 ")
Hàm này là tự thay thế các chữ "//" thành " 0 " và lấy chữ thứ mấy cùa String (CHU)
Sao bác không dùng tổng quát hơn như sau:
PHP:
Option Explicit
Private Function LayChu(CHU As String, OldStr As String, NewStr As String, BreakStr As String, NumStr As Integer) As String
Dim strText() As String
CHU = UCase(Trim(CHU))
If Len(BreakStr) = 0 Then Exit Function
If InStr(1, CHU, UCase(OldStr)) = 0 Then
    MsgBox "Khong co KT" & OldStr
    Exit Function
Else
    CHU = Replace(CHU, OldStr, NewStr, 1, -1, vbTextCompare)
End If
strText = Split(CHU, BreakStr)
LayChu = Trim(strText(NumStr - 1))
End Function
Trong đó:
OldStr: Chuổi cũ; vd: "//"
New: Chuổi mới; vd: "0"
BreakStr: Lý tự phân cách cụ thể như " ", ":" ...
NumStr: TT chuổi cần lấy
Cú pháp:
CHU="123 456 // 78 aa b"
OldStr="a"
NewStr="TN"
BreakStr=" "
NumStr=5
LayChu("123 456 // 78 aa b","a","TN"," ",5)="TNTN"
LayChu(CHU As String, OldStr As String, NewStr As String, BreakStr As String, NumStr As Integer)
 
Upvote 0
Không hẳn là thay thế đâu Thu nghi.Ở đây là lấy phần tử thứ mấy trong chuổi,nếu phần tử đó trống thì mới thay bằng 0.Ở đây các phần tử không có độ dài như nhau,chỉ có các khoảng trắng(1 hoặc nhiều),cá dấu \ / ( ) . , ; để tách các phần tử thôi.
 
Upvote 0
Theo tôi hiểu thì hàm của bạn dùng để trích ra 1 từ thứ bao nhiêu đó trong 1 chuỗi. Trong hàm của bạn bạn đã thay thế các dấu phân cách(//, \\, ., ,, ...) thành dấu cách để split theo dấu cách, nhưng bạn thiếu mất 1 bước là phải thay thế các dấu cách liền nhau thành 1 dấu cách, nếu không sẽ có trường hợp bạn lấy về là chuỗi rỗng không mong muốn. Và bạn cũng cần kiểm tra xem chuỗi đó có từ đủ từ để bạn lấy hay không, ví dụ chuỗi có 1 từ, bạn lại lấy từ thứ 10 thì hàm của bạn trả về lỗi, mà lẽ ra nó phải trả về chuỗi rỗng.
 
Upvote 0
Em xin góp vui :
PHP:
Private Function TRICH(CHU As String, J As Integer) As String
StrText() As String
With WorksheetFunction
CHU = UCase(.Trim(CHU))
CHU = .Substitute(.Substitute(CHU, "\ \", " 0 "), "/ /", " 0 ")
CHU = .Substitute(.Substitute(CHU, "\", " "), "/", " ")
CHU = .Substitute(.Substitute(CHU, ")", " "), "(", " ")
CHU = .Substitute(.Substitute(CHU, ",", " "), "'", " ")
CHU = .Substitute(.Substitute(CHU, ".", " "), ";", " ")
StrText = Split(.Trim(CHU), " "): TRICH = Trim(StrText(J - 1))
End With
End Function
 

File đính kèm

Upvote 0
Sửa tạm thế này cho gọn bớt thôi, chứ vẫn chưa bẫy lỗi CHU là chuỗi rỗng hoặc lỗi J lớn hơn số từ cótrong chuỗi.
Mã:
Function TRICH(CHU As String, j As Integer) As String
Dim I As Integer, k As Integer
Dim strText() As String
Dim Kytutrong(1 To 4) As String
Dim Kytusai(1 To 8) As String
Kytutrong(1) = "//"
Kytutrong(2) = "/ /"
Kytutrong(3) = "\\"
Kytutrong(4) = "\ \"
Kytusai(1) = "/"
Kytusai(2) = "\"
Kytusai(3) = "("
Kytusai(4) = ")"
Kytusai(5) = "'"
Kytusai(6) = ";"
Kytusai(7) = "."
Kytusai(8) = "'"
CHU = UCase(Application.Trim(CHU))
For k = 1 To 4
    CHU = Replace(CHU, Kytutrong(k), " 0 ")
Next
For I = 1 To 8
    CHU = Replace(CHU, Kytusai(I), " ")
Next
CHU = Application.Trim(CHU)
strText = Split(CHU, Space(1))
j = j - 1
TRICH = Trim(strText(j))
End Function
 
Upvote 0
Trong VBA, thay gì dùng WorksheetFunction.Substitute thì ta có thể dùng Replace chọn gọn
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom