2013-07-25 185 views
1

我想根据具有单元格需要拾取的相关颜色的状态的命名范围自动为单元格的一列值着色。例如:使用范围颜色从命名范围着色单元格


工作表1

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


在单独的工作表,其具有指定的范围的状态
工作表2
列A
状态1(细胞着色绿色的一种)
状态2(细胞着色的蓝色阴影)
状态3(细胞彩色的粉红色阴影)

所以,我要的是所有的状态1名在工作表1的C列进行着色的绿色阴影,状态2的是蓝色的灯罩和日e状态3变为粉红色。
目前有大约30个状态将四种颜色中的一种着色。这些颜色可能会在将来发生变化,并且可能会有其他颜色,因此它会自动提取这些颜色。

任何帮助感激地接受

+1

[Conditional Formatting](http://office.microsoft.com/en-gb/excel-help/creating-conditional-formatting-formulas-HA001111661.aspx)不适合吗? – pnuts

+1

@pnuts我的路线恰好:),但你的链接似乎并没有显示教程? – Jaycal

+0

@Jaycal起初让我感到困惑! - 你向下滚动了吗? – pnuts

回答

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中的每个适用值。这将更加涉及,如果此步骤确实是必需的,那么您应该能够启动它并基本实现上述代码的反向逻辑。