使用范围颜色从命名范围着色单元格

我想自动根据一个已命名的状态范围来为一列值的单元格着色,这些状态具有单元格需要拾取的相关颜色。 例如:


工作表1

列A | B列| C栏
名字A | AAA | | 状态1
A名称B | AAA | | 状态2
一个名字C | Dept BBB | 状态1
一个名字D | CCC部门 状态3
一个名字E | Dept BBB | 状态2


在具有指定范围状态的单独工作表中
工作表2
A栏
状态1(细胞染绿色阴影)
状态2(单元格着色为蓝色)
状态3(细胞染成粉红色)

所以我想要的是Worksheet 1的C列中的Status 1的全部颜色为绿色,Status 2的为蓝色,状态3为粉红色。
目前有大约30种状态是四种颜色中的一种。 这些颜色可能会在将来发生变化,并且可能会有更多的颜色,因此它会自动提取这些颜色。

任何帮助感激地收到

我同意@ Stephan1010条件格式将是最好的路线。 它也应该更容易pipe理,因为你只有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中的每个适用值 。这将更加复杂,如果这一步真的是必要的,那么您应该能够启动它基本上实现了上面代码的反向逻辑。