Excel使用范围颜色对命名范围中的单元格着色

时间:2013-07-25 17:29:06

标签: excel excel-vba vba

我想基于命名的状态范围自动为单元格中的单元格着色,这些状态具有单元格需要拾取的相关颜色。例如:


工作表1

A栏| B栏| C栏 名字A |部门AAA |状态1
名字B |部门AAA |状态2
名字C |部门BBB |状态1
名字D |部门CCC |状态3
名字E |部门BBB |状态2


在具有命名范围状态的单独工作表中 工作表2
A栏 状态1(细胞着色为绿色)
状态2(细胞着色为蓝色)
状态3(细胞着色为粉红色)

所以我想要的是,工作表1的C栏中的所有状态1都是绿色阴影,状态2是蓝色,状态3是粉红色。
目前有大约30种状态着色为四种颜色中的一种。这些颜色将来可能会发生变化,可能会有其他颜色,因此它应该自动拾取这些颜色。

感激不尽的任何帮助

2 个答案:

答案 0 :(得分:0)

我同意@ Stephan1010条件格式是最佳路线。它应该更易于管理,因为你只有4种颜色,这意味着4个条件带有包含所有适用状态的OR语句。如果要改变颜色/状态,你不必修改所有30个......

话虽如此,虽然会严重影响工作簿的性能,但 可以通过工作表事件在vba中完成 。第一段代码将捕获工作表1中C列的任何更改并更新背景颜色(当然,其他更改也可以完成)

Private Sub Worksheet_Change(ByVal Target As Range)

minCol = Target.Cells(1, 1).Column
maxcol = minCol + (Target.Columns.Count - 1)
If minCol > 3 Or maxcol < 3 Then
Else
    For Each cell In Target.Cells
        If cell.Column = 3 Then
            If Not IsError(Application.Match(cell.Value, 
                              Worksheets("Sheet1").Range("Statuses"), 0))     
            Then
                x = Application.Match(_
                        cell,Worksheets("Sheet1").Range("Statuses"), 0)
               cell.Interior.Color = Worksheets("Sheet1")._
                                      Range("Statuses").Cells(x, 1).Interior.Color
            End If
        End If
    Next cell
End If
End Sub

然后,您需要捕获工作表1中状态范围的任何更改,并在工作表2中更新每个适用的值。这将更加复杂,如果真的有必要执行此步骤,那么你应该能够开始它并基本上实现上面代码的反向逻辑。

答案 1 :(得分:0)

为Excel单元格区域着色:

worksheet.Cells [“ A2:AZ”]。interior.color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Red);

要从Excel单元格区域中删除颜色,请执行以下操作:

xlWorkSheet1.Range [“ A2:AZ”]。Interior.ColorIndex = 0;