Bóc tách chuỗi con từ chuỗi cha bằng VBA (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

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
 
Function BocTach(chuoi As String) As String
BocTach = Split(Replace(chuoi, "-", ".."), "..")(1)
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