Schnelle bedingte Formatierung für Zeilen mit denselben Daten in einer Spalte?

1

Ich habe viele Daten, im Grunde wie folgt:

Name    Data    Date        ...
Groucho 123     06/23/2018
Harpo   321     05/02/2018
Chico   1239    04/17/2018
Zeppo   2938    12/03/2018
Groucho 123098  11/27/2018
Zeppo   29381   07/03/2018
...

Ich hätte gerne jede Reihe mit der gleichen Name etwas Farbe hervorgehoben werden. (Es ist mir egal, welche Farbe das erleichtert).

Die Ergebnisse würden also so aussehen:
enter image description here
(Hinweis: Die gesamte Zeile kann hervorgehoben werden oder nur die Zeile in der "Tabelle". Was auch immer funktionieren würde, ist für mich in Ordnung.)

Gibt es eine schnelle Möglichkeit, dies zu tun? Ich möchte lieber keine Regeln wie eingeben =$A2="Groucho" dann setze ein format, dann neue regel =$A2="Chico", und stellen Sie eine Farbe usw. ein, da ich Dutzende von Namen in Spalte A haben könnte und das manuelle Erstellen einer Regel für jeden ziemlich zeitaufwendig ist.

Ich bin offen für eine VBA-Option, bevorzuge jedoch eine integrierte Lösung, falls verfügbar!

BruceWayne
quelle
1
Erste Nachforschungen bringen nicht viele eingebaute Optionen hervor, aber ich arbeite an einer VBA-Option. Müssen Sie die Farben auswählen oder ist es in Ordnung, wenn Excel automatisch Farben zuweist?
jrichall
@jrichall - Bin total in Ordnung mit automatischen Farben - mit dem Vorbehalt, dass ich nicht möchte, dass ein Name gesagt wird RGB(0,0,0) dann ein anderer Name sein RGB(10,0,0) wo man nicht wirklich erkennen kann. Ich wollte gerade in VBA einsteigen, und ich wollte diesen Teil bearbeiten, indem ich die von mir ausgewählten Farben speicherte und bevor ich die einstelle Nächster Farbe, stellen Sie sicher, dass jeder R, G, und B Wert ist mindestens X% anders als einer, den ich verwendet habe. Oder wenn es irgendwie einfacher ist, bin ich es absolut in Ordnung mit mir selbst zu wählen.
BruceWayne
@jrichall vielleicht einen Haufen in einer Liste speichern, mit RGB () und einfach durchschleifen.
BruceWayne

Antworten:

1

Hier ist eine VBA-Lösung:

Sub conditional_format_by_name()
Dim rng As Range

On Error Resume Next
Set rng = Application.InputBox("Please select the range to Format", Type:=8)
On Error GoTo 0
If rng Is Nothing Then Exit Sub

rng.Select 'So the user can see the range selected, to know which column they want in the next step

Dim primaryCol As Long
primaryCol = InputBox("Now, **within that range**, which column number do you want to use as the basis for matches?")
rng.Columns(1).Select

Dim primaryList() As Variant
primaryList = rng.Columns(1).Value

Dim unique(), i As Long
unique = removeDuplicates(primaryList)
For i = LBound(unique) To UBound(unique)
    Debug.Print "Adding condition for: " & unique(i)
    rng.FormatConditions.Add Type:=xlExpression, Formula1:="=" & rng.Cells(1).Address(0) & "=""" & unique(i) & """"
    With rng.FormatConditions(1 + i).Interior
        .PatternColorIndex = xlAutomatic
        .Color = ColorRandomizer()
        .TintAndShade = 0.5
    End With
    rng.FormatConditions(1 + i).StopIfTrue = False
Next i
End Sub

Function removeDuplicates(ByVal myArray As Variant) As Variant
'https://stackoverflow.com/a/43102816/4650297
Dim d As Object
Dim v As Variant 'Value for function
Dim outputArray() As Variant
Dim i As Integer

Set d = CreateObject("Scripting.Dictionary")
For i = LBound(myArray) To UBound(myArray)
    d(myArray(i, 1)) = 1
Next i
i = 0
For Each v In d.Keys()
    ReDim Preserve outputArray(0 To i)
    outputArray(i) = v
    i = i + 1
Next v
removeDuplicates = outputArray
End Function
Function ColorRandomizer() As Long
'https://www.ozgrid.com/forum/forum/tip-tricks-code/102242-rgb-color-random
Dim i As Long, j As Long, k As Long, m As Long
Randomize
i = Int((255 * Rnd) + 1)
m = Int((255 * Rnd) + 1)
k = Int((255 * Rnd) + 1)
ColorRandomizer = RGB(i, m, k)
End Function

enter image description here

Probleme: Die Farben für jede Gruppe können nahe beieinander liegen und / oder zu dunkel sein, um wirksam zu sein. Ich werde darüber nachdenken, wie ich das umgehen soll. Muss vielleicht zurückkehren R, G, und B Werte und prüfen Sie, ob die Werte, die ich zuvor verwendet habe, innerhalb von 25% eines bereits verwendeten Werts liegen. Generieren Sie eine neue Zahl.

BruceWayne
quelle
Dies ist die Richtung, in die ich auch zu bauen begann, @BruceWayne, aber dein VBA ist viel robuster. Ich nutzte die Interior.ColorIndex Diese Funktion verwendet definitiv viele verschiedene Farben, aber sie sind in Excel eingebacken und ziemlich hässlich.
jrichall