2012-04-07 9 views
0

Ich habe eine Liste in Excel und ich muss Zeilen basierend auf dem Wert in der Zelle 2 dieser Zeile formatieren. Dies ist, wie Daten sehen aus wieFarbe gesamte Reihe basierend auf dem Wert der 2. Zelle in dieser Zeile?

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

Zum Beispiel if Name=John Tery => color row as Red, if Name=Mary Jane => color row as Pink usw.

ich bedingte Formatierung versucht, aber ich wusste nicht, wie diese Arbeit zu machen. Ich habe sehr wenig Erfahrung mit solchen Aufgaben in Excel.

Kann jemand helfen?

PS. alle Namen sind Zwei-Wort-Namen

+3

Wie viele verschiedene Namen haben Sie?Ich würde die bedingte Formatierung nicht berücksichtigen, wenn es mehr als eine Handvoll gibt. Ändern sich Namen, so dass neue Farben notwendig werden? Muss die Farbänderung sofort erfolgen oder kann die Liste nach Abschluss der Bearbeitung neu eingefärbt werden? Werden neue Namen zur Liste hinzugefügt? –

+0

@TonyDallimore Nicht viel. Weniger als 10 und sie sind Konstanten – sandalone

Antwort

3

, wenn es nur ein paar Namen zu handhaben sind, die jeweils mit bedingtem Format Formel würde aussehen wie diese

=$B2="John Tery" 
  • Sie unten die betroffenen Zeilen aus der oberen Reihe ausgewählt haben müssen (so aktuelle aktive Zelle befindet sich in der 2. Zeile, nicht in der letzten Zeile)
  • absolute Referenz auf Spalte $B bedeutet, dass für alle Zellen in verschiedenen Spalten Spalte B getestet wird
  • relative Bezugnahme auf Zeile 2 bedeutet, dass für eine Zelle in verschiedenen Zeilen eine eigene Zeile getestet wird (z. für Zelle A42, die Formel wird Wert von $ B42 testen)
  • Gleichheitsoperator = wird entweder TRUE oder FALSE (oder ein Fehler, wenn eines der Argumente Fehler sind) zurückgeben und es hat die gleiche Verwendung wie innerhalb IF Bedingungen ...
+0

Großartig! So einfach und ich kann es sogar in OpenOffice und LibreOffice verwenden !!! – sandalone

2

Edit Erneut die Frage, sah ich, dass die gesamte Zeile nicht nur den Namen gefärbt werden soll. Ich entschied auch, dass, wenn ein erkannter Name durch einen unerkannten Namen ersetzt wird, die Farbe aus der Reihe entfernt werden sollte. Der ursprüngliche Code wurde ersetzt, um diese Probleme zu beheben.

Ich entschied, dass mir die Antworten auf meine Fragen egal waren, weil die untenstehende Lösung für jeden Szenerio, den ich identifizieren konnte, am einfachsten zu sein schien.

Zuerst benötigen Sie eine Methode, um zu identifizieren, dass "John Tery" rot und "Mary Jane" rosa gefärbt werden soll. Ich entschied, dass der einfachste Ansatz darin bestand, ein Arbeitsblatt NameColour zu haben, in dem die Namen wie gewünscht aufgeführt waren. Die Routine weiß also, dass "John Tery" rot sein muss, weil es in dieser Liste rot ist. Ich habe Ihrer Liste einige weitere Namen hinzugefügt. Der Routine ist es egal, wie viele Wörter in einem Namen sind.

Worksheet NameColour showing coloured names

Der folgende Code muss in ThisWorkbook gehen. Diese Routine wird immer dann ausgelöst, wenn eine Zelle geändert wird. Die Variablen MonitorColNum und MonitorSheetName teilen der Routine mit, welches Blatt und welche Spalte überwacht werden sollen. Alle anderen Zelländerungen werden ignoriert. Wenn es eine Übereinstimmung findet, kopiert es das Standardformular des Namens aus NameColour (löscht diese Anweisung aus dem Code, wenn dies nicht erforderlich ist) und färbt die Zelle nach Bedarf. Wenn keine Übereinstimmung gefunden wird, wird NameColour zur späteren Spezifikation der Farbe hinzugefügt.

Hoffe, das hilft.

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 
Verwandte Themen