cuonghoa176
Hỏi nhiều
- Tham gia
- 31/1/11
- Bài viết
- 169
- Được thích
- 23
- Giới tính
- Nam
- Nghề nghiệp
- Giáo viên THCS
Sub TimVaThayThe()
Dim Rng As Range, sRng As Range, Cls As Range
Dim MyAdd As String
Const MyColor As Integer = 38
Set Rng = Range([A1], [A65500].End(xlUp))
For Each Cls In Range([C2], [C2].End(xlDown))
Set sRng = Rng.Find(Cls.Value, , xlFormulas, xlPart)
If sRng Is Nothing Then
Cls.Interior.ColorIndex = MyColor - 1
Else
MyAdd = sRng.Address
Do
If Cls.Offset(, 1).Value = "Xóa" Then
sRng.Interior.ColorIndex = MyColor
Else
sRng.Interior.ColorIndex = MyColor + 1
End If
Set sRng = Rng.FindNext(sRng)
Loop While Not sRng Is Nothing And sRng.Address <> MyAdd
End If
Next Cls
End Sub
Vậy bạn dựa trên code của Bác @SA_DQ mà làm tiếp:Chỉ xóa từ, cụm từ, kí tự tìm thấy trong chuỗi thôi bác ơi..!
Bạn thử sử dụng File:Nhờ các thầy VBA xử lý giúp, e xin cảm ơn..!
Cảnh báo coi chừng có trường hợp sẽ có kết quả không mong đợi đâu đó nha!Vậy bạn dựa trên code của Bác @SA_DQ mà làm tiếp:
thay: sRng.Interior.ColorIndex = MyColor thành sRng.value=Replace(sRng.Value, Cls.Value, "")
và thay sRng.Interior.ColorIndex = MyColor + 1 thành sRng.Value = Replace(sRng.Value, Cls.Value, Cls.Offset(, 1).Value)
Có thể dùng?Các Bác cho em hỏi bài này có thể dùng VBScript RegExp để xử lý được không? Nếu có thể mong các bác làm file mẫu cho em tham khảo với ạ
Các bạn ấy cần biết thế nào là "hoành tráng" đúng nghĩa nữa anh. Cũng có người viết code hoành tráng theo kiểu hoa mỹ nhưng vô bổỞ đây chỉ có một vài người chuyên viết những code "hoành tráng" kiểu đó thôi. Và họ có code mẫu rồi.
Bạn chịu khó tìm bài các người ấy thì sẽ ra.
Tương tự, người mới học hoặc mới tham gia dễ bị cái sự "hoành tráng" che mờ sự thật phía sau: viết code cho kêu, form cho lộng lẫy nhưng hiệu quả kém.Nếu không biết những người ấy là ai thì có lẽ từ lúc vào GPE đến giờ bạn chọn sai cách thức học rồi.
Tôi cố tình dừng ở chỗ "hoành tráng", không diễn thêm nữa.Các bạn ấy cần biết thế nào là "hoành tráng" đúng nghĩa nữa anh. Cũng có người viết code hoành tráng theo kiểu hoa mỹ nhưng vô bổ
Tương tự, người mới học hoặc mới tham gia dễ bị cái sự "hoành tráng" che mờ sự thật phía sau: viết code cho kêu, form cho lộng lẫy nhưng hiệu quả kém.
Cũng chủ đề find, năm xưa có code viết phương thức find trong vòng lặp for ... next cho 65 ngàn dòng. Nếu người này được tìm thấy với danh "cao thủ" thì chết cho cả 1 thế hệ. Nên tôi chấp nhận bị "chửi"Tôi cố tình dừng ở chỗ "hoành tráng", không diễn thêm nữa.
Bởi vì diễn thêm cái phần "hoa mỹ" lại bị chủ code tự ái, viết bài chửi bới, cạnh khoé...![]()
Vâng. Trong diễn đàn mình có Bác ChaoQuay từng viết code với RegExp rồi nhưng mà em muốn học hỏi thêm thôi,vì RegExp khá là rộng mà phần xử lý chuỗi mẫu thì hơi khoai với trình độ của emCó thể dùng?
Cái từ "text" đó đã ngầm chứa trong "regular expression" rồi. Hầu như bất cứ việc gì xử lý chuỗi thì regexp đều làm được. Nhưng việc có hiệu quả hay không là vấn đề khác hoàn toàn.
Làm file mẫu:
Ở đây chỉ có một vài người chuyên viết những code "hoành tráng" kiểu đó thôi. Và họ có code mẫu rồi.
Bạn chịu khó tìm bài các người ấy thì sẽ ra.
Nếu không biết những người ấy là ai thì có lẽ từ lúc vào GPE đến giờ bạn chọn sai cách thức học rồi.
Muốn "tham khảo" code thì vệc đầu tiên là phải tập quan sát cách thức giải vấn đề, trường phái viết code cuỷa từng người trên diễn đàn.
Em cũng mới vào diễn đàn học chưa lâu nên nhiều cái chưa rõ lắm Bác ,mong các Bác đi trước chỉ dạy để học hỏi thêmCũng chủ đề find, năm xưa có code viết phương thức find trong vòng lặp for ... next cho 65 ngàn dòng. Nếu người này được tìm thấy với danh "cao thủ" thì chết cho cả 1 thế hệ. Nên tôi chấp nhận bị "chửi"
-----------
Ghi chú: thế hệ dạy và học, sau đó dạy lại cho người sau, chứ không phải thế hệ tuổi tác
Là sao BácMơi vào... em không tin đâu
Option Explicit
Sub Thaythe_Reg()
Dim nguon
Dim bangtra
Dim csD
Dim kq
Dim rws, i, j, k, x
With Sheet1
nguon = .Range("A2", .Range("A2").End(xlDown))
rws = UBound(nguon)
bangtra = .Range("C2", .Range("D2").End(xlDown))
End With
ReDim kq(1 To rws, 1 To 1)
ReDim csD(1 To rws)
For i = 1 To rws
csD(i) = i
Next i
With CreateObject("VbScript.RegExp")
.Global = True
For i = 1 To 2 'UBound(bangtra)
.Pattern = Trim(bangtra(i, 1))
x = UBound(csD)
For j = 1 To UBound(csD)
k = csD(j)
If .test(nguon(k, 1)) Then
kq(k, 1) = .Replace(nguon(k, 1), bangtra(i, 2))
csD(j) = csD(x)
x = x - 1
End If
Next j
If x = 0 Then Exit For
ReDim Preserve csD(1 To x)
Next i
End With
With Sheet1
.Range("F2").Resize(rws, 1).Clear
.Range("F2").Resize(rws, 1) = kq
.Range("F2").Resize(rws, 1).Borders.LineStyle = 1
.Range("F2").Resize(rws, 1).Columns.AutoFit
End With
End Sub
Cảm ơn bác nhiều nha.Trên tinh thần học hỏi nên em hỏi xem có code của các bác thì em học hỏi thêm ạ@Cu Tồ
Bài viết này chỉ mang tính tham khảo.
Có lẽ việc thay đổi pattern nhiều lần sẽ làm thời gian chạy tăng lên đáng kể
Bạn có thể thử sửa dòng lệnh này để kiểm chứng: For i = 1 To 2 'UBound(bangtra) -> For i = 1 To UBound(bangtra)
Mã:Option Explicit Sub Thaythe_Reg() Dim nguon Dim bangtra Dim csD Dim kq Dim rws, i, j, k, x With Sheet1 nguon = .Range("A2", .Range("A2").End(xlDown)) rws = UBound(nguon) bangtra = .Range("C2", .Range("D2").End(xlDown)) End With ReDim kq(1 To rws, 1 To 1) ReDim csD(1 To rws) For i = 1 To rws csD(i) = i Next i With CreateObject("VbScript.RegExp") .Global = True For i = 1 To 2 'UBound(bangtra) .Pattern = Trim(bangtra(i, 1)) x = UBound(csD) For j = 1 To UBound(csD) k = csD(j) If .test(nguon(k, 1)) Then kq(k, 1) = .Replace(nguon(k, 1), bangtra(i, 2)) csD(j) = csD(x) x = x - 1 End If Next j If x = 0 Then Exit For ReDim Preserve csD(1 To x) Next i End With With Sheet1 .Range("F2").Resize(rws, 1).Clear .Range("F2").Resize(rws, 1) = kq .Range("F2").Resize(rws, 1).Borders.LineStyle = 1 .Range("F2").Resize(rws, 1).Columns.AutoFit End With End Sub
---
Cao thủ dùng reg ở đây nhiều như mây ngày mưa, có lẽ là bạn tìm chưa đúng chỗ đấy thôi
Hình như code này những chỗ cần xóa thì không xóa chuỗi mà xóa cả hàng đó luôn hay sao ấy bác ạ@Cu Tồ
Bài viết này chỉ mang tính tham khảo.
Có lẽ việc thay đổi pattern nhiều lần sẽ làm thời gian chạy tăng lên đáng kể
Bạn có thể thử sửa dòng lệnh này để kiểm chứng: For i = 1 To 2 'UBound(bangtra) -> For i = 1 To UBound(bangtra)
Mã:Option Explicit Sub Thaythe_Reg() Dim nguon Dim bangtra Dim csD Dim kq Dim rws, i, j, k, x With Sheet1 nguon = .Range("A2", .Range("A2").End(xlDown)) rws = UBound(nguon) bangtra = .Range("C2", .Range("D2").End(xlDown)) End With ReDim kq(1 To rws, 1 To 1) ReDim csD(1 To rws) For i = 1 To rws csD(i) = i Next i With CreateObject("VbScript.RegExp") .Global = True For i = 1 To 2 'UBound(bangtra) .Pattern = Trim(bangtra(i, 1)) x = UBound(csD) For j = 1 To UBound(csD) k = csD(j) If .test(nguon(k, 1)) Then kq(k, 1) = .Replace(nguon(k, 1), bangtra(i, 2)) csD(j) = csD(x) x = x - 1 End If Next j If x = 0 Then Exit For ReDim Preserve csD(1 To x) Next i End With With Sheet1 .Range("F2").Resize(rws, 1).Clear .Range("F2").Resize(rws, 1) = kq .Range("F2").Resize(rws, 1).Borders.LineStyle = 1 .Range("F2").Resize(rws, 1).Columns.AutoFit End With End Sub
---
Cao thủ dùng reg ở đây nhiều như mây ngày mưa, có lẽ là bạn tìm chưa đúng chỗ đấy thôi
Bạn đưa file có dòng bị xóa lên xemHình như code này những chỗ cần xóa thì không xóa chuỗi mà xóa cả hàng đó luôn hay sao ấy bác ạ
Em lấy code của Bác thử hai file ở trên thì thấy thế ạBạn đưa file có dòng bị xóa lên xem
Vâng em chỉ hỏi để học còn nếu thực dụng tí thì cái nào đơn giản mà hiểu quả thì áp dụng ạCái điều kiện đòi hỏi của bạn phức tạp lắm.
Ở đây chính thức có tối đa 3 người có khả năng viết cái mẫu pattern ấy (*) thôi.
(tôi không kể tôi trong số đó, tôi rất lười làm mấy chuyện phức tạp)
(*) Regexp nó có quy luật hiệu quả của nó. Cái pattern thiết kế kém hiệu quả vẫn có thể ra kết quả. Nhưng các trường hợp như thế thì thà dùng các hàm chuỗi của VBA tốt hơn.
Biết dòng nào mà kiểm tra đâu bạn.Em lấy code của Bác thử hai file ở trên thì thấy thế ạ
Xin lỗi bác ,những dòng như thế này ạBiết dòng nào mà kiểm tra đâu bạn.
LĐ côn nhựa PPR nối bằng hàn, đk 32/20 |
LĐ côn nhựa PPR, đk 32/20 |
Dòng bao nhiêu thế bạn?Xin lỗi bác ,những dòng như thế này ạ
View attachment 245519
LĐ côn nhựa PPR nối bằng hàn, đk 32/20
điều kiện là xóa bỏ chuôi " nối bằng hàn"
View attachment 245521
kết quả trả về sẽ là
LĐ côn nhựa PPR, đk 32/20 Bài đã được tự động gộp:
file mà chủ thớt đưa lên Trong cột C bạn thống kê chưa đầy đủ cụm từ cần xóa hoặc thay thế. nên là cũng khó tìm kiếm bác ạ
lấy file của chủ thớt làm chuẩn dữ liệu ở dòng 198 bác ạDòng bao nhiêu thế bạn?
Cái này là do code chỉ kiểm tra 2 cụm từ đầu tiên --> vòng lặp For i = 1 To 2 'UBound(bangtra) --> lệnh test mẫu không thấy khớp nên dòng đó không liệt kê ra.lấy file của chủ thớt làm chuẩn dữ liệu ở dòng 198 bác ạ
điều kiện là dòng 22
Bài đã được tự động gộp:
hoặc dòng 427 dữ liệu "Gia công cổng sắt sơn tính điện (công lắp đặt) " và điều kiện "(công lắp đặt)" là dòng 38
Hay do em làm không đúng bước nào đó nên kết quả bị lệch hả bác
Cảm ơn bác nhiều.có lẽ bài này không thích hợp dùng reg cho lắm nên em hỏi để xem cách làm thôiCái này là do code chỉ kiểm tra 2 cụm từ đầu tiên --> vòng lặp For i = 1 To 2 'UBound(bangtra) --> lệnh test mẫu không thấy khớp nên dòng đó không liệt kê ra.
Bạn thử sửa thành For i = 1 To 21 sẽ thấy dòng 198.
dòng 427 có lẽ tương tự.
---
Một số cụm từ chứa ký tự đặc biệt có thể khi chạy sẽ báo lỗi.
RegEx vốn đã là viết tắt cúa Regular Expression rồi. Bạn còn cố viết tắt một bậc nữa. Bái phục.Cảm ơn bác nhiều.có lẽ bài này không thích hợp dùng reg cho lắm nên em hỏi để xem cách làm thôi
Vâng cảm ơn bác chỉ dẫn,còn học ai thì em nghĩ là mỗi người có một thế mạnh riêng,quan trọng là sợ em không học được hết thôi chứ diễn đàn nhiều bác giỏi mà.Còn phong cách viết code có lẽ em thích Bác ndu96081631 .Vì em thấy bác ấy hay viết theo hướng tổng quát.trừ những bài đặc thù thì không nói,nhưng chắc em còn phải xem nhiều nữa mới học được,Emthấy Bác có vẻ kiến thức rất sâu,nhưng có vẻ như công việc của bác không phải là cả ngày ngồi code thì phảiRegEx vốn đã là viết tắt cúa Regular Expression rồi. Bạn còn cố viết tắt một bậc nữa. Bái phục.
Thích hợp hay không thì đã biết rồi. Nhưng bạn không tìm ra giải đáp là vì bạn chưa tìm đúng người.
Trogn các người tôi kể trên có 1 rất thích các thách thức (challenges) về regex. Và 1 thì rất thích làm những công việc hoành tráng. Hai người này chưa thấy câu hỏi của bạn đây thôi.
Nếu bạn thực sự muốn hỏi thì mở một thớt khác mà hỏi.
Tìm biết khả năng, sở thích, và thói quen cuả từng người trên diễn đàn là cái bạn cần học ngay bây giờ nếu muốn tiếp tục học code.
“Biết người biết ta, trăm trận không nguy; không biết người mà chỉ biết ta, một trận thắng một trận thua; không biết người, không biết ta, mọi trận đều bại” (binh pháp Tôn Tử)
Ôi lâu lắm rồi mới thấy Bác @VetMini viết được một câu thật hay! em tặng cho bác nhiều like ạ...“Biết người biết ta, trăm trận không nguy; không biết người mà chỉ biết ta, một trận thắng một trận thua; không biết người, không biết ta, mọi trận đều bại” (binh pháp Tôn Tử)
Ngoài visual basic ra thì Bác chắc còn biết ngôn ngữ lập trình khác đúng không? Thấy kiến thức Bác rộng đấy chứ.Với trước em có xem commet của Bác thì công việc của Bác thiên nhiều về mảng tư vấn thì phảiHọc đi đôi với hành chỉ là củ cà rốt để dụ con lừa.
Học mà đem ra hành được thì giờ này tôi đã là tỷ phú, đâu có thì giờ vào đây tham dự chuyện thị phi.
Dư sức xài chứ Bác, Diễn đàn minh có nhiều Bác giỏi .điều làm bên lập trình còn bọn em chỉ là dân không chuyên không phải chuyên ngành nên học vẹt thôiHồii xưa tôi có liên quan đến lập trình đi từ lập trình viên lên đến quản lý đồ án phần mềm. Lúc làm việc với kiểm toán thì tôi nắm bên kiểm toán phần mềm.
Về sau này sức khoẻ không cho phép nên tôi chỉ làm tư vấn về data migration (sử dụng kinhn nghiệm về data), data analysis (sử dụng kiến thức về toán ứng dụng), và requirement metrics (sử dụng các kinh nghiệm về quản lý kinh tế tài chính và kế toán).
Về kỹ thuật "cứng" thì tôi đã từng làm nhiều loại kỹ sư từ dường biển đến đường bộ, qua khai thác mỏ, qua nhà máy sản xuất kim loại mềm, sắt thép,...
Chính cái kinh nghiệm cả kỹ thuật lẫn phần mềm mà tụi kiểm toán hay kiếm tôi khi cần kiểm toán nhà máy và các công ty thầu xây dựng.
CV như vậy đủ xài ở đây hôn?