Tách kí tự ra khỏi chuỗi không thống nhất

Liên hệ QC

smldt96

Thành viên mới
Tham gia
30/6/18
Bài viết
17
Được thích
0
Giới tính
Nữ
Mọi người cho em hỏi chút ạ!
1577690090890.png
Em có chuỗi kí tự ở cột A e muốn lọc ra web như cột B thì có phương án nào tốn ít công thức nhất không ạ. Hiện tại e làm ra kết quả mà cần phải lặp đi lặp lại công thức nhiều lần quá ạ. Điểm chung của chuỗi kí tự trên là đều " " có dấu cách trước web. Có cách nào FIND " " từ phải qua trái không ạ
 

File đính kèm

  • hd.xlsx
    8.8 KB · Đọc: 26
Xem bài "Các phương pháp tách họ và tên...". Và tự áp dụng cho trường hợp của mình.
Gợi ý: đoạn chuỗi đứng sau dấu cách cuối cùng có thể coi như "tên".
 
Mọi người cho em hỏi chút ạ!
View attachment 230627
Em có chuỗi kí tự ở cột A e muốn lọc ra web như cột B thì có phương án nào tốn ít công thức nhất không ạ. Hiện tại e làm ra kết quả mà cần phải lặp đi lặp lại công thức nhiều lần quá ạ. Điểm chung của chuỗi kí tự trên là đều " " có dấu cách trước web. Có cách nào FIND " " từ phải qua trái không ạ
Bạn Thử Function sau cho 2 trang web . com và . vn
Mã:
Function ExtractWeb(ByVal text As String) As String
    Dim RE As Object, Matches As Object
    Set RE = CreateObject("VBScript.RegExp")
    RE.Global = True
    RE.Pattern = "((([A-z,0-9])*.com)|(([A-z,0-9])*.vn))"
    If RE.Test(text) Then
     Dim match As Object
        Set Matches = RE.Execute(text)
       For Each match In Matches
            ExtractWeb = ExtractWeb & ", " & match.value
        Next
            ExtractWeb = Mid(ExtractWeb, 3)
    End If
    Set Matches = Nothing
    Set RE = Nothing
End Function
 
Mọi người cho em hỏi chút ạ!
View attachment 230627
Em có chuỗi kí tự ở cột A e muốn lọc ra web như cột B thì có phương án nào tốn ít công thức nhất không ạ. Hiện tại e làm ra kết quả mà cần phải lặp đi lặp lại công thức nhiều lần quá ạ. Điểm chung của chuỗi kí tự trên là đều " " có dấu cách trước web. Có cách nào FIND " " từ phải qua trái không ạ
Công thức này cũng đâu có dài lắm
Mã:
=TRIM(RIGHT(SUBSTITUTE(TRIM(A1)," ",REPT(" ",255)),255))
 
Mọi người cho em hỏi chút ạ!
View attachment 230627
Em có chuỗi kí tự ở cột A e muốn lọc ra web như cột B thì có phương án nào tốn ít công thức nhất không ạ. Hiện tại e làm ra kết quả mà cần phải lặp đi lặp lại công thức nhiều lần quá ạ. Điểm chung của chuỗi kí tự trên là đều " " có dấu cách trước web. Có cách nào FIND " " từ phải qua trái không ạ
Thử File'
 

File đính kèm

  • Tach Tach.xlsm
    18 KB · Đọc: 21
Anh 9 "chơi chiêu" kỳ quá, đã "cót két" mà còn "chơi" hàm Excel.
Không dùng mảng thì "chơi" kiểu này cũng được nè:
PHP:
Public Sub Tach()
Dim Rng As Range, Cll As Range
Set Rng = Range("A2", Range("A50000").End(xlUp))
    For Each Cll In Rng
        Cll.Offset(, 2) = Mid(Cll, InStrRev(Cll, " ") + 1, Len(Cll))
    Next Cll
Set Rng = Nothing
End Sub
 
Lần chỉnh sửa cuối:
Anh 9 "chơi chiêu" kỳ quá, đã "cót két" mà còn "chơi" hàm Excel.
Không dùng mảng thì "chơi" kiểu này cũng được nè:
PHP:
Public Sub Tach()
Dim Rng As Range, Cll As Range
Set Rng = Range("A2", Range("A50000").End(xlUp))
    For Each Cll In Rng
        Cll.Offset(, 2) = Mid(Cll, InStrRev(Cll, " ") + 1, Len(Cll))
    Next Cll
Set Rng = Nothing
End Sub
Bài 3 đang tập gán hàm sẳn bài hỏi thì áp dụng thử, chứ vòng lặp thì tôi chơi thế này:
Mã:
Sub TachMail()
    Dim DongDau, KTrong, DongCuoi As Long
    DongCuoi = Sheet1.Cells(Rows.Count, "A").End(xlUp).Row
    For DongDau = 2 To DongCuoi
        KTrong = InStrRev(Cells(DongDau, 1), " ")
        Cells(DongDau, 2).Value = Mid(Cells(DongDau, 1), KTrong)
    Next
End Sub
 
Bạn Thử Function sau cho 2 trang web . com và . vn
Mã:
Function ExtractWeb(ByVal text As String) As String
    Dim RE As Object, Matches As Object
    Set RE = CreateObject("VBScript.RegExp")
    RE.Global = True
    RE.Pattern = "((([A-z,0-9])*.com)|(([A-z,0-9])*.vn))"
    If RE.Test(text) Then
     Dim match As Object
        Set Matches = RE.Execute(text)
       For Each match In Matches
            ExtractWeb = ExtractWeb & ", " & match.value
        Next
            ExtractWeb = Mid(ExtractWeb, 3)
    End If
    Set Matches = Nothing
    Set RE = Nothing
End Function

test thử :
Mã:
MsgBox ExtractWeb("bai viet duoc trich dan tu website www.giaip--hapexcel.com.vn")

cú pháp RE.Pattern = "((([A-z,0-9])*.com)|(([A-z,0-9])*.vn))" gần như tương đương với .Pattern = "\w*(.com|.vn)"
 
Mọi người cho em hỏi chút ạ!
View attachment 230627
Em có chuỗi kí tự ở cột A e muốn lọc ra web như cột B thì có phương án nào tốn ít công thức nhất không ạ. Hiện tại e làm ra kết quả mà cần phải lặp đi lặp lại công thức nhiều lần quá ạ. Điểm chung của chuỗi kí tự trên là đều " " có dấu cách trước web. Có cách nào FIND " " từ phải qua trái không ạ
Nếu đơn giản vậy " Điểm chung của chuỗi kí tự trên là đều " " có dấu cách trước web. Có cách nào FIND " " từ phải qua trái không ạ" thì giản đơn dùng công thức của pác Ndu.
Trường hợp phức tạp hơn, tổng quát nhất vẫn là dùng Regular expression đỡ hại não, tham khảo:
PHP:
With New RegExp
        .IgnoreCase = True
        .Global = True
        .Pattern = "[-\w\.]+(com|vn)"
        If .Test("chuỗi cần xử lý") Then MsgBox .Execute(s)(0)
    End With
 
Bạn dùng công cụ tìm kiếm và thay thế cũng được mà.Tach.gif
 
test thử :
Mã:
MsgBox ExtractWeb("bai viet duoc trich dan tu website www.giaip--hapexcel.com.vn")

cú pháp RE.Pattern = "((([A-z,0-9])*.com)|(([A-z,0-9])*.vn))" gần như tương đương với .Pattern = "\w*(.com|.vn)"
Cảm ơn anh về cách viết này ạ ! Còn chuỗi anh đưa ra chắc em Vân cần sửa lại chuỗi .Pattern để lấy dữ liệu
 
1. Cái pattern Regex trên chỉ lấy được cái domain (com/vn) và cái subdomain (*.com) thứ nhất thôi. Nếu quép sai chạy dài lên vài subdomain nữa thì nó bỏ qua:
batam.mangtitoet.com

2. Và nó chỉ là tổng quát. Trong ví dụ cuối của thớt có đến 2 cái quép sai. Code dùng regex theo pattern trên thì phải thêm phầm gộp chúng lại.

Nếu regex thì cái pattern của bài này nên là "dãy ký tự khác dấu cách" + "ký pháp cuối chuỗi"
 
1. Cái pattern Regex trên chỉ lấy được cái domain (com/vn) và cái subdomain (*.com) thứ nhất thôi. Nếu quép sai chạy dài lên vài subdomain nữa thì nó bỏ qua:
batam.mangtitoet.com

2. Và nó chỉ là tổng quát. Trong ví dụ cuối của thớt có đến 2 cái quép sai. Code dùng regex theo pattern trên thì phải thêm phầm gộp chúng lại.

Nếu regex thì cái pattern của bài này nên là "dãy ký tự khác dấu cách" + "ký pháp cuối chuỗi"
Em Vân cảm ơn anh ạ, em vân sẽ tìm hiểu thêm ạ
 
Mọi người cho em hỏi chút ạ!
View attachment 230627
Em có chuỗi kí tự ở cột A e muốn lọc ra web như cột B thì có phương án nào tốn ít công thức nhất không ạ. Hiện tại e làm ra kết quả mà cần phải lặp đi lặp lại công thức nhiều lần quá ạ. Điểm chung của chuỗi kí tự trên là đều " " có dấu cách trước web. Có cách nào FIND " " từ phải qua trái không ạ
Thêm 1 cách nữa cho bạn tham khảo, thấy cái nào thấy phù hợp thì dùng.
Copy dữ liệu vào cột A sheet1 rồi nhấn nút.
 

File đính kèm

  • Tach Du Lieu.xlsm
    20.6 KB · Đọc: 10
Dạ, e cảm ơn ạ. Bác có thể giải thích giúp e về công thức này được không ạ
Công thức trên dựa theo quy tắc:
Chủ yếu dựa vào dấu cách, nếu sửa dấu cách thành 255 dấu cách, sau đó ta cắt bên phải 255 ký tự và dùng hàm Trim để xóa dấu cách. Ta còn lại chuỗi cần tìm.

Tuy nhiên một đường dẫn có thể dài hơn 255 ký tự, vì vậy phải sửa thành số lớn hơn nếu cần thiết.
 
Web KT
Back
Top Bottom