我想基于命名的状态范围自动为单元格中的单元格着色,这些状态具有单元格需要拾取的相关颜色。例如:
工作表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种状态着色为四种颜色中的一种。这些颜色将来可能会发生变化,可能会有其他颜色,因此它应该自动拾取这些颜色。
感激不尽的任何帮助
答案 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;