2016-06-15 24 views
1

Ich versuche festzustellen, ob eine bestimmte Zelle einen TRUE-Wert aus der bedingten Formatierung zurückgibt und dann die gesamte Zeile (oder nur eine Zelle) hervorhebt, wenn sie zurückkehrt wahr. Die bedingte Formatierung befindet sich in Spalte B und möchte die gesamte Zeile hervorheben.Testen, ob die bedingte Formatierung TRUE VBA ist und die gesamte Zeile markieren

Ich versuche letztlich, Zahlen in Spalte F zu addieren, wenn die bedingte Formatierung in Spalte B TRUE zurückgegeben hat, aber ich kann diesen Teil herausfinden, wenn ich einfach feststellen kann, ob die bedingte Formatierung wahr zurückgegeben hat oder nicht. Ich habe jedes Forum, jede Seite, jedes Beispiel usw. durchsucht. Ich konnte es finden und konnte es immer noch nicht schaffen.

Ich führe bedingte Formatierung durch, um eine große Datenmenge für mehrere verschiedene Instanzen zu durchsuchen. Der einzige Weg, wie ich es herausfinden konnte, war, jede Bedingung als separates bedingtes Format auszuführen. Hier ist ein Teil eines der U-Boote (jede Unter hat etwa 30 bedingte Formate und es gibt etwa 10 U-Boote):

Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _ 
"=ISNUMBER(SEARCH(""Acadia Realty Trust "",B1))" 
Selection.FormatConditions(Selection.FormatConditions.count).SetFirstPriority 
With Selection.FormatConditions(1).Interior 
.PatternColorIndex = xlAutomatic 
.Color = 65535 
.TintAndShade = 0 
End With 
Selection.FormatConditions(1).StopIfTrue = False 
Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _ 
"=ISNUMBER(SEARCH(""Aimco "",B1))" 
Selection.FormatConditions(Selection.FormatConditions.count).SetFirstPriority 
With Selection.FormatConditions(1).Interior 
.PatternColorIndex = xlAutomatic 
.Color = 65535 
.TintAndShade = 0 
End With 
Selection.FormatConditions(1).StopIfTrue = False 
Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _ 
"=ISNUMBER(SEARCH(""Alexandria Real Estate Equities, Inc"",B1))" 
Selection.FormatConditions(Selection.FormatConditions.count).SetFirstPriority 
With Selection.FormatConditions(1).Interior 
.PatternColorIndex = xlAutomatic 
.Color = 65535 
.TintAndShade = 0 
End With 
Selection.FormatConditions(1).StopIfTrue = False 

ich nur sagen, dass zu sagen, dass ich nicht einfach den gleichen Test überprüft mit bedingtem Formatierung, weil es fast 300 verschiedene Tests gibt.

UPDATE:

Ich habe versucht, was Jeep vorgeschlagen, und dann, was ich unter den Bau mehrerer U-Boote, die jeweils mit einem Array, um alle 264 Bedingungen zu passen kommentiert, aber wenn ich es hervorgehoben so tat nur das letztes Array, nicht alle Bedingungen, die in den ersten Subs erfüllt wurden. Ich benutzen den gleichen Code wie @Jeeped unten vorgeschlagen, stellte aber 24 Bedingungen in der Anordnung, und ich kann, dass Code in 11 U-Boote, und meinem primären Code sieht wie folgt aus:

Public Sub REIT() 
range("B:B").Select 
Call A25 
Call B25 
Call C25 
Call D25 
Call E25 
Call F25 
Call G25 
Call H25 
Call I25 
Call J25 
Call K25 
End Sub 

ich nur zwei Hilfe am Ende mit Spalten, um die Kriterien neu zu suchen und die benötigten Daten zu summieren, aber ich habe immer noch ein Problem mit der Hervorhebung.

+0

Wie über einen separaten Check Spalte (die Sie verstecken können, wenn Sie mögen), UDF enthält, in dem Sie alle verschiedenen Bedingungen überprüfen, und wenn true, gebe 1 in die Zelle zurück, sonst 0. Dann muss man bei der bedingten Formatierung überprüfen, ob die Check-Spalte 1 ist. –

+0

Sie können CF direkt verwenden, um die ganze Zeile zu färben. Sie können bedingte Logik verwenden, um Werte mit Formeln zu summieren. Irgendein bestimmter Grund, den Sie das in VBA machen wollen? Gemessen an Ihrem Code sind Sie nicht sehr erfahren mit VBA. Wenn Sie möchten, dass VBA die Farbgebung übernimmt, benötigen Sie keine bedingte Formatierung. Verwenden Sie ein ODER das andere, nicht beides. – teylyn

+0

@ChrisMelville, Ich weiß nicht genug über VBA, um eine UDF zu erstellen, die lang genug ist, um alle Bedingungen zu überprüfen. – Excellerator

Antwort

1

Erstellen Sie ein Array und verwenden Sie eine Schleife. A With ... End With statement kann die Referenz auf die Application.Selection Eigenschaft behandeln.

Option Explicit 

Sub makeThreeCFrules() 
    Dim v As Long, vCFRs As Variant 

    vCFRs = Array("=ISNUMBER(SEARCH(""Acadia Realty Trust "", $B1))", vbYellow, _ 
        "=ISNUMBER(SEARCH(""Aimco "", $B1))", vbYellow, _ 
        "=ISNUMBER(SEARCH(""Alexandria Real Estate Equities, Inc"", $B1))", vbYellow) 
    With Selection.EntireRow 
     .FormatConditions.Delete 
     For v = LBound(vCFRs) To UBound(vCFRs) Step 2 
      With .FormatConditions.Add(Type:=xlExpression, Formula1:=vCFRs(v)) 
       .Interior.Color = vCFRs(v + 1) 
      End With 
     Next v 
    End With 
End Sub 

Das Problem mit Formeln war, dass Sie die Spalte mit $B1 zu verankern benötigt.

Alternate:

Wenn Sie eine Liste der Suchbegriffe woanders in der Arbeitsmappe setzen, können Sie dies mit einer einzigen ‚Reverse-Lookup-Wildcard‘ erreichen.

enter image description here
Suchbegriffe in Tabelle6 A2: A4

Option Explicit 

Sub makeAllCFrules() 
    Dim v As Long, vCFRs As Variant 

    With Selection.EntireRow 
     .FormatConditions.Delete 
     With .FormatConditions.Add(Type:=xlExpression, _ 
       Formula1:="=SUMPRODUCT(--ISNUMBER(MATCH(""*""&Sheet6!$A$2:$A$4&""*"",$B1, 0)))") 
      .Interior.Color = vbYellow 
     End With 
    End With 
End Sub 

Es ist sehr wichtig, dass keine leeren Zeilen in die Suche einbezogen werden Begriffe reichen. Wenn dies der Fall ist, suchen Sie nach einem doppelten Platzhalter, der alles enthält. Natürlich könnte die mitgelieferte Unterprozedur modifiziert werden, um die Adresse der Suchbegriffe zu finden, wenn sie sich ändern können.

reverse_wildcard_results
Mit Bedingte Formatierung Regel angewendet, nachdem B1 Auswahl: B99

+0

Es sagt mir, dass ich zu viele Linienfortsetzungen im Array habe. Es gibt 275 Bedingungen, also muss ich nur mehrere Arrays erstellen? oder lauf wie 10 verschiedene Subs und nenne sie in ein öffentliches Sub? – Excellerator

+0

Ich habe versucht, die mehreren Arrays auszuführen, aber es wurden nicht alle markiert. Es sieht so aus, als wenn ich das getan habe, was ich oben erwähnt habe, es hat nur das letzte Array von Optionen hervorgehoben, nicht alle. Irgendeine Idee warum? – Excellerator

+0

Ich habe es herausgefunden. Nur benötigt, um die .FormatConditions.Delete Zeile zu löschen, aber dann die bedingte Formatierung im Rest der Zeilen, die nicht wahr sind. Irgendeine Idee, wie man den Code so bearbeitet, dass er nur unwahre Formate löscht, nachdem alle Arrays ausgeführt wurden? Danke Jeeped! – Excellerator

Verwandte Themen