Nhờ sửa lại code xóa ký tự đặc biệt ( )

Liên hệ QC

Bong0503

Thành viên hoạt động
Tham gia
17/8/16
Bài viết
155
Được thích
91
Nhờ các anh chị và các bạn trên diễn đàn sửa lại đoạn code xóa ký tự đặc biệt ().
Đoạn code này đã đáp ứng được yêu cầu của mình nhưng dùng For ... next nên file chạy lâu quá.
Chân thành cảm ơn.
Const sBad As String = "()"
Dim cell As Range
Dim s As String
Dim i As Long
With ActiveSheet
Application.ScreenUpdating = False
For Each cell In Range("c8:T558")
If VarType(cell.Value) = vbString Then
s = cell.Value
For i = 1 To Len(sBad)
s = Replace(s, Mid(sBad, i, 1), "")
Next i
cell.Value = Application.Trim(s)
End If
Next cell
Application.ScreenUpdating = True
End With
 
Nhờ các anh chị và các bạn trên diễn đàn sửa lại đoạn code xóa ký tự đặc biệt ().
Đoạn code này đã đáp ứng được yêu cầu của mình nhưng dùng For ... next nên file chạy lâu quá.
Chân thành cảm ơn.
Const sBad As String = "()"
Dim cell As Range
Dim s As String
Dim i As Long
With ActiveSheet
Application.ScreenUpdating = False
For Each cell In Range("c8:T558")
If VarType(cell.Value) = vbString Then
s = cell.Value
For i = 1 To Len(sBad)
s = Replace(s, Mid(sBad, i, 1), "")
Next i
cell.Value = Application.Trim(s)
End If
Next cell
Application.ScreenUpdating = True
End With
Tôi ghi macro lại nó đã ra code như sau:

Mã:
Sub Macro1()
'
' Macro1 Macro
'

'
    Cells.Replace What:="()", Replacement:="", LookAt:=xlPart, SearchOrder _
        :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
    
End Sub
 
Upvote 0
Tôi ghi macro lại nó đã ra code như sau:

Mã:
Sub Macro1()
'
' Macro1 Macro
'

'
    Cells.Replace What:="()", Replacement:="", LookAt:=xlPart, SearchOrder _
        :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
   
End Sub
Thế nếu ô có "bla (he he)" thì nó có thành "bla he he" không? Mà ô người ta có thể có thừa dấu cách, vì thế Application.Trim(s)

Nếu chỉ có các cụm () thì đơn giản rồi.
 
Upvote 0
Thế nếu ô có "bla (he he)" thì nó có thành "bla he he" không? Mà ô người ta có thể có thừa dấu cách, vì thế Application.Trim(s)

Nếu chỉ có các cụm () thì đơn giản rồi.
Nếu vậy thì chỉ có cách là mình đưa nó vào mảng để xử lý, còn nếu như xử lý trên cell thì chậm vô cùng.
 
Upvote 0
Do có cell.Value = Application.Trim(s) và bạn nói là đáp ứng được yêu cầu nên tôi đoán là trong vùng trên chi có giá trị, không có công thức nào.
Thử xem
Mã:
Sub test()
Const sBad As String = "()"
Dim r As Long, c As Long, i As Long
Dim s, Arr()
    Application.ScreenUpdating = False
    Arr = Range("c8:T558").Value
    For r = 1 To UBound(Arr)
        For c = 1 To UBound(Arr, 2)
            s = Arr(r, c)
            If VarType(s) = vbString Then
                For i = 1 To Len(sBad)
                    s = Replace(s, Mid(sBad, i, 1), "")
                Next i
                Arr(r, c) = Application.Trim(s)
            End If
        Next c
    Next r
    Range("c8:T558").Value = Arr
    Application.ScreenUpdating = True
End Sub
 
Upvote 0
Do có cell.Value = Application.Trim(s) và bạn nói là đáp ứng được yêu cầu nên tôi đoán là trong vùng trên chi có giá trị, không có công thức nào.
Thử xem
Mã:
Sub test()
Const sBad As String = "()"
Dim r As Long, c As Long, i As Long
Dim s, Arr()
    Application.ScreenUpdating = False
    Arr = Range("c8:T558").Value
    For r = 1 To UBound(Arr)
        For c = 1 To UBound(Arr, 2)
            s = Arr(r, c)
            If VarType(s) = vbString Then
                For i = 1 To Len(sBad)
                    s = Replace(s, Mid(sBad, i, 1), "")
                Next i
                Arr(r, c) = Application.Trim(s)
            End If
        Next c
    Next r
    Range("c8:T558").Value = Arr
    Application.ScreenUpdating = True
End Sub
Đúng rồi bạn trong vùng đó toàn giá trị, không có công thức, để mình test code rồi báo lại bạn.
Cám ơn bạn nhiều
 
Upvote 0
Do có cell.Value = Application.Trim(s) và bạn nói là đáp ứng được yêu cầu nên tôi đoán là trong vùng trên chi có giá trị, không có công thức nào.
Thử xem
Mã:
Sub test()
Const sBad As String = "()"
Dim r As Long, c As Long, i As Long
Dim s, Arr()
    Application.ScreenUpdating = False
    Arr = Range("c8:T558").Value
    For r = 1 To UBound(Arr)
        For c = 1 To UBound(Arr, 2)
            s = Arr(r, c)
            If VarType(s) = vbString Then
                For i = 1 To Len(sBad)
                    s = Replace(s, Mid(sBad, i, 1), "")
                Next i
                Arr(r, c) = Application.Trim(s)
            End If
        Next c
    Next r
    Range("c8:T558").Value = Arr
    Application.ScreenUpdating = True
End Sub
Cám ơn bạn rất nhiều, code hoàn hảo
 
Upvote 0
Phần "replace" còn tuỳ thuộc vào số lượng ký tự:
1-3 ký tự: dùng 1-3 hàm replace lồng vào nhau cho nó gọn
4-10 ký tự: dùng vòng lặp thay từng ký tự theo chuỗi (như code trên) hay dùng regex hiệu quả gần như nhau
trên 10 ký tự: dùng vòng lặp thay từng ký tự, nhưng dùng mảng ký tự hiệu quả hơn là mid từng lý tự trong chuỗi
 
Upvote 0
Phần "replace" còn tuỳ thuộc vào số lượng ký tự:
1-3 ký tự: dùng 1-3 hàm replace lồng vào nhau cho nó gọn
4-10 ký tự: dùng vòng lặp thay từng ký tự theo chuỗi (như code trên) hay dùng regex hiệu quả gần như nhau
trên 10 ký tự: dùng vòng lặp thay từng ký tự, nhưng dùng mảng ký tự hiệu quả hơn là mid từng lý tự trong chuỗi
Cám ơn bạn. Dữ liệu của mình chỉ có 2 ký tự ( ) thôi, code của bạn batman1 chạy mượt rồi.
 
Upvote 0
Web KT
Back
Top Bottom