使用VBA将单元格颜色更改为Excel电子表格中的RGB值

时间:2015-02-07 16:44:43

标签: excel vba rgb

我基本上在30列中拥有10组RGB值(每个值在它们自己的单元格中),在这些列中有8行重复的不同RGB值。我想要做的是将这些30的右边的10个单元格的单元格着色,以显示所有这8行中10种颜色(基于它们的RGB值集合)的视觉表示。我已经在野外看到了一些VBA示例,它们做了类似的事情,但更多的只是在一组RGB值上。我以为我可以创建像下面这样的功能,但这似乎不起作用。可能需要一个Sub例程来执行此操作但不确定从哪里开始。任何帮助或方向将不胜感激。

Function RGB_Color(R As Integer, B As Integer, G As Integer)

    RGB_Color = Application.ThisCell.Interior.Color = RGB(R, G, B)

End Function

2 个答案:

答案 0 :(得分:3)

你可以从这个子开始。它将使用来自(Rs)的数据为您的愿望范围(Rc)着色。

Sub ColorRGB(Rs As Range, Rc As Range)
Dim R As Long
Dim G As Long
Dim B As Long
Dim Address(1 To 3) As Long
Dim I As Integer: I = 1
For Each cell In Rs.Cells
Address(I) = cell.Value
I = I + 1
Next
R = Address(1)
G = Address(2)
B = Address(3)
Rc.Interior.Color = RGB(R, G, B)
End Sub

测试:

在此测试中,我们使用A1:C1范围内的内容为单元格D1着色。

Sub Test()
ColorRGB Sheet1.Range("A1:C1"), Sheet1.Range("D1")
End Sub

结果: enter image description here

以下代码使用RGBColor Sub。它将定义lastrow长(在我们的例子中为8),因此这基本上可以处理更多行。然后,它将采用8个单元格的第一个垂直范围,并将其设置为Range object r,仅在稍后对其进行For Each循环。

对于For Each循环中的每个单元格,我们将横向运行另一个For循环(在列的方向上)。新的For循环将以3的步长运行,调用我们的ColorRGB函数并告诉它接受下面提供的参数。

鉴于For循环以3的步长运行,我们已经为称为c的彩色单元格定义了一个计数器,该计数器在For的每一步增加1 {1}}循环(它的步骤是3到3)。

我希望这个逻辑清楚。显然有更好的方法可以做到这一点。

Sub ColorSheet(sheetname As string)
Dim r As Range
'defining lastrow which is 8
Dim lastrow As Long
With ThisWorkbook.Worksheets(sheetname)
lastrow = .Cells(.Rows.Count, "A").End(xlUp).Row
Set r = .Range("A1", "A" & lastrow)
End With
Dim C As Integer: C = 30
For Each cell In r.Cells
For I = 1 To 30 Step 3
ColorRGB ThisWorkbook.Worksheets(sheetname).Range(cell.Offset(0, I - 1).Address(0, 0), cell.Offset(0, I + 1).Address(0, 0)), ThisWorkbook.Worksheets(sheetname).Range(cell.Offset(0, C).Address(0, 0))
C = C + 1
Next I
C = 30
Next
End Sub

此最终子颜色将为您提供的工作表名称着色。

Sub Test
ColorSheet("Sheet3")
'And so on...
End Sub

如果您的工作表名称为SheetX

    Sub Test
    Dim I as Integer
    For I = 1 to 20
    ColorSheet("Sheet"&I)
    Next I
    End Sub

示例:

enter image description here

答案 1 :(得分:0)

您无法使用,因为您要将RGB_Color(R,B,G)传递给RGB(R,G,B)