Eine typische onur Antwort...
02.04.2019 22:30:15
EtoPHG
aber man kann nicht eine einzige UDF für alle möglichen Fälle schreiben.
Warum denn nicht, onur? Das ist genau dein Programmierstil: Nur nicht generisch denken! Nur nicht über den Tellerrand hinausschauen! "Hier, so kannst Du es machen" und den armen Anfrager allein lassen.
Man muss doch nur eine Referenzzelle als Basis für den auszuwertenden Bereich bestimmen.
Nämlich so:
Option Explicit
Enum computeType
csCount = 0 ' counts occurence
csSum = 1 ' sum of cell occurence
csAverage = 2 ' average of cells
End Enum
Public Function computeSpecial(ByRef Matrix As Range, _
ByRef ReferenceCell As Range, _
Optional computeType As Integer = 0) As Double
Application.Volatile
Dim rC As Range
Dim dCount As Double
Dim dSum As Double
For Each rC In Matrix
If rC.Font.Color = ReferenceCell.Font.Color And _
rC.Font.Bold = ReferenceCell.Font.Bold And _
rC.Font.Italic = ReferenceCell.Font.Italic And _
rC.Interior.Color = ReferenceCell.Interior.Color Then
dCount = dCount + 1
dSum = dSum + Val(rC)
End If
Next
Select Case computeType
Case csCount
computeSpecial = dCount
Case csSum
computeSpecial = dSum
Case csAverage
If dCount > 0 Then computeSpecial = dSum / dCount
End Select
End Function
Also Siegfried in Zelle B4 und nach rechts kopieren.
=computespecial($B$5:$L$60;B3)
P.S. Statt nur zählen, kann man mit dieser UDF ggf. auch Summen oder Mittelwerte errechnen.
Gruess Hansueli