2016-08-03 54 views
3

Hat jemand über eine Funktion laufen, die tatsächlich mit bedingter Formatierung funktioniert?Benutzerdefinierte Excel Formel Funktion UDF zu zählen Bedingte Formatierung

gibt es einige Addons für kutools und albebits aber sie sind nicht Formel basiert (Sie haben alles manuell auswählen)

Ich habe dies gefunden, funktioniert aber nur mit manueller Formatierung

Function ColorFunction(rColor As Range, rRange As Range, Optional SUM As Boolean) 
Dim rCell As Range 
Dim lCol As Long 
Dim vResult 
lCol = rColor.Interior.ColorIndex 
If SUM = True Then 
    For Each rCell In rRange 
    If rCell.Interior.ColorIndex = lCol Then 
      vResult = WorksheetFunction.SUM(rCell) + vResult 
    End If 
    Next rCell 
Else 
    For Each rCell In rRange 
    If rCell.Interior.ColorIndex = lCol Then 
      vResult = 1 + vResult 
    End If 
    Next rCell 
End If 
ColorFunction = vResult 
End Function 

Antwort

3

Im Anschluss an von @Jeeped und @Comintern ...

Dies funktioniert für mich - ein vereinfachtes Beispiel:

Function WrapCountReds(rRange) 
    WrapCountReds = rRange.Parent.Evaluate("CountReds(" & _ 
          rRange.Address(False, False) & ")") 
End Function 

'can't call this directly from a worksheet but can be called via evaluate 
Public Function CountReds(rRange As Range) 

    Dim rCell As Range 
    Dim vResult 

    For Each rCell In rRange 
     If rCell.DisplayFormat.Interior.ColorIndex = 3 Then 
      vResult = 1 + vResult 
     End If 
    Next rCell 

    CountReds = vResult 
End Function 

Arbeitsblattverwendungsbeispiel:

=WrapCountReds("A1:A100") 
+1

Interessant. Ich hätte nie gedacht, Evaluate als Wrapper-Funktion zu verwenden. – Comintern

+1

@Comintern - verwandt: https://Stackoverflow.com/questions/23433096/using-a-udf-in-excel-to-update-the-heet/23437280#23437280 –