Tìm và thay thế nhiều ký tự (1 người xem)

  • Thread starter Thread starter hayvoc
  • Ngày gửi Ngày gửi
Liên hệ QC

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

hayvoc

Thành viên mới
Tham gia
30/11/08
Bài viết
38
Được thích
3
A1 ngay,mai.troi-lai(sang

B1 =SUBSTITUTE(A1,","," ") ngay mai.troi-lai(sang
C1 =SUBSTITUTE(B1,"."," ") ngay mai troi-lai(sang
D1 =SUBSTITUTE(C1,"-"," ") ngay mai troi lai(sang
E1 =SUBSTITUTE(D1,"("," ") ngay mai troi lai sang

Có cách nào có thẻ thay thế 1 làn {, . - ( } bằng " " được ko các anh ?
 
A1 ngay,mai.troi-lai(sang

B1 =SUBSTITUTE(A1,","," ") ngay mai.troi-lai(sang
C1 =SUBSTITUTE(B1,"."," ") ngay mai troi-lai(sang
D1 =SUBSTITUTE(C1,"-"," ") ngay mai troi lai(sang
E1 =SUBSTITUTE(D1,"("," ") ngay mai troi lai sang

Có cách nào có thẻ thay thế 1 làn {, . - ( } bằng " " được ko các anh ?

lồng các hàm substitute vào nhau, hay dùng vba thì xài hàm replace
 
A1 ngay,mai.troi-lai(sang

B1 =SUBSTITUTE(A1,","," ") ngay mai.troi-lai(sang
C1 =SUBSTITUTE(B1,"."," ") ngay mai troi-lai(sang
D1 =SUBSTITUTE(C1,"-"," ") ngay mai troi lai(sang
E1 =SUBSTITUTE(D1,"("," ") ngay mai troi lai sang

Có cách nào có thẻ thay thế 1 làn {, . - ( } bằng " " được ko các anh ?
Hàm tự tạo này có thể xài được
PHP:
Function ThayThe(Cell$) As String
With CreateObject("Vbscript.Regexp")
   .Global = True
   .Pattern = "\.|-|\("
   ThayThe = .Replace(Cell, " ")
End With
End Function
 
cám ơn a, vạy giờ muốn thêm các ký tự khác thì sao anh
Pattern = "\.|-|\("
 
có thể áp dụng bàng 1 từ hay 1 chuỗi được ko anh
 
nhờ a điền vào 1 làn dùm e, e chưa hiểu cú pháp nên điền vào ko được

, . - ( ) < >
 
e làm được ròi thì ra đây là regex thank anh nhìu

\.|-|\(|\)
 
A1 ngay,mai.troi-lai(sang

B1 =SUBSTITUTE(A1,","," ") ngay mai.troi-lai(sang
C1 =SUBSTITUTE(B1,"."," ") ngay mai troi-lai(sang
D1 =SUBSTITUTE(C1,"-"," ") ngay mai troi lai(sang
E1 =SUBSTITUTE(D1,"("," ") ngay mai troi lai sang

Có cách nào có thẻ thay thế 1 làn {, . - ( } bằng " " được ko các anh ?
Góp thêm cho xôm tụ.
Dùng cho chữ không dấu
PHP:
Public Function Tach(DL)
With CreateObject("VBScript.RegExp")
.Global = True
.IgnoreCase = True
.Pattern = "[^a-z]"
Tach = .Replace(DL, " ")
End With
End Function
 
Như bài 13 thì đây là 1 kiểu khác để tạo Pattern. Tuy nhiên dấu | sẽ hữu dụng khi bạn hiểu thêm tí về Regexp. Regexp rất thú vị và linh hoạt khi làm việc với chuỗi. Từ từ nhai nhé.

.Pattern = "[().,-<>]"
 
cho em hỏi thêm e muốn tách như thế này thì làm sao ạ

A1: 10 điều (Bác hồ) dạy
B1: (Bác hồ)
C1: 10 điều dạy
 
cho em hỏi thêm e muốn tách như thế này thì làm sao ạ

A1: 10 điều (Bác hồ) dạy
B1: (Bác hồ)
C1: 10 điều dạy
Làm theo dữ liệu mẫu
B1 :
PHP:
=TRIM(MID(A1,FIND("(",A1),LEN(A1)-LEN(C1)))
C1 :
PHP:
=TRIM(LEFT(A1,FIND("(",A1)-1)&RIGHT(A1,LEN(A1)-FIND(")",A1)))
 
cho em hỏi thêm e muốn tách như thế này thì làm sao ạ

A1: 10 điều (Bác hồ) dạy
B1: (Bác hồ)
C1: 10 điều dạy
Nếu vẫn muốn dùng RegExp thì đây là Pattern cho yêu cầu này
Nhưng phải để xài được phải biết xài hàm replace để xóa cụm (abc) và hàm execute để lấy cụm (abc).

.Pattern = "\(.+\)"
 
xin cho e 1 thí dụ mẫu được ko ạ
 
xin cho e 1 thí dụ mẫu được ko ạ

PHP:
Function TachChuoi(cell As String) As String
On Error Resume Next
With CreateObject("vbscript.regexp")
     .Global = True
     .Pattern = "\(.+\)"
     TachChuoi = Trim(.Execute(Trim(cell)).Item(0).Value)
End With
End Function
Function XoaChuoi(cell As String) As String
With CreateObject("vbscript.regexp")
     .Global = True
     .Pattern = "\(.+\)"
     XoaChuoi = Application.Trim(.Replace(cell, ""))
End With
End Function
 
Như bài 13 thì đây là 1 kiểu khác để tạo Pattern. Tuy nhiên dấu | sẽ hữu dụng khi bạn hiểu thêm tí về Regexp. Regexp rất thú vị và linh hoạt khi làm việc với chuỗi. Từ từ nhai nhé.

.Pattern = "[().,-<>]"

Dấu | dùng cho sự chọn lựa giữa các cụm ký tự, tức là cái pattern sẽ được tách thành mảng chuỗi. Dấu [] dùng cho sự chọn lựa giữa các ký tự trong một nhóm character class, tức là cái pattern sẽ được tách thành mảng ký tự. Tuy VBA đối xử với mảng chuỗi và mảng ký tự không phân biệt nhưng phần đông các cổ máy Regex phân biệt được cách đối xử chuỗi và ký tự. Cho nên dùng [] hữu hiệu hơn dùng |.

PHP:
Function TachChuoi(cell As String) As String
On Error Resume Next
With CreateObject("vbscript.regexp")
     .Global = True
     .Pattern = "\(.+\)"
     TachChuoi = Trim(.Execute(Trim(cell)).Item(0).Value)
End With
End Function
Function XoaChuoi(cell As String) As String
With CreateObject("vbscript.regexp")
     .Global = True
     .Pattern = "\(.+\)"
     XoaChuoi = Application.Trim(.Replace(cell, ""))
End With
End Function

Lưu ý rằng Regex có tính chất tham lam.
Dùng pattern này phải cẩn thận vì nó chỉ tính cái '(' đầu tiên và cái ')' cuối cùng. Nêu chuỗi có nhiều dấu ngoặc thì nó sẽ gom hết vào một mối.

VD
Con chó (nhỏ) bị con mèo (lớn) đuổi
TachChuoi = (nhỏ) bị con mèo (lớn)
XoaChuoi = Con chó đuổi
 
PHP:
Public Function timB(DL)With CreateObject("VBScript.RegExp").Global = True.IgnoreCase = True.Pattern = "b.*?n"timB = .Replace(DL, "$&")End WithEnd Function

anh kiểm tra dùm e, sao e sử dụng tìm kiém và thay thế hàm vẫn trả vè giá trị cũ anh
 
PHP:
Public Function timB(DL)With CreateObject("VBScript.RegExp").Global = True.IgnoreCase = True.Pattern = "b.*?n"timB = .Replace(DL, "$&")End WithEnd Function

anh kiểm tra dùm e, sao e sử dụng tìm kiém và thay thế hàm vẫn trả vè giá trị cũ anh

Bạn code kiểu đó thì nó trả về kiểu đó thôi
Muốn thế nào thì phải nói rõ ràng chứ ai biết ý tưởng của bạn là gì mà trả lời
Mới học code mà đụng tới Pattern của Regexp là không đơn giản đâu.
Cảm giác bạn đang lạc đường.
 
PHP:
Public Function timB(DL)With CreateObject("VBScript.RegExp").Global = True.IgnoreCase = True.Pattern = "b.*?n"timB = .Replace(DL, "$&")End WithEnd Function

anh kiểm tra dùm e, sao e sử dụng tìm kiém và thay thế hàm vẫn trả vè giá trị cũ anh

Có biết bạn muốn "find" cái gì đâu mà kiểm tra. Ít nhất pahir giải thích bạn muốn gì với cái pattern đó rồi tôi mới có thể cho biết như thế là đúng hay sai.

Hỏi thì đừng có viết tắt. Câu hỏi đã chập chơn khó hiểu lại còn biết tắt, đoán đổ mồ hôi hột.
 
Em muốn thay thế hết tất cả các ký tự !@#$%^&()_-+=\|/><.,:; nhưng khi đưa vào mẫu pattern thì bị lỗi.
Em điền là: .Pattern = "\.|-|<|>|\)|\!|@|#|$|+(|,"
khi em thử thì chỉ xóa được 1 số, còn dấu +!@#.. thì vẫn có.
Em chưa hiểu về mẫu Pattern này lắm. Mong các anh chị cho em cái mẫu để xóa hết các ký tự đó đi.
 
Hàm tự tạo này có thể xài được
PHP:
Function ThayThe(Cell$) As String
With CreateObject("Vbscript.Regexp")
   .Global = True
   .Pattern = "\.|-|\("
   ThayThe = .Replace(Cell, " ")
End With
End Function
Em muốn thay thế hết tất cả các ký tự !@ # %^&()_-+=\|/><.,:; nhưng khi đưa vào mẫu pattern thì bị lỗi.
Em điền là: .Pattern = "\.|-|<|>|\)|\!|@|#|$|+(|,"
khi em thử thì chỉ xóa được 1 số, còn dấu +!@#.. thì vẫn có.
Em chưa hiểu về mẫu Pattern này lắm. Mong các anh chị cho em cái mẫu để xóa hết các ký tự đó đi.
 

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

Back
Top Bottom