Tô màu ký tự trong dấu ngoặc

Liên hệ QC

hungdiep85

Thành viên thường trực
Tham gia
1/6/09
Bài viết
218
Được thích
23
Giới tính
Nam
Chào các Anh Chị trên diễn đàn

giúp em đoạn code tô màu ký tự trong dấu ngoặc ( ** ).

em cảm ơn các Anh Chị trước ạ
 

File đính kèm

  • Book1.xlsx
    9 KB · Đọc: 17
Chọn vùng muốn áp dụng và chạy code.
Mã:
Sub ToMau()
Dim Cll As Range, Val As String, Pos1 As Long, Pos2 As Long
For Each Cll In Selection
    Val = Cll.Value
    Pos1 = InStr(Val, "(")
    Do While Pos1 > 0
        Pos2 = InStr(Pos1, Val, ")")
        If Pos2 = 0 Then Exit Do
        Cll.Characters(Pos1 + 1, Pos2 - Pos1 - 1).Font.Color = vbRed
        Pos1 = InStr(Pos2, Val, "(")
    Loop
Next
End Sub
 
Upvote 0
Mình mới học Góp vui nha!
Bài đã được tự động gộp:

Chọn vùng muốn áp dụng và chạy code.
Mã:
Sub ToMau()
Dim Cll As Range, Val As String, Pos1 As Long, Pos2 As Long
For Each Cll In Selection
    Val = Cll.Value
    Pos1 = InStr(Val, "(")
    Do While Pos1 > 0
        Pos2 = InStr(Pos1, Val, ")")
        If Pos2 = 0 Then Exit Do
        Cll.Characters(Pos1 + 1, Pos2 - Pos1 - 1).Font.Color = vbRed
        Pos1 = InStr(Pos2, Val, "(")
    Loop
Next
End Sub
Nhìn code của Bác xong quay qua nhìn cái code của em. thấy code em củ chuối quá :p:p
 

File đính kèm

  • GPE_Tô Màu.xlsm
    17 KB · Đọc: 9
Upvote 0
Bạn tham khảo Hàm được viết bằng VBA trong tệp dưới đây:

Bạn sử dụng công thức:
=S_FindHL("\((.*?)\)",C3:C10000,1,255,FALSE,TRUE)

Công thức trên sử dụng biểu thức chính quy và VBA
Bạn cần có thêm kiến thức biểu thức chính quy nếu muốn ứng dụng thêm vào tìm kiếm chuỗi khác nhau

biểu thức chính quy rất đơn giản
 

File đính kèm

  • Find_Text.xlsm
    41.9 KB · Đọc: 13
Lần chỉnh sửa cuối:
Upvote 0
Bác có thể giúp em cái pattern được không? em xài cái này "(?<=\()(.*?)(?=\))" mà sao không lúc .execute(..) thì nó bị lỗi
Trong mỗi ngôn ngữ hơi khác nhau.

Cái "VBScript.RegExp" mà bạn sử dụng chỉ phục vụ:

1. (?: pattern) - không có dấu cách trước p

2. Zero-width positive lookahead assertion: (?=pattern)

3. Zero-width negative lookahead assertion: (?!pattern)

Cái "VBScript.RegExp" mà bạn sử dụng KHÔNG phục vụ Positive and Negative Lookbehind: (?<=pattern) và (?<!pattern)

Bạn đang dùng dạng (?<=pattern) <- (?<=\()

Tôi cũng thấy buồn là không được dùng (?<=pattern) và (?<!pattern)

Tóm lại thì dùng được lookahead nhưng không được phép dùng̣ Lookbehind
 
Lần chỉnh sửa cuối:
Upvote 0
Trong mỗi ngôn ngữ hơi khác nhau.

Cái "VBScript.RegExp" mà bạn sử dụng chỉ phục vụ:

1. (?: pattern) - không có dấu cách trước p

2. Zero-width positive lookahead assertion: (?=pattern)

3. Zero-width negative lookahead assertion: (?!pattern)

Cái "VBScript.RegExp" mà bạn sử dụng KHÔNG phục vụ Positive and Negative Lookbehind: (?<=pattern) và (?<!pattern)

Bạn đang dùng dạng (?<=pattern) <- (?<=\()

Tôi cũng thấy buồn là không được dùng (?<=pattern) và (?<!pattern)
Cảm ơn bác đã phản hồi!
Em thấy regexp rất thú ví, nhưng "khó" quá
Đối với bài trên, bác có pattern nào xử lý được vấn đề này không chia sẻ cho em học hỏi với ạ
 
Upvote 0
Cảm ơn bác đã phản hồi!
Em thấy regexp rất thú ví, nhưng "khó" quá
Đối với bài trên, bác có pattern nào xử lý được vấn đề này không chia sẻ cho em học hỏi với ạ
Thì dùng như HeSanbi giới thiệu thôi chứ xoay xở làm gì nữa? Tức "\((.*?)\)"
-------
Mà thôi, đã nói A thì làm luôn tới Z. Chạy sub test
Mã:
Sub ToMau(ByVal vung As Range, Optional ByVal mau As Long = 255)
'    Vung: 1 hoặc nhiều cell
'    macro To Mau cac doan trong ngoac. Vd. o co gia tri "Ngay mai (em di). Bien nho (ten em) goi ve" thì 2 doan "Em di" va "ten em" se duoc to mau
Dim s As String, cell_ As Range, match As Object, re As Object
    Set re = CreateObject("VBScript.RegExp")
    With re
        .Global = True
        .Pattern = "\((.*?)\)"
    End With
    For Each cell_ In vung
        s = cell_.Value
        For Each match In re.Execute(s)
            cell_.Characters(match.FirstIndex + 2, match.Length - 2).Font.Color = mau
        Next match
    Next cell_
    Set re = Nothing
End Sub

Sub test()
    ToMau ThisWorkbook.Worksheets("Sheet1").Range("A1:A2"), RGB(0, 0, 255)
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT
Back
Top Bottom