Tô màu theo điều kiện bằng VBA?

Liên hệ QC

Miền Cát Trắng

Thành viên hoạt động
Tham gia
18/5/13
Bài viết
171
Được thích
37
Xin kính chào mọi người.
Tôi đang gặp phải một vấn đề như đã nêu rõ trong file đính kèm.
Nếu sử dụng chức năng CF thì tôi có thể làm được nhưng tôi muốn tìm hiểu khi làm bằng vba. Mong mọi người giúp đỡ.
Xin cảm ơn!
 

File đính kèm

  • Tomau.xls
    24 KB · Đọc: 444
Xin kính chào mọi người.
Tôi đang gặp phải một vấn đề như đã nêu rõ trong file đính kèm.
Nếu sử dụng chức năng CF thì tôi có thể làm được nhưng tôi muốn tìm hiểu khi làm bằng vba. Mong mọi người giúp đỡ.
Xin cảm ơn!
Muốn VBA thì thử chạy Sub này coi sao:
PHP:
Public Sub GPE()
Dim Rng As Range, Cll As Range, DK As Long
With Sheet1
    DK = .[C5].Value
    .[C8:K1000].Interior.ColorIndex = 0
    Set Rng = .Range(.[C8], .[C8].End(xlDown))
    For Each Cll In Rng
        If Cll.Value = DK Then
            Cll.Resize(, 9).Interior.ColorIndex = 6
            MsgBox "Ma oi, Ma oi ..... Cuu con!"
        End If
    Next Cll
End With
Set Rng = Nothing
End Sub
 
Upvote 0
Muốn VBA thì thử chạy Sub này coi sao:
PHP:
Public Sub GPE()
Dim Rng As Range, Cll As Range, DK As Long
With Sheet1
    DK = .[C5].Value
    .[C8:K1000].Interior.ColorIndex = 0
    Set Rng = .Range(.[C8], .[C8].End(xlDown))
    For Each Cll In Rng
        If Cll.Value = DK Then
            Cll.Resize(, 9).Interior.ColorIndex = 6
            MsgBox "Ma oi, Ma oi ..... Cuu con!"
        End If
    Next Cll
End With
Set Rng = Nothing
End Sub
Trước hết xin cảm Thầy đã vui vẻ giúp đỡ!
Về cơ bản thì code của Thầy viết rất đúng ý với em đã nêu tuy nhiên còn một chút xíu nữa mong Thầy sửa giúp cho ạ. Đó là các cột màu xanh trong khung vẫn giữ nguyên màu xanh.
Nghĩa là điều kiện màu vàng chỉ hoạt động trong vùng [C8:E17,G8:I17,K8:K17] thôi ạ!
------------------
Em định thêm một dòng code tô lại các vùng màu xanh này. Nhưng nếu như vậy thì nghĩa phải thêm 1 công đoạn phải không ạ. Mong Thầy chỉ dẫn thêm để không phải thêm công đoạn này nữa ạ.
Cảm ơn Thầy!
 
Lần chỉnh sửa cuối:
Upvote 0
Trước hết xin cảm Thầy đã vui vẻ giúp đỡ!
Về cơ bản thì code của Thầy viết rất đúng ý với em đã nêu tuy nhiên còn một chút xíu nữa mong Thầy sửa giúp cho ạ. Đó là các cột màu xanh trong khung vẫn giữ nguyên màu xanh.
Nghĩa là điều kiện màu vàng chỉ hoạt động trong vùng [C8:E17,G8:I17,K8:K17] thôi ạ!
------------------
Em định thêm một dòng code tô lại các vùng màu xanh này. Nhưng nếu như vậy thì nghĩa phải thêm 1 công đoạn phải không ạ. Mong Thầy chỉ dẫn thêm để không phải thêm công đoạn này nữa ạ.
Cảm ơn Thầy!
Xem Cái "má ơi...má ơi ..." này thử xem, sao nhiều cái "oái oăm" vậy?
PHP:
Public Sub GPE()
Dim Rng As Range, Cll As Range, DK As Long, MaOI As Range
With Sheet1
    DK = .[C5].Value
    Set MaOI = Union(.[C8:E17], .[G8:I17], .[K8:K17])
    MaOI.Interior.ColorIndex = 0
    Set Rng = .Range(.[C8], .[C8].End(xlDown))
    For Each Cll In Rng
        If Cll.Value = DK Then
            Set MaOI = Union(Cll.Resize(, 3), Cll.Offset(, 4).Resize(, 3), Cll.Offset(, 8))
            MaOI.Interior.ColorIndex = 6
            MsgBox "Ma oi, Ma oi ..... Cuu con!"
        End If
    Next Cll
End With
Set Rng = Nothing
Set MaOI = Nothing
End Sub
 
Upvote 0
Xem Cái "má ơi...má ơi ..." này thử xem, sao nhiều cái "oái oăm" vậy?
PHP:
Public Sub GPE()
Dim Rng As Range, Cll As Range, DK As Long, MaOI As Range
With Sheet1
    DK = .[C5].Value
    Set MaOI = Union(.[C8:E17], .[G8:I17], .[K8:K17])
    MaOI.Interior.ColorIndex = 0
    Set Rng = .Range(.[C8], .[C8].End(xlDown))
    For Each Cll In Rng
        If Cll.Value = DK Then
            Set MaOI = Union(Cll.Resize(, 3), Cll.Offset(, 4).Resize(, 3), Cll.Offset(, 8))
            MaOI.Interior.ColorIndex = 6
            MsgBox "Ma oi, Ma oi ..... Cuu con!"
        End If
    Next Cll
End With
Set Rng = Nothing
Set MaOI = Nothing
End Sub

Cảm ơn Thầy!! Em đã thử...kết quả là như mong đợi!
Năm mới xin kính chúc Thầy sức khỏe tốt và công các tốt! Vạn sự như ý!
 
Upvote 0
Xem Cái "má ơi...má ơi ..." này thử xem, sao nhiều cái "oái oăm" vậy?
PHP:
Public Sub GPE()
Dim Rng As Range, Cll As Range, DK As Long, MaOI As Range
With Sheet1
    DK = .[C5].Value
    Set MaOI = Union(.[C8:E17], .[G8:I17], .[K8:K17])
    MaOI.Interior.ColorIndex = 0
    Set Rng = .Range(.[C8], .[C8].End(xlDown))
    For Each Cll In Rng
        If Cll.Value = DK Then
            Set MaOI = Union(Cll.Resize(, 3), Cll.Offset(, 4).Resize(, 3), Cll.Offset(, 8))
            MaOI.Interior.ColorIndex = 6
            MsgBox "Ma oi, Ma oi ..... Cuu con!"
        End If
    Next Cll
End With
Set Rng = Nothing
Set MaOI = Nothing
End Sub

Nhưng mà với cái đoạn này của Thầy:

Mã:
 Set MaOI = Union([B].[C8:E17], .[G8:I17], .[K8:K17][/B])
Mà kết hợp với đoạn này:
Mã:
Set Rng = .Range(.[C8], .[C8][COLOR=#ff0000][B].End(xlDown)[/B][/COLOR])
thì em nghĩ là chưa hợp lý bởi vì nếu điều kiện khi tô màu vàng ngoài vùng MaOI thì sẽ không thể trở về 0 được khi ngoài vùng MaOI này không còn đúng với điều kiện ạ.
 
Upvote 0
Nhưng mà với cái đoạn này của Thầy:

Mã:
 Set MaOI = Union([B].[C8:E17], .[G8:I17], .[K8:K17][/B])
Mà kết hợp với đoạn này:
Mã:
Set Rng = .Range(.[C8], .[C8][COLOR=#ff0000][B].End(xlDown)[/B][/COLOR])
thì em nghĩ là chưa hợp lý bởi vì nếu điều kiện khi tô màu vàng ngoài vùng MaOI thì sẽ không thể trở về 0 được khi ngoài vùng MaOI này không còn đúng với điều kiện ạ.
Chời ơi!
Chỉ làm theo ví dụ, thực tế ra sao thì tự chỉnh đi.
Híc!
Nghĩa là điều kiện màu vàng chỉ hoạt động trong vùng [C8:E17,G8:I17,K8:K17] thôi ạ!
Biểu sao làm vậy, kết quả có đúng không?
 
Upvote 0
Má ơi !!! Cái bài này cứ Má ơi như lúc đầu, Má ơi xong thì chèn 2 dòng này vào cho nhẹ nhàng
Rng.Offset(, 3).Interior.ColorIndex = 50
Rng.Offset(, 7).Interior.ColorIndex = 50
Code dzì:
Mã:
Public Sub GPE()
Dim Rng As Range, Cll As Range, DK As Long
With Sheet1
    DK = .[C5].Value
    .[C8:K1000].Interior.ColorIndex = 0
    Set Rng = .Range(.[C8], .[C8].End(xlDown))
    For Each Cll In Rng
        If Cll.Value = DK Then
            Cll.Resize(, 9).Interior.ColorIndex = 6
            MsgBox "Ma oi, Ma oi ..... Cuu con!"
        End If
    Next Cll
    Rng.Offset(, 3).Interior.ColorIndex = 50
    Rng.Offset(, 7).Interior.ColorIndex = 50
End With
Set Rng = Nothing
End Sub
Híc, Má ơi
Thân
 
Upvote 0
Má ơi !!! Cái bài này cứ Má ơi như lúc đầu, Má ơi xong thì chèn 2 dòng này vào cho nhẹ nhàng

Code dzì:
Mã:
Public Sub GPE()
Dim Rng As Range, Cll As Range, DK As Long
With Sheet1
    DK = .[C5].Value
    .[C8:K1000].Interior.ColorIndex = 0
    Set Rng = .Range(.[C8], .[C8].End(xlDown))
    For Each Cll In Rng
        If Cll.Value = DK Then
            Cll.Resize(, 9).Interior.ColorIndex = 6
            MsgBox "Ma oi, Ma oi ..... Cuu con!"
        End If
    Next Cll
    Rng.Offset(, 3).Interior.ColorIndex = 50
    Rng.Offset(, 7).Interior.ColorIndex = 50
End With
Set Rng = Nothing
End Sub
Híc, Má ơi
Thân
Lỡ "má ơi" muốn thay đổi 2 cột F và J bằng cái màu "má ơi" nào khác tuỳ thích bằng thủ công thì "má ơi... má ơi" tiếp tục.
Híc!
Ẹc..
 
Upvote 0
Lỡ "má ơi" muốn thay đổi 2 cột F và J bằng cái màu "má ơi" nào khác tuỳ thích bằng thủ công thì "má ơi... má ơi" tiếp tục.
Híc!
Ẹc..
Thì trước khi Má Ơi tìm em trùng tô màu vàng, mình cho chạy theo cột trong vùng dữ liệu,Má Ơi điểm mặt cột nào có màu & màu gì gom bỏ vào một biến để dành đó
Má ơi các việc phải má ơi
Má Ơi xong các em trùng để tô vàng, ta Má ơi các cột có màu tô thủ công của chủ topic. Híc
Thân
 
Upvote 0
Xin chào cả nhà
Tôi đang muốn tô màu theo từng vùng (như file đính kèm). Tôi muốn tìm hiểu khi sử dụng bằng vba. Mong mọi người giúp đỡ.
Xin cảm ơn!
 

File đính kèm

  • ToMau_Vung.xlsx
    11.3 KB · Đọc: 43
Upvote 0
không có điều kiện cụ thể nào cho vùng nào,thì bạn xem cái code phía trên ấy lệnh tô màu đó rồi cứ phang thẳng cái vùng đó cho màu đó là được chứ nhìn cái file của bạn thì chưa biết làm như thế nào cho tối ưu cả 1603965428677.png
Mã:
sheet1.Range("A34:G44").Interior.ColorIndex = 6
 
Upvote 0
không có điều kiện cụ thể nào cho vùng nào,thì bạn xem cái code phía trên ấy lệnh tô màu đó rồi cứ phang thẳng cái vùng đó cho màu đó là được chứ nhìn cái file của bạn thì chưa biết làm như thế nào cho tối ưu cả View attachment 248284
Mã:
sheet1.Range("A34:G44").Interior.ColorIndex = 6


Cám ơn Bạn đã hướng dẫn. Ý mình đây là có đoạn code nào hướng dẫn tô màu theo vùng.
Vd: từ ô A6 -> G12: tô màu xanh dương
từ ô A13 -> G21: tô màu vàng
từ ô A22 -> G44: tô màu xanh lá
 
Upvote 0
Cám ơn Bạn đã hướng dẫn. Ý mình đây là có đoạn code nào hướng dẫn tô màu theo vùng.
Vd: từ ô A6 -> G12: tô màu xanh dương
từ ô A13 -> G21: tô màu vàng
từ ô A22 -> G44: tô màu xanh lá
Mã:
sheet1.Range("A34:G44")
Đây là vùng tham chiếu bạn có thể sửa nó tùy ý
Mã:
.Interior.ColorIndex = 6
Đây là chỉ số màu trong bảng màu,cái này ít người nhớ hết chỉ có mấy màu hay dùng thì nhớ.có cách khác là dùng vbred .... cũng được.nhưng để nói code hướng dẫn thì chả biết nói như thế nào.bạn ghi lại maro tô màu các vùng bạn muốn rồi chỉ cần quan tâm đến vùng mà nó tô màu trong code + mã màu và lệnh tô mà thì sẽ hiểu mà
 
Upvote 0
Mình đã tô được màu từng cùng cố định. Nhưng mình muốn dùng code để tự động tô mà không chỉnh từ vùng
 
Upvote 0
End Sub[/CODE]
Mình đã tô được màu từng cùng cố định. Nhưng mình muốn dùng code để tự động tô mà không chỉnh từ vùng
tự đông kiểu như thế nào đã chứ,tự động cũng cần có điêu kiện để giới hạn vùng,chứ còn không nó chạy tùm lum làm sao bạn?
 
Upvote 0
End Sub[/CODE]

tự đông kiểu như thế nào đã chứ,tự động cũng cần có điêu kiện để giới hạn vùng,chứ còn không nó chạy tùm lum làm sao bạn?
Cái tối thiểu để tính toán "tự động" dù là công thức hay vba là cái điều kiện mà bạn ấy cũng không trình bày ra. Vậy mà bạn ấy cứ muốn "tự động", không hiểu tự động sao luôn
 
Upvote 0
Web KT
Back
Top Bottom