2009-09-15 46 views

Trả lời

45

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 ô.

17

Đặ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 
+0

Cảm ơn, điều này cũng rất hữu ích. –

1

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.

0

Để 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ác vấn đề liên quan