使用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个单元格的第一个垂直范围,并将其设置在名为r
的Range 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
例: