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

实际上,我已经在30列(每个值在他们自己的单元格)中获得了10组RGB值,在这些列下面的8行中有不同的RGB值。 我想要做的是将10个单元格的单元格在这30个单元格的右侧进行着色,以在这些行的所有8个单元格中显示10种颜色的视觉表示(基于它们的RGB值集合)。 我已经看到了一些VBA例子,它们做类似的事情,但更多的是在一组RGB值上。 我想我可以创build像以下这样的function,但似乎并不奏效。 也许一个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 

testing:

在这个testing中,我们使用范围为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的彩色单元格定义了一个计数器,在For循环的每一步(它的步长例如是3)时,它自身增加1。

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

 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 

例:

在这里输入图像说明