2012-04-07 72 views
0

我在Excel中有一个列表,我需要根据该行的单元格2中的值格式化行。这是数据看起来的样子根据该行中第二个单元格的值为整行着色?

No. | Name | Other data | Other data 2 | Date | Date 2 | 

例如,if Name=John Tery => color row as Redif Name=Mary Jane => color row as Pink

我使用条件格式试过,但我不知道如何使这项工作。我在Excel中对这些任务的经验很少。

任何人都可以帮忙吗?

PS。所有名称都是双字名称

+3

有多少不同的名字,你呢?如果只有少数人,我不会考虑条件格式。名称改变是否需要新的颜色?颜色变化是否必须是瞬间的,或者编辑完成后列表是否可以重新着色?新名字是否被添加到列表中? – 2012-04-07 09:51:06

+0

@TonyDallimore并不多。不到10,他们是常量 – sandalone 2012-04-07 12:06:56

回答

3

如果只有几个名字来处理,每一个条件格式的公式是这样的

=$B2="John Tery" 
  • 你需要有从顶行向下选择受影响的行(这样当前活动单元位于第二行,而不是最后一行)
  • 对列$B的绝对引用表示对于不同列中的所有单元格,列B将被测试
  • 相对于行2的引用意味着对于不同行中的单元格,其自己的行将被测试(例如,对于小区A42,该公式将测试$ B42的值)
  • 平等运营商=将返回TRUE或FALSE(或一个错误,如果任何的论点是错误的),它具有为内部IF条件相同的使用...
+0

太棒了!这么简单,我甚至可以在OpenOffice和LibreOffice中使用它! – sandalone 2012-04-07 12:12:46

2

编辑重读这个问题,我看到整行不仅要着色,还要着色。我还决定,如果一个被认可的名字被一个无法识别的名字取代,那么该颜色应该从该行中删除。原代码已被替换以解决这些问题。

我决定我不关心我的问题的答案,因为下面的解决方案似乎是我可以识别的任何场景的最简单的方法。

首先,您需要一些方法来识别“John Tery”将被涂成红色,而“Mary Jane”将被涂成粉红色。我决定最简单的方法是制作一个工作表NameColour,其中列出了需要着色的名称。所以例程知道“John Tery”是红色的,因为它在这个列表中是红色的。我在列表中添加了更多名称。例程不关心名称中有多少个单词。

Worksheet NameColour showing coloured names

下面的代码必须在ThisWorkbook。每当一个单元格被改变时,该例程就会被触发变量MonitorColNumMonitorSheetName告诉例程要监视的表单和列。其他单元格更改将被忽略。如果找到匹配项,它将从NameColour复制名称的标准格式(如果不需要,则从代码中删除此语句)并根据需要为单元格着色。如果未找到匹配项,则会将名称添加到NameColour中以便稍后指定其颜色。

希望这会有所帮助。

Option Explicit 
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Changed As Range) 

    Dim CellCrnt As Variant 
    Dim ColLast As Long 
    Dim Found As Boolean 
    Dim MonitorColNum As Long 
    Dim MonitorSheetName As String 
    Dim RowNCCrnt As Long 

    MonitorSheetName = "Sheet2" 
    MonitorColNum = 2 

    ' So changes to monitored cells do not trigger this routine 
    Application.EnableEvents = False 

    If Sh.Name = MonitorSheetName Then 
    ' Use last value in heading row to determine range to colour 
    ColLast = Sh.Cells(1, Columns.Count).End(xlToLeft).Column 
    For Each CellCrnt In Changed 
     If CellCrnt.Column = MonitorColNum Then 
     With Worksheets("NameColour") 
      RowNCCrnt = 1 
      Found = False 
      Do While .Cells(RowNCCrnt, 1).Value <> "" 
      If LCase(.Cells(RowNCCrnt, 1).Value) = LCase(CellCrnt.Value) Then 
       ' Ensure standard case 
       CellCrnt.Value = .Cells(RowNCCrnt, 1).Value 
       ' Set required colour to name 
       'CellCrnt.Interior.Color = .Cells(RowNCCrnt, 1).Interior.Color 
       ' Set required colour to row 
       Sh.Range(Sh.Cells(CellCrnt.Row, 1), _ 
         Sh.Cells(CellCrnt.Row, ColLast)).Interior.Color = _ 
             .Cells(RowNCCrnt, 1).Interior.Color 
       Found = True 
       Exit Do 
      End If 
      RowNCCrnt = RowNCCrnt + 1 
      Loop 
      If Not Found Then 
      ' Name not found. Add to list so its colour can be specified later 
      .Cells(RowNCCrnt, 1).Value = CellCrnt.Value 
      ' Clear any existing colour 
      Sh.Range(Sh.Cells(CellCrnt.Row, 1), _ 
       Sh.Cells(CellCrnt.Row, ColLast)).Interior.ColorIndex = xlNone 
      End If 
     End With 
     End If 
    Next 
    End If 

    Application.EnableEvents = True 

End Sub 
相关问题