2013-07-25 180 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中的每個適用值。這將更加涉及,如果此步驟確實是必需的,那麼您應該能夠啓動它並基本實現上述代碼的反向邏輯。