2017-10-18 245 views
0

我想要根據數據表單元格顏色。例如,我有表是這樣的:Excel單元格顏色格式

O | OK 
X | Error 
S | Slow 
U | Unchecked 

然後我還有一個表,價值是這樣的:

D2.1 | U 
D2.2 | X 
D2.3 | X 
D2.4 | S 
D2.5 | O 

而且,我想有一個地圖,比如這個:

Room 1 
D2.1 |  
D2.2 | D2.3  

Room 2 
D2.4 | D2.5 

現在,我需要讓他們根據表2我想通了使用索引和列代表他們的狀態,顏色D2.1地圖,但我需要使它像在條件格式的東西:

=Switch(Index(Status[ID], Match(X1, Status[Status],0)), "O", "Green", "X", "Red", "S", "Yellow", "U", "White") 

這可能嗎?

謝謝您的幫助

+0

這確實是條件格式化的一種情況。將一個填充顏色設置爲「無顏色」,並沿着'= IF(A3 =「X」)的行建立3條應用另一種顏色的規則。然後填充顏色=紅色並停止處理該單元格的其他規則。 – Variatus

+0

所以我們不能只是定義顏色,並以編程方式設置它? – Magician

+0

要做到這一點,你需要VBA – Variatus

回答

0

以下代碼必須安裝在您有房間地圖的工作表的代碼表中。範圍RoomMap在這裏定義爲A28:E32,可能會更改爲包含您的表格。請注意,代碼需要一個命名範圍「狀態」,可以用其他現有表中的一個來代替。

請遵守代碼中的註釋。

Private Sub Worksheet_Change(ByVal Target As Range) 
    ' 18 Oct 2017 

    Dim RoomMap As Range 
    Dim Stat As String      ' new value (after change) 
    Dim Cols()        ' array of available colours 
    Dim Col As Long       ' selected colour 

    ' Any cell in RoomMap will be coloured when changed. 
    ' You can specify the range in any way a range can be specified. 
    Set RoomMap = Range(Cells(28, "A"), Cells(32, "E")) 

    ' ==================================================== 
    ' For the purpose of this test I have set up a Named Range 
    ' called "Status", containing the letters O X S U. 
    ' Each of the cells in RoomMap has Data Validation, 
    ' also referring to the "Status" range, 
    ' limiting entry to one of these letters or blank. 
    ' ==================================================== 

    ' ==================================================== 
    ' The Cols() array contains Long values: 
    '  vbBlue (0) = 16711680 
    '  vbGreen (1) = 65280 
    '  vbRed (2) = 255 
    '  vbYellow (3) = 65535 
    '  vbWhite (4) = 16777215 
    ' They are matched to the sequence of letters in "Status" 
    ' with (0) added to mark cells left blank 

    ' You can replace the constant names with their numeric values. 
    ' To define another colour, set the colour as fill in any cell, 
    ' select the cell and write the following code in the Immediate window:- 
    ' ? ActiveCell.Interior.Colour 
    ' upon enter, the selected colour's number will be displayed. 
    ' ==================================================== 


    If Not Application.Intersect(RoomMap, Target) Is Nothing Then 
     Cols = Array(vbBlue, vbGreen, vbRed, vbYellow, vbWhite) 
     With Target 
      Stat = Trim(.Value) 
      On Error Resume Next 
      ' an error will occur if the cell doesn't have one 
      ' of the values in "Status" 
      ' The setting of Data Validation in the cell prevents 
      ' any alternative value other than blank. 
      Col = Application.Match(Target.Value, Range("Status"), 0) 
      .Interior.Color = Cols(Col) 
     End With 
    End If 
End Sub 
+0

啊..好.. Interior.Color。尼斯。這是我需要的。我會將這些顏色圖例與他們的狀態一起放在另一張表中。 謝謝 – Magician

+0

是的。我瞭解代碼。將做出一些調整以適應我的需要,但這是我失蹤的一塊。謝謝。 – Magician

0

這裏是例子供您使用Conditional Formatting,你只需要設置它一次,它的工作很好地爲你,這裏是你如何做到這一點:

  1. 從我的例子中,突出cell G3,然後去Home > Conditional Formatting > New Rule > Use a formula ...並在下面輸入公式,並選擇您想要的顏色Fill(請注意:您將需要相應地調整你的範圍,或者只使用一個named range所以它會更容易在未來的管理)。

    =VLOOKUP(G3,$D$3:$E$7,2,0)="X"

  • 做其他兩種顏色的同樣的事情,這裏的公式供你使用:

    黃:=VLOOKUP(G3,$D$3:$E$7,2,0)="S"

    綠色:=VLOOKUP(G3,$D$3:$E$7,2,0)="O"

    所以在最後,你應該有這樣的事情如下:

  • 更改Applies to領域=$G$3:$H$6或範圍,你想使用。點擊ApplyOK,你應該得到你想要的結果。
  • +0

    是的,但問題是,其狀態並非總是如此。我可以添加到表格中。我更喜歡使用VBA來「查看」顏色,另一個人建議使用VBA,並且我認爲我也需要VBA來達到這個目的,並從數組中進行設置。 – Magician

    +0

    VBA可能是一種更好的方式。但是再想一想這裏使用的VLOOKUP公式,您可以簡單地將'X,S,O'點改爲一個單元格,例如'= VLOOKUP(G3,$ D $ 3:$ E $ 7,2,0)= $ A $ 1',這樣你可以隨時更改狀態碼。它是由你決定。 – ian0411