Bóc tách chuỗi con từ chuỗi cha bằng VBA

Liên hệ QC

Van Tuyen Do

Thành viên mới
Tham gia
11/3/20
Bài viết
30
Được thích
1
Dear all,

Em có 1 file nhiều dòng cần bóc chuỗi con từ 1 chuỗi cha.
Trong đó: - Chuỗi con cần bóc nằm trong quy luật: vị trí bắt đầu nằm sau dấu hai chấm (..) và vị trí kết thúc nằm trước dấu gạch ngang (-), chuỗi con
- Chuỗi cha, chuỗi con không cố định (khác số lượng ký tự).

Giải pháp 1:
Em có thể giải quyết vấn đề bằng hàm MID(C2,FIND("..",C2)+2,FIND("-",C2)-FIND("..",C2)-2) để tìm ra chuỗi con. Tuy nhiên, em muốn sử dụng VBA để giải quyết vấn đề và e dùng InStr nhưng không ra kết quả. Vì vậy, e xin nhờ các Anh/Chị hỗ trợ em với ạ.

E mới bắt đầu với VBA nên còn nhiều sự ngu ngốc. Mong A/C thông cảm! Em xin cảm ơn ạ.
 

File đính kèm

Dear all,

Em có 1 file nhiều dòng cần bóc chuỗi con từ 1 chuỗi cha.
Trong đó: - Chuỗi con cần bóc nằm trong quy luật: vị trí bắt đầu nằm sau dấu hai chấm (..) và vị trí kết thúc nằm trước dấu gạch ngang (-), chuỗi con
- Chuỗi cha, chuỗi con không cố định (khác số lượng ký tự).

Giải pháp 1:
Em có thể giải quyết vấn đề bằng hàm MID(C2,FIND("..",C2)+2,FIND("-",C2)-FIND("..",C2)-2) để tìm ra chuỗi con. Tuy nhiên, em muốn sử dụng VBA để giải quyết vấn đề và e dùng InStr nhưng không ra kết quả. Vì vậy, e xin nhờ các Anh/Chị hỗ trợ em với ạ.

E mới bắt đầu với VBA nên còn nhiều sự ngu ngốc. Mong A/C thông cảm! Em xin cảm ơn ạ.
Thử vầy nha bạn.
Mã:
Function GetCode(ByVal sText As String) As String
    Dim lFr As Long, lTo As Long
    lFr = InStr(1, sText, "..")
    If lFr > 0 Then
        lFr = lFr + 2
        lTo = InStr(lFr, sText, "-")
        If lTo > 0 Then
            GetCode = Mid(sText, lFr, lTo - lFr)
        End If
    End If
End Function
 
Bạn thử code dưới (không rõ sưu tầm hay tự viết..)
FindtextXY(
Textfind: Đoạn văn bản cần tách
Find1: đoạn văn bản tìm kiếm 1
Find2: đoạn văn bản tìm kiếm 2
Order1: vị trí đoạn 1, mặc định là 1
Order2: vị trí đoạn 2, mặc định là 1
move1: số ký tự di chuyển số ký tự so với vị trí tìm được từ đoạn văn bản tìm kiếm 1, mặc định là 0
move2: số ký tự di chuyển số ký tự so với vị trí tìm được từ đoạn văn bản tìm kiếm 2, mặc định là 0

VÍ dụ bài của bạn: FindtextXY(C2,"..","-",1,1)

Function FindtextXY(Textfind As String, Find1 As String, Find2 As String, _ Optional ByVal order1 As Long = 1, Optional ByVal order2 As Long = 1, _ Optional ByVal move1 As Long = 0, Optional ByVal move2 As Long = 0) As String Dim x As Long, y As Long Dim i As Long, x1 As Long, y1 As Long On Error Resume Next If InStr(1, Textfind, Find1) = 0 Or InStr(1, Textfind, Find2) = 0 Then Exit Function For i = 1 To order1 x = InStr(x1 + 1, Textfind, Find1) If x = 0 Then Exit Function x1 = x Next i For i = 1 To order2 y = InStr(y1 + 1, Textfind, Find2) If y = 0 Then Exit Function y1 = y Next i If x + move1 < 1 Then x = 1 If y + move2 < 1 Then y = 1 If x < y Then FindtextXY = Mid(Textfind, x + move1, y + move2 - x - move1) Else FindtextXY = Mid(Textfind, y + move2, x + move1 - y - move2) End If End Function
 
Kết quả mong muốn của bạn là cái gì?
Đừng viết tắt trong bài viết.
Xin lỗi anh ạ.
Kết quả mong muốn của e là bóc được chuỗi con từ chuỗi cha. Vị trí bắt đầu của chuỗi con sau dấu hai chấm (..) và vị trí kết thúc trước dấu gạch ngang (-).
Cụ thể cho dòng số 1, kết quả cần tìm là: 680003640027
 
Xin lỗi anh ạ.
Kết quả mong muốn của e là bóc được chuỗi con từ chuỗi cha. Vị trí bắt đầu của chuỗi con sau dấu hai chấm (..) và vị trí kết thúc trước dấu gạch ngang (-).
Cụ thể cho dòng số 1, kết quả cần tìm là: 680003640027
Thêm 1 cách khác thử
Mã:
Function ABC(ByVal chuoi As String)
Dim  S, S1$
    S = Split(chuoi, "..")
    If UBound(S) > 0 Then
        S1 = Split(S(UBound(S)), "-")(0)
    End If
    ABC = S1
End Function
 
Thử vầy nha bạn.
Mã:
Function GetCode(ByVal sText As String) As String
    Dim lFr As Long, lTo As Long
    lFr = InStr(1, sText, "..")
    If lFr > 0 Then
        lFr = lFr + 2
        lTo = InStr(lFr, sText, "-")
        If lTo > 0 Then
            GetCode = Mid(sText, lFr, lTo - lFr)
        End If
    End If
End Function
Cảm ơn Anh đã hướng dẫn ạ
Bài đã được tự động gộp:

Thêm 1 cách khác thử
Mã:
Function ABC(ByVal chuoi As String)
Dim  S, S1$
    S = Split(chuoi, "..")
    If UBound(S) > 0 Then
        S1 = Split(S(UBound(S)), "-")(0)
    End If
    ABC = S1
End Function
Cảm ơn Anh đã hướng dẫn ạ
Bài đã được tự động gộp:

Function BocTach(chuoi As String) As String
BocTach = Split(Replace(chuoi, "-", ".."), "..")(1)
End Function
Cảm ơn bạn đã hỗ trợ ạ
 
Web KT

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

Back
Top Bottom