[Giúp] VBA cắt chuỗi có điều kiện = ".jpg"

Liên hệ QC

ngoctuyen1995

Thành viên hoạt động
Tham gia
25/4/17
Bài viết
196
Được thích
19
Giới tính
Nữ
Thân chào cả nhà GPEX!

Hiện tại em có 1 File có các giá trị là 1 chuỗi dài, em dùng VBA tìm đến các giá trị đó và cắt chuỗi theo điều kiện khi chuỗi đó có đuôi .jpg..

Ví dụ: https://cdardctblobprodapac001.blob...67772/109719705/109719705_A8_1_1534427011.jpg
Kết quả: 109719705_A8_1_1534427011.jpg

Vì số lượng nó ở nhiều cell khác nhau, nên em muốn điều kiện là chỉ cắt những chuỗi có đuôi là .jpg thôi ạ..

Em có đính kèm File bên dưới ạ.. Mong cả nhà giúp đỡ..
Em chân thành cảm ơn ạ..
 

File đính kèm

Thân chào cả nhà GPEX!

Hiện tại em có 1 File có các giá trị là 1 chuỗi dài, em dùng VBA tìm đến các giá trị đó và cắt chuỗi theo điều kiện khi chuỗi đó có đuôi .jpg..

Ví dụ: https://cdardctblobprodapac001.blob...67772/109719705/109719705_A8_1_1534427011.jpg
Kết quả: 109719705_A8_1_1534427011.jpg

Vì số lượng nó ở nhiều cell khác nhau, nên em muốn điều kiện là chỉ cắt những chuỗi có đuôi là .jpg thôi ạ..

Em có đính kèm File bên dưới ạ.. Mong cả nhà giúp đỡ..
Em chân thành cảm ơn ạ..
Bạn chỉ cần dùng chức năng replace của excel là ra kết quả. Ấn Ctrl+ H. Rồi gõ */ , thay thế thành khoảng trắng
 
Upvote 0
Bạn chỉ cần dùng chức năng replace của excel là ra kết quả. Ấn Ctrl+ H. Rồi gõ */ , thay thế thành khoảng trắng
Chào Anh..!
nếu dùng Ctrl + H, thì em sợ trong data có nhiều dữ liệu có ký tự */ nên nó sẽ xóa luôn.. nên em mới thêm điều kiện .jpg nữa ạ... Nếu như vậy thì làm sao ạ
 
Upvote 0
Chào Anh..!
nếu dùng Ctrl + H, thì em sợ trong data có nhiều dữ liệu có ký tự */ nên nó sẽ xóa luôn.. nên em mới thêm điều kiện .jpg nữa ạ... Nếu như vậy thì làm sao ạ
Về nguyên tắc tên file sẽ không có ký tự / \ ? *< >, do đó Ctrl+H là hoàn toàn được
nếu muốn thêm điều kiện Jpg thì chỉ có dùng VBA thôi
 
Upvote 0
Thân chào cả nhà GPEX!

Hiện tại em có 1 File có các giá trị là 1 chuỗi dài, em dùng VBA tìm đến các giá trị đó và cắt chuỗi theo điều kiện khi chuỗi đó có đuôi .jpg..

Ví dụ: https://cdardctblobprodapac001.blob...67772/109719705/109719705_A8_1_1534427011.jpg
Kết quả: 109719705_A8_1_1534427011.jpg

Vì số lượng nó ở nhiều cell khác nhau, nên em muốn điều kiện là chỉ cắt những chuỗi có đuôi là .jpg thôi ạ..

Em có đính kèm File bên dưới ạ.. Mong cả nhà giúp đỡ..
Em chân thành cảm ơn ạ..
Code VBA sẽ kiểu như vậy:
Copy vào sheet Data
Mã:
Sub t()
    Dim tmpArr, tmp, j, i
        tmpArr = ActiveSheet.UsedRange
        With CreateObject("Vbscript.regexp")
            .Global = True
            .ignoreCase = True
            .Pattern = ".*/(?=.+jpg)"
            For i = 1 To UBound(tmpArr, 1)
                For j = 1 To UBound(tmpArr, 2)
                    tmp = tmpArr(i, j)
                    If .test(tmp) Then tmpArr(i, j) = .Replace(tmp, "")
                Next
            Next
        End With
        ActiveSheet.UsedRange = tmpArr
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Chào Anh..!
nếu dùng Ctrl + H, thì em sợ trong data có nhiều dữ liệu có ký tự */ nên nó sẽ xóa luôn.. nên em mới thêm điều kiện .jpg nữa ạ... Nếu như vậy thì làm sao ạ
Góp thêm 1 cách dùng công thức giúp bạn
Dạo này tần suất sử dụng hàm aggregate của mình nhiều thật.
 

File đính kèm

Upvote 0
Code VBA sẽ kiểu như vậy:
Copy vào sheet Data
Mã:
Sub t()
    Dim tmpArr, tmp, j, i
        tmpArr = ActiveSheet.UsedRange
        With CreateObject("Vbscript.regexp")
            .Global = True
            .ignoreCase = True
            .Pattern = ".+/(?=.+jpg)"
            For i = 1 To UBound(tmpArr, 1)
                For j = 1 To UBound(tmpArr, 2)
                    tmp = tmpArr(i, j)
                    If .test(tmp) Then tmpArr(i, j) = .Replace(tmp, "")
                Next
            Next
        End With
        ActiveSheet.UsedRange = tmpArr
End Sub
Hay quá...! đoạn code trên đã giải quyết được vấn đề của em rồi ạ...

Em cảm ơn anh ạ.. chúc Anh sức khỏe và thành công...
chúc diễn đàn ngày càng lớn mạnh
 
Upvote 0
Công cụ có sẵn Flash fill, nhanh gọn.
 
Upvote 0
Chào Anh..!
nếu dùng Ctrl + H, thì em sợ trong data có nhiều dữ liệu có ký tự */ nên nó sẽ xóa luôn.. nên em mới thêm điều kiện .jpg nữa ạ... Nếu như vậy thì làm sao ạ
Bạn chọn vùng nào trước khi Ctrl + H thì Find and Replace chỉ làm việc chỗ đó thôi, sao lại nhầm được
 
Upvote 0
Code VBA sẽ kiểu như vậy:
Copy vào sheet Data
Mã:
Sub t()
    Dim tmpArr, tmp, j, i
        tmpArr = ActiveSheet.UsedRange
        With CreateObject("Vbscript.regexp")
            .Global = True
            .ignoreCase = True
            .Pattern = ".+/(?=.+jpg)"
            For i = 1 To UBound(tmpArr, 1)
                For j = 1 To UBound(tmpArr, 2)
                    tmp = tmpArr(i, j)
                    If .test(tmp) Then tmpArr(i, j) = .Replace(tmp, "")
                Next
            Next
        End With
        ActiveSheet.UsedRange = tmpArr
End Sub
Bài này dùng Regex vừa nặng mà vừa khó. Code trên không giải quyết được /abc.jpg và abc.jpg
Tức là nó bắt buộc chuỗi phải có ít nhất 1 ký tự đi trước /

Code giản dị hơn:
Function tt(byVal s As String) As String
If Right(s, 4) = ".jpg" Then tt = Mid(s, InStrRev(s, "/") + 1)
End Function
 
Upvote 0
Web KT

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

Back
Top Bottom