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

Quảng cáo

Miền Cát Trắng

Thành viên hoạt động
Tham gia ngày
18 Tháng năm 2013
Bài viết
172
Được thích
35
Điểm
0
Tuổi
33
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: 277

Ba Tê

Cạo Rồi Khỏi Gội
Tham gia ngày
5 Tháng năm 2009
Bài viết
11,761
Được thích
16,845
Điểm
5,168
Tuổi
61
Nơi ở
An Giang
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
 

Miền Cát Trắng

Thành viên hoạt động
Tham gia ngày
18 Tháng năm 2013
Bài viết
172
Được thích
35
Điểm
0
Tuổi
33
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:

Ba Tê

Cạo Rồi Khỏi Gội
Tham gia ngày
5 Tháng năm 2009
Bài viết
11,761
Được thích
16,845
Điểm
5,168
Tuổi
61
Nơi ở
An Giang
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
 

Miền Cát Trắng

Thành viên hoạt động
Tham gia ngày
18 Tháng năm 2013
Bài viết
172
Được thích
35
Điểm
0
Tuổi
33
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ư ý!
 

Miền Cát Trắng

Thành viên hoạt động
Tham gia ngày
18 Tháng năm 2013
Bài viết
172
Được thích
35
Điểm
0
Tuổi
33
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 ạ.
 

Ba Tê

Cạo Rồi Khỏi Gội
Tham gia ngày
5 Tháng năm 2009
Bài viết
11,761
Được thích
16,845
Điểm
5,168
Tuổi
61
Nơi ở
An Giang
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?
 

concogia

Gội rồi mới Cạo
Tham gia ngày
17 Tháng chín 2009
Bài viết
3,290
Được thích
6,588
Điểm
2,868
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
 

Ba Tê

Cạo Rồi Khỏi Gội
Tham gia ngày
5 Tháng năm 2009
Bài viết
11,761
Được thích
16,845
Điểm
5,168
Tuổi
61
Nơi ở
An Giang
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..
 

concogia

Gội rồi mới Cạo
Tham gia ngày
17 Tháng chín 2009
Bài viết
3,290
Được thích
6,588
Điểm
2,868
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
 

giangintem

Thành viên mới
Tham gia ngày
19 Tháng tư 2011
Bài viết
16
Được thích
4
Điểm
303
Tuổi
46
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: 10

Nhattanktnn

Thành viên tích cực
Tham gia ngày
11 Tháng mười một 2016
Bài viết
1,360
Được thích
1,255
Điểm
668
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!
Record macro thôi! Chứ đề không có điều kiện này thích tô sao tô rồi
 

Cu Tồ

Tìm đến kiến thức! ꧁༺ Cu Tồ ༻꧂
Tham gia ngày
6 Tháng năm 2020
Bài viết
720
Được thích
343
Điểm
168
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
 

giangintem

Thành viên mới
Tham gia ngày
19 Tháng tư 2011
Bài viết
16
Được thích
4
Điểm
303
Tuổi
46
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á
 

Cu Tồ

Tìm đến kiến thức! ꧁༺ Cu Tồ ༻꧂
Tham gia ngày
6 Tháng năm 2020
Bài viết
720
Được thích
343
Điểm
168
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à
 

giangintem

Thành viên mới
Tham gia ngày
19 Tháng tư 2011
Bài viết
16
Được thích
4
Điểm
303
Tuổi
46
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
 

Cu Tồ

Tìm đến kiến thức! ꧁༺ Cu Tồ ༻꧂
Tham gia ngày
6 Tháng năm 2020
Bài viết
720
Được thích
343
Điểm
168
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?
 

Nhattanktnn

Thành viên tích cực
Tham gia ngày
11 Tháng mười một 2016
Bài viết
1,360
Được thích
1,255
Điểm
668
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
 
Quảng cáo
Top Bottom