Nhờ giúp đỡ tô màu có điều kiện

Liên hệ QC
Tôi tuân thủ nội quy khi đăng bài

Anh Hùng

Thành viên mới
Tham gia
4/6/23
Bài viết
3
Được thích
1
Xin chào anh chị
Nhờ anh chij chỉ giúp em cách để các dòng (có ký tự cuối cùng là X) trong cùng 1 ô tự chuyển thành xanh đậm với ạ
Em cảm ơn anh chị.
1685884840472.png
 

File đính kèm

File đính kèm

Em cám ơn anh Hoàng Tuấn 868 nhé, Kết quả đúng như mong đợi rồi ạ.
Dùng định dạng có điều kiệ thì chưa được do dữ liệu trên cùng 1 ô.
 
Code của anh nếu dòng đầu tiên là _X thì sẽ bị lỗi
Xin chào anh chị
Nhờ anh chij chỉ giúp em cách để các dòng (có ký tự cuối cùng là X) trong cùng 1 ô tự chuyển thành xanh đậm với ạ
Em cảm ơn anh chị.
View attachment 291021
Góp vui thêm một cách:
Mã:
Option Explicit

Sub ToMau()
Dim p1&, p2&, c As Range, s$, X$, nl$
X = "_X": nl = Chr(10)
With Sheets("Sheet1")
    Set c = .[A1]: s = nl & c.Value: p2 = InStrRev(s, X)
    Do While p2 > 0
        p1 = InStrRev(s, nl, p2 - 1)
        c.Characters(p1, p2 - p1 + 1).Font.ColorIndex = 5
        p2 = InStrRev(s, X, p1)
    Loop
End With
End Sub
 
Xin chào anh chị
Nhờ anh chij chỉ giúp em cách để các dòng (có ký tự cuối cùng là X) trong cùng 1 ô tự chuyển thành xanh đậm với ạ
Em cảm ơn anh chị.
View attachment 291021
Một cách khác tham khảo
Mã:
Sub GPE_Color()
    Dim i&, Tmp, r As Range, c As Range
    Set c = Cells(1, 1): Tmp = Split(c.Value, Chr(10))
    For i = LBound(Tmp) To UBound(Tmp)
        If Right(Tmp(i), 1) = "X" Then
            With c.Characters(Start:=InStr(c.Value, _
            Tmp(i)), Length:=Len(Tmp(i))).Font
                .Bold = True
                .Color = vbBlue
            End With
        End If
    Next i
End Sub
 
Cảm ơn mọi người đã giúp đỡ
So với dữ liệu hiện tại thì code nào cũng chco kết quả đúng, để em kiểm tra các trường hợp khác trong data chính, có gì em phản hồi sau ạ.
 
Một cách khác tham khảo
Mã:
Sub GPE_Color()
    Dim i&, Tmp, r As Range, c As Range
    Set c = Cells(1, 1): Tmp = Split(c.Value, Chr(10))
    For i = LBound(Tmp) To UBound(Tmp)
        If Right(Tmp(i), 1) = "X" Then
            With c.Characters(Start:=InStr(c.Value, _
            Tmp(i)), Length:=Len(Tmp(i))).Font
                .Bold = True
                .Color = vbBlue
            End With
        End If
    Next i
End Sub
Nếu cách này mình sẽ thích tạo một biến đếm Len của từng tmp(i) để xác định vị trí bắt đầu cần tô màu, hơn là tìm kiếm trong chuỗi. Hiện tại thế này thì nó lại phụ thuộc vào giá trị của chuỗi quá, nếu 2 đoạn chứa X giống nhau thì nó chỉ tô được 1
 
Nếu cách này mình sẽ thích tạo một biến đếm Len của từng tmp(i) để xác định vị trí bắt đầu cần tô màu, hơn là tìm kiếm trong chuỗi. Hiện tại thế này thì nó lại phụ thuộc vào giá trị của chuỗi quá, nếu 2 đoạn chứa X giống nhau thì nó chỉ tô được 1
Đúng vậy bác!
Không biết dữ liệu của thớt có trường hợp trùng thế không? Nếu trùng lặp thì nên thêm biến len(tmp(i)) như bác gợi ý thì hợp lý.
 
Code của anh nếu dòng đầu tiên là _X thì sẽ bị lỗi
So với dữ liệu hiện tại thì code nào cũng cho kết quả đúng, để em kiểm tra các trường hợp khác trong data chính, có gì em phản hồi sau ạ.
Một cách khác tham khảo
Không biết các bạn đã thử chưa chứ mình thử xóa một chữ "x" trong dữ liệu đi và gõ chữ "x" từ bàn phím vào thì code không nhận là 2 chữ "x" đó giống nhau.
 
Không biết các bạn đã thử chưa chứ mình thử xóa một chữ "x" trong dữ liệu đi và gõ chữ "x" từ bàn phím vào thì code không nhận là 2 chữ "x" đó giống nhau.
Máy tôi thấy vẫn chạy thường mà bác, bác coi có liên quan gì đến kiểu chữ không?
 
Web KT

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

Back
Top Bottom