当值在单元格中时更改单元格颜色

在我的主表中,我有一个列(列C),将会input长16位的代码。 下一列(D列)以公式“= MID(列C中的单元格,16,6”)推导出该代码的最后6位。如果较长代码的最后6位数等于我列出的任何代码在代码中的Case语句中,F列中的相应单元格应该变为红色,以向用户指示列F中的单元格需要代码,一旦F列单元格变为红色,用户就能够点击F中的单元格列,然后把用户join另一个代码列表,用户可以双击任何代码,并将F列填充到主表单中。

到目前为止,当一个代码填充F列中的单元格时,它变成了一个没有填充的背景(如我所愿), 但是当我在同一行的任何单元格中input任何其他数据时, F列又变回红色,代码仍在单元格中。 我需要F列中的单元格在input数据之后保留一个没有填充的背景,除非代码从单元格中被删除,然后它可以回到红色以指示用户这个单元格需要一个值。 当内部还有代码时,我不能让单元变红。 我觉得自己好像很接近,但是我不太了解VBA语法,所以不能使这个function正常工作。 任何build议将不胜感激。

提前致谢。 我将把代码发布到下面的主表单/表格中:

 Option Explicit Private Sub Worksheet_Change(ByVal Target As Range) Dim c As Range: Set c = Range("D7:D446") Dim d As Range: Set d = Range("F7:F446") For Each c In c.Cells Select Case c.Value Case "1000GP", "1000MM", "19FEST", "20IEDU", "20ONLC", "20PART", "20PRDV", "20SPPR", "22DANC", "22LFLC", "22MEDA", "530CCH", "60POUBL", "74GA01", "74GA17", "74GA99", "78REDV" Cells(c.Row, "F").Interior.ColorIndex = 3 Case Else Cells(c.Row, "F").Interior.ColorIndex = 0 End Select Next c If Not Application.Intersect(d, Range(Target.Address)) _ Is Nothing Then Target.Interior.ColorIndex = 0 End If End Sub 

可能是这样的:

每个细胞在范围内:

  Option Explicit Private Sub Worksheet_Change(ByVal Target As Range) Dim c As Range: Set c = Union(Range("D7:D446"), Range("F7:F446")) Dim CellF As Range, CellD As Range, Cell As Range If Not Application.Intersect(c, Range(Target.Address)) _ Is Nothing Then For Each Cell In c Set CellF = Range("F" & Cell.Row) Set CellD = Range("D" & Cell.Row) If CellF.Value <> "" Then CellF.Interior.ColorIndex = 0 Else Select Case CellD.Value Case "1000", "1000MN", "19FET", "20IDU", "20ONC", "20RT", "20DV", "20SPPR", "22DC", "22LF", "22ME", "530H", "60UBL", "74G1", "74GA", "74A9", "78RV" CellF.Interior.ColorIndex = 3 Case Else CellF.Interior.ColorIndex = 0 End Select End If Next Cell End If End Sub 

只更改单元格:

 Option Explicit Private Sub Worksheet_Change(ByVal Target As Range) Dim c As Range: Set c = Union(Range("D7:D446"), Range("F7:F446")) Dim CellF As Range, CellD As Range, Cell As Range If Not Application.Intersect(c, Range(Target.Address)) _ Is Nothing Then Set CellF = Range("F" & Target.Row) Set CellD = Range("D" & Target.Row) If CellF.Value <> "" Then CellF.Interior.ColorIndex = 0 Else Select Case CellD.Value Case "1000", "1000MN", "19FET", "20IDU", "20ONC", "20RT", "20DV", "20SPPR", "22DC", "22LF", "22ME", "530H", "60UBL", "74G1", "74GA", "74A9", "78RV" CellF.Interior.ColorIndex = 3 Case Else CellF.Interior.ColorIndex = 0 End Select End If End If End Sub 

我认为最简单的方法就是在列F上添加条件格式,以便在单元格不为空时不会填充。 这个链接有关于如何做的更多的信息,但是你在条件格式框中基本上做了一个NOT(ISBLANK())。