我基本上在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
答案 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
结果:
以下代码使用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
示例:
答案 1 :(得分:0)
您无法使用,因为您要将RGB_Color(R,B,G)传递给RGB(R,G,B)