你可以从这个子开始。它将使用来自 (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 long(在我们的例子中为8),因此这基本上可以处理更多行。然后,它将采用第一个垂直范围的 8 个单元格并将其设置在称为 r 的 Range object 中,以便稍后对其执行 For Each 循环。
对于For Each 循环中的每个单元格,我们将横向运行另一个For 循环(在列的方向上)。新的For 循环将以第 3 步运行,调用我们的 ColorRGB 函数并告诉它接受下面提供的参数。
鉴于For 循环以 3 步运行,我们为有色单元格定义了一个计数器,称为c,它在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
这个最后的 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
例子: