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

Changing cell color to RGB values within Excel spreadsheet using VBA

我基本上在 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

你可以从这个子开始。它将使用来自 (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

结果:

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

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

考虑到 For 循环 运行 的步长为 3,我们为彩色单元格定义了一个计数器,称为 c,它将自身递增 1 For 循环的每一步(它的步等于 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

最后一个子项将为您提供的 sheet 名称着色。

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

如果您的 sheet 的名称类似于 SheetX

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

示例:

你的不起作用,因为你将 RGB_Color(R,B,G) 传递给 RGB(R,G,B)