Tìm và highlight text trong cell (3 người xem)

Liên hệ QC

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

giaosucan

Thành viên hoạt động
Tham gia
6/7/12
Bài viết
117
Được thích
1
Chào các bác
em phải tìm một đoạn text trong sheet và change format của text đó (ko phải format của cell chứa text) VD như

1 cell chứa

Nguyen Văn A
Nguyen Văn B

Em muốn search được từ Nguyen và change format của từ này như

Nguyen Văn A
Nguyen Văn B

Thank các bác

Chức năng replace của excel chỉ change format của cả cell chứa text cần tìm thì phải
 
Em nghĩ có thể làm macro khi run thì hiện ra 1 box để nhập text cần tìm, sau đó find thì tìm ra text đó và change format luôn
 
Chào các bác
em phải tìm một đoạn text trong sheet và change format của text đó (ko phải format của cell chứa text) VD như

1 cell chứa

Nguyen Văn A
Nguyen Văn B

Em muốn search được từ Nguyen và change format của từ này như

Nguyen Văn A
Nguyen Văn B

Thank các bác

Chức năng replace của excel chỉ change format của cả cell chứa text cần tìm thì phải

Bạn thử code này xem sao
PHP:
Sub GPE()
Application.ScreenUpdating = False
Dim Str As String, FindCll As Range, FindCLlAdd As String, i As Long
Str = InputBox("Nhap chuoi can tim:")
Set FindCll = Cells.Find(What:=Str, After:=[IV65536], LookAt:=xlPart)
If FindCll Is Nothing Then Exit Sub
FindCLlAdd = FindCll.Address
Do
    i = 1
    Do Until InStr(i, FindCll.Value, Str) = 0
        i = InStr(i, FindCll.Value, Str)
        With FindCll.Characters(Start:=i, Length:=Len(Str)).Font
            .FontStyle = "Bold"
            .Color = -16776961
        End With
        i = i + Len(Str)
    Loop
    Set FindCll = Cells.FindNext(After:=FindCll)
Loop Until FindCll.Address = FindCLlAdd
Application.ScreenUpdating = True
End Sub
 
Ah được rồi bác thank bác nhiều nhé
 
Mình có thể cải tiến để find text trong 1 số cell đã chọn ko bác
 
Mình có thể cải tiến để find text trong 1 số cell đã chọn ko bác

Thử code này xem sao, phải nhập đúng chứ thường hoặc chữ hoa mới được

PHP:
Sub tim_format()
Dim Str, cell
Str = InputBox("Nhap Chuoi Can tim:", "Tim Va Format")
For Each cell In Selection
  If InStr(cell, Str) > 0 Then
    With cell.Characters(InStr(cell, Str), Len(Str)).Font
      .Bold = True
      .ColorIndex = 5
    End With
  End If
Next
End Sub
 
Mình có thể cải tiến để find text trong 1 số cell đã chọn ko bác
Tôi làm cho bạn file này. Có thể tùy chọn phân biệt chữ hoa, chữ thường hay không; có thể tìm chuỗi tiếng việt có dấu.
Bạn có thể save thành add-in để sử dụng.

Góp ý chút: Code của bạn quanghai nếu trong ô có nhiều chuỗi cần tìm thì code chỉ định dạng chuỗi đầu tiên. Và vì dùng vòng lặp duyệt qua tất cả các ô trong vùng nên làm tốc độ giảm xuống.
 

File đính kèm

Em làm dc rồi thank bác nhiều nhé
 
có thể tìm chuỗi tiếng việt có dấu.

Mệnh đề không luôn luôn đúng
Nếu bạn có trên sheet tiếng Việt unicode tổ hợp và bạn gõ trong TextBox unicode dựng sẵn (hoặc ngược lại) thì chưa hẳn là code tìm được. Không phải tôi chi ly tới mức quá quắt. Nhiều khi người dùng có dữ liệu nhập từ bên thứ ba vào, anh ta không có cách nào thông báo cho tác giả dữ liệu đó là phải gõ như thế nào.
Hoàn toàn có thể viết code sao cho dù dữ liệu trên sheet và trên TextBox ở dạng unicode nào thì code luôn luôn tìm ra. Lúc đó thì có thể đặt tay lên ngực và nói rằng: "có thể tìm chuỗi tiếng việt có dấu".
Tôi không trách bạn đâu nhé. Bạn có quyền viết code chỉ hỗ trợ "đa số" các trường hợp chứ không nhất thiết là phải hỗ trợ "tất cả" các trường hợp. Nhưng nếu chỉ hỗ trợ một số th thì nên nói rõ ra cho người sử dụng sản phẩm của mình biết. Bổ sung cho rõ ràng thôi chứ tôi không có ý nào khác.
 
Mệnh đề không luôn luôn đúng
Nếu bạn có trên sheet tiếng Việt unicode tổ hợp và bạn gõ trong TextBox unicode dựng sẵn (hoặc ngược lại) thì chưa hẳn là code tìm được. Không phải tôi chi ly tới mức quá quắt. Nhiều khi người dùng có dữ liệu nhập từ bên thứ ba vào, anh ta không có cách nào thông báo cho tác giả dữ liệu đó là phải gõ như thế nào.
Hoàn toàn có thể viết code sao cho dù dữ liệu trên sheet và trên TextBox ở dạng unicode nào thì code luôn luôn tìm ra. Lúc đó thì có thể đặt tay lên ngực và nói rằng: "có thể tìm chuỗi tiếng việt có dấu".
Tôi không trách bạn đâu nhé. Bạn có quyền viết code chỉ hỗ trợ "đa số" các trường hợp chứ không nhất thiết là phải hỗ trợ "tất cả" các trường hợp. Nhưng nếu chỉ hỗ trợ một số th thì nên nói rõ ra cho người sử dụng sản phẩm của mình biết. Bổ sung cho rõ ràng thôi chứ tôi không có ý nào khác.
Làm gì thì làm phải quản lý được nguồn dữ liệu của mình. Không nên nhập bừa bãi rồi phải mất công đi xử lý. Cái này nói đi nói lại nhiều rồi. Tôi không muốn bàn ở đây nữa.
 
Làm gì thì làm phải quản lý được nguồn dữ liệu của mình. Không nên nhập bừa bãi rồi phải mất công đi xử lý. Cái này nói đi nói lại nhiều rồi. Tôi không muốn bàn ở đây nữa.

Bạn nói thế là không đúng rồi. Bừa bãi là sao?
Trong cty sếp giao cho tôi việc mà trong đó có các tập tin của đồng nghiệp khác đã nghỉ việc. Đó là "nhập bừa bãi"? Hoặc tôi phải xem đồng nghiệp đã dùng unicode gì để mà cũng dùng như thế mặc dù tôi đang dùng unicode khác, với mục đích để trong tập tin chỉ có 1 dạng unicode? Và mọi thao tác đó nhằm để cho cái code nào đó tự vỗ ngực là "có thể tìm chuỗi tiếng việt có dấu" chạy khỏi sai?

Người lập trình luôn hỗ trợ tới mức tối đa chứ không phải đùn một phần việc cho người sử dụng. Người sử dụng có thể là bác học, có thể là người bình thường.

Bạn dùng vd. unicode dựng sẵn. Bạn có quyền không? Rõ ràng là bạn có quyền.
Đồng nghiệp của tôi dùng unicode dựng sẵn. Đồng nghiệp có quyền không? Đồng nghiệp rõ ràng có quyền.
Tôi dùng unicode tổ hợp. Tôi có quyền không? Rõ ràng là tôi có quyền.
Bạn đâu phải là chuẩn mực để mọi người phải theo bạn?

Nếu tôi nhận được của đối tác vd. 10 tập tin thì bạn có cho là tôi "nhập bừa bãi" không? Và nếu tôi gõ trong TextBox unicode dựng sẵn (unicode tổ hợp) mà đối tác lại dùng trong 10 tập tin của mình unicode tổ hợp (unicode dựng sẵn) thì rõ ràng code của bạn không tìm ra.

Hay tôi phải: mở tập tin 1 --> xem đối tác dùng unicode gì để trong TextBox cũng dùng unicode đó. Sau đó lại mở tập tin 2 --> xem đối tác dùng unicode gì để trong TextBox cũng dùng unicode đó. Cứ như thế hết 10 tập tin.
Thế nếu trong tập tin đối tác lại dùng 2 loại unicode thì sao? Thì bótay.com. Gõ trong textbox unicode gì thì cũng bótay.com

Hay gửi e-mail cho đối tác: "anh sửa lại các tập tin của anh đi, ai lại dùng mã tùm lum thế. Làm sao tôi có thể dùng code "có thể tìm chuỗi tiếng việt có dấu" với các tập tin của các anh được"

Tôi chắc chắn là khi sẩy ra trường hợp bótay.com thì người ta "đá đít" cái code kia chứ không ai lại nói với đối tác như thế. Vì đơn giản đó là đối tác, và hơn thế nữa người ta có quyền làm theo cách mà người ta muốn. Không ai có quyền áp đặt cho họ cái chuẩn mực của mình.

Tôi cũng không muốn bàn thêm nữa. Code nào mà không hỗ trợ những cái mà system hỗ trợ, tức cả 2 dạng unicode thì chắc chắn "không có quyền" đeo huy hiệu "có thể tìm chuỗi tiếng việt có dấu". Code nào mà việc đồng nhất dạng dữ liệu cần tìm và dạng chuỗi cần tìm do người sử dụng nhập vào "đùn" cho người sử dụng thì code đó "không đáng" đeo huy hiệu "có thể tìm chuỗi tiếng việt có dấu".

Việc đồng nhất 2 dạng là hoàn toàn làm được trong code, vậy thì nếu đùn việc ấy cho người dùng làm thì hổ thẹn thay cho nhà lập trình phần mềm.

Tôi đã nói hết ý mình rồi. Tôi cũng không muốn bàn nữa. Bạn cứ bàn tiếp nếu bạn muốn.
 
Việc đồng nhất 2 dạng là hoàn toàn làm được trong code, vậy thì nếu đùn việc ấy cho người dùng làm thì hổ thẹn thay cho nhà lập trình phần mềm.
Tôi đã nói hết ý mình rồi. Tôi cũng không muốn bàn nữa. Bạn cứ bàn tiếp nếu bạn muốn.
Đã vậy bạn làm luôn cho mọi người tham khảo
Nói thiệt là tôi cũng rất "ngán" thằng cha Unicode tổ hợp (chưa có kinh nghiệm với nó và trước đến giờ hầu như toàn dựa trên cơ sở Unicode dựng sẵn thôi)
 
Đã vậy bạn làm luôn cho mọi người tham khảo
Nói thiệt là tôi cũng rất "ngán" thằng cha Unicode tổ hợp (chưa có kinh nghiệm với nó và trước đến giờ hầu như toàn dựa trên cơ sở Unicode dựng sẵn thôi)

Tôi cũng ngán unicode tổ hợp. Phải chăng Windows cấm dùng unicode tổ hợp hoặc không hỗ trợ để mọi người bắt buộc phải dùng unicode dựng sẵn ... Nhưng "mơ ước" thế thôi chứ biết là "hão huyền"

Nói chung là tôi lười. Mà tôi thường thích cái gì thì tham gia chứ mọi thách đố tôi không quan tâm. Hơn nữa không phải chủ đề nào tôi cũng muốn vào vì làm sao ôm đồm hết được. Và có cái thích cái không thích, cái biết cái không biết.
Và nữa:
1. Tôi nghĩ nhiều người làm được.
2. Trong chủ đề này tôi không tham gia code nào cả vì tôi không quan tâm. Chỉ có một chú ý nhỏ thế thôi. Còn nếu tác giả code cho là như thế là chuẩn thì tôi tôn trọng ý kiến ấy. Nói cho cùng thì mỗi người có quan điểm của mình. Không thống nhất được thì kết thúc ngay cho khỏi mất thời gian
 
Lần chỉnh sửa cuối:
Tôi làm cho bạn file này. Có thể tùy chọn phân biệt chữ hoa, chữ thường hay không; có thể tìm chuỗi tiếng việt có dấu.
Bạn có thể save thành add-in để sử dụng.

Góp ý chút: Code của bạn quanghai nếu trong ô có nhiều chuỗi cần tìm thì code chỉ định dạng chuỗi đầu tiên. Và vì dùng vòng lặp duyệt qua tất cả các ô trong vùng nên làm tốc độ giảm xuống.

bác cho em hỏi, code hiện tại có thể đổi chữ tìm thấy thành màu đỏ đậm, em muốn cải tiến để hiện ra 1 bảng format color và font để user có thể chọn format.Có cách nào ko ạ, thank bác nhiều ạ
 
bác cho em hỏi, code hiện tại có thể đổi chữ tìm thấy thành màu đỏ đậm, em muốn cải tiến để hiện ra 1 bảng format color và font để user có thể chọn format.Có cách nào ko ạ, thank bác nhiều ạ
Bạn xem thử file này. Do mượn hộp thoại sẵn có của Excel nên phải dùng một ô trung gian. Trong code tôi dùng ô IV65536 (ô cuối cùng trong bảng tính Excel 2003) làm ô trung gian. Nếu file của bạn có sử dụng ô này thì sau khi chạy Macro ô này sẽ bị xóa.

Tôi lưu ý cho bạn biết vậy thôi chứ tôi nghĩ cũng chẳng khi nào dùng đến ô đó cả.
 

File đính kèm

Web KT

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

Back
Top Bottom