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

问题描述 投票:1回答:2

我基本上在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
excel vba rgb
2个回答
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 long(在我们的例子中为8),因此这基本上可以处理更多行。然后,它将采用8个单元格的第一个垂直范围,并将其设置在一个名为Range objectr中,以便稍后在其上进行For Each循环。

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

鉴于For循环以3的步长运行,我们已经为彩色单元格定义了一个名为c的计数器,该计数器在For循环的每一步增加1(其步长为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

例:


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.