Tôi có một cột chứa giá trị rgb, ví dụ:Excel: Set màu nền của tế bào để giá trị rgb dữ liệu trong tế bào
127,187,199
67,22,94
Trong Excel, có cách nào tôi có thể sử dụng để thiết lập màu nền của tế bào?
Tôi có một cột chứa giá trị rgb, ví dụ:Excel: Set màu nền của tế bào để giá trị rgb dữ liệu trong tế bào
127,187,199
67,22,94
Trong Excel, có cách nào tôi có thể sử dụng để thiết lập màu nền của tế bào?
Bạn có thể sử dụng VBA - một cái gì đó giống như
Range("A1:A6").Interior.Color = RGB(127,187,199)
Chỉ cần vượt qua trong các giá trị của ô.
Đặt riêng thuộc tính Màu sẽ đảm bảo khớp chính xác. Excel 2003 chỉ có thể xử lý 56 màu cùng một lúc. Tin tốt là bạn có thể gán bất kỳ giá trị rgb nào cho 56 khe đó (được gọi là ColorIndex). Khi bạn đặt màu của ô bằng cách sử dụng thuộc tính Màu, điều này làm cho Excel sử dụng "ColorIndex" gần nhất. Ví dụ: Việc đặt ô thành RGB 10,20,50 (hoặc 3281930) sẽ thực sự khiến ô được đặt thành chỉ mục màu 56 là 51,51,51 (hoặc 3355443).
Nếu bạn muốn đảm bảo bạn có kết quả khớp chính xác, bạn cần thay đổi ColorIndex thành giá trị RGB bạn muốn và sau đó thay đổi ColorIndex của ô thành giá trị đã nói. Tuy nhiên, bạn nên lưu ý rằng bằng cách thay đổi giá trị của chỉ mục màu, bạn thay đổi màu của tất cả các ô đã sử dụng màu đó trong sổ làm việc. Để đưa ra một ví dụ, Red là ColorIndex 3. Vì vậy, bất kỳ ô nào bạn tạo ra Red bạn thực sự đã tạo ColorIndex 3. Và nếu bạn xác định lại ColorIndex 3 để nói, màu tím, thì ô của bạn sẽ thực sự được tạo màu tím, nhưng tất cả các ô màu đỏ khác trong sổ làm việc cũng sẽ được đổi thành màu tía.
Có một số chiến lược để giải quyết vấn đề này. Một cách là chọn một chỉ mục chưa được sử dụng hoặc chỉ một chỉ mục mà bạn cho rằng sẽ không có khả năng được sử dụng. Một cách khác là thay đổi giá trị RGB của ColorIndex gần nhất để thay đổi của bạn sẽ tinh tế. Mã tôi đã đăng bên dưới có cách tiếp cận này. Lợi dụng kiến thức mà ColorIndex gần nhất được gán, nó gán giá trị RGB trực tiếp cho ô (do đó sinh ra màu gần nhất) và sau đó gán giá trị RGB cho chỉ mục đó.
Sub Example()
Dim lngColor As Long
lngColor = RGB(10, 20, 50)
With Range("A1").Interior
.Color = lngColor
ActiveWorkbook.Colors(.ColorIndex) = lngColor
End With
End Sub
Không thể thay đổi các tế bào từ bên trong hàm VBA được sử dụng làm công thức bảng tính. Trừ qua workaround này ...
Đặt chức năng này thành một mô-đun mới:
Function SetRGB(x As Range, R As Byte, G As Byte, B As Byte)
On Error Resume Next
x.Interior.Color = RGB(R, G, B)
x.Font.Color = IIf(0.299 * R + 0.587 * G + 0.114 * B < 128, vbWhite, vbBlack)
End Function
Sau đó sử dụng công thức này trong bảng của bạn, ví dụ như trong tế bào D2
:
=HYPERLINK(SetRGB(D2;A2;B2;C2);"HOVER!")
Khi bạn di chuột chuột qua ô (thử nó!), màu nền sẽ cập nhật RGB được lấy từ các ô A2
đến C2
. Màu phông chữ là màu trắng hoặc đen tương phản.
Để tô màu mỗi ô dựa trên giá trị số nguyên hiện tại, phần sau sẽ hoạt động, nếu bạn có phiên bản Excel gần đây. (Các phiên bản cũ hơn không xử lý rgb nữa)
Sub Colourise()
'
' Colourise Macro
'
' Colours all selected cells, based on their current integer rgb value
' For e.g. (it's a bit backward from what you might expect)
' 255 = #ff0000 = red
' 256*255 = #00ff00 = green
' 256*256*255 #0000ff = blue
' 255 + 256*256*255 #ff00ff = magenta
' and so on...
'
' Keyboard Shortcut: Ctrl+Shift+C (or whatever you want to set it to)
'
For Each cell In Selection
If WorksheetFunction.IsNumber(cell) Then
cell.Interior.Color = cell.Value
End If
Next cell
End Sub
Nếu thay vì số bạn có chuỗi, bạn có thể chia chuỗi thành ba số và kết hợp chúng bằng rgb().
Cảm ơn, điều này cũng rất hữu ích. –