Hallo Fischer,
Es wundert mich dass die Formel bei dir funktoiniert. m.W. muss für die Suche in Datumsbereichen das Kriteriendatum in eine laufende Zahl umgewandelt werden. Das geht mit Wert(G8). Wenns bei dir aber auch ohne geht, kannst du das natürlich auch weglassen.
Außerdem solltest du nur die Bereiche benennen, die du auch wirklich summieren willst. Wenn du mehrere Formeln verwendest und immer die kompletten Spalten angibst, kann Excel sehr schnell sehr langsam bei der Formelberechnung werden. Dann wartest du u.U. Minuten auf das Ergebnis. Mach also statt $F:$F lieber $F$8:$F$1000 dann hast du immer noch genug Platz für zukünftige Eingaben. Nur wenn du bei der Dateneingabe die Zeile 1000 überschreitest, musst du die Formel nochmal anpassen. Beachte bei der Formeleingabe, dass auch die anderen Bereiche der Formel die selben Zeilenangaben haben müssen. also $A$8:$A$1000 und $B$8:$B$1000, sonst kommt evtl. ein falsches Ergebnis heraus.
Soviel zur Nutzung der SummeWenns-Formel. Nun zu deiner Frage: Ja es ist möglich. Ich hab dir mal einen entsprechenden Code geschrieben. Der gehört in ein allgemeines Modul (z.B. Modul1). Anschließend kannst du eine beliebige Summewenns()-Formel verwenden. Sie heißt nun lediglich SummewennsText(). Probier z.B. diese Formel: =summewennstext('MTA-KTA'!$C$8:$C$1000;'MTA-KTA'!$A$8:$A$1000;"<="&WERT($G8);'MTA-KTA'!$B$8:$B$1000;">"&WERT($G8))
Function SummewennsText(Rueckgabebereich As Range, ParamArray Kriterien()) As String
Dim c As Range, c2 As Range, i As Long, x As Long, s As String, delimiter As String, anzKrit As Long
On Error GoTo Ende
Application.Volatile
anzKrit = UBound(Kriterien)
If anzKrit Mod 2 = 0 Then delimiter = Kriterien(anzKrit) Else delimiter = ", "
For Each c In Rueckgabebereich.Cells
x = 0
For i = 0 To anzKrit Step 2
If TypeName(Kriterien(i)) = "Range" Then
Set c2 = Kriterien(i).Cells(c.Row - Rueckgabebereich.Row + 1)
If Left(Kriterien(i + 1), 2) = ">=" Then
If c2.Value2 >= CDbl(Right(Kriterien(i + 1), Len(Kriterien(i + 1)) - 2)) Then x = x + 1
ElseIf Left(Kriterien(i + 1), 2) = "<=" Then
If c2.Value2 <= CDbl(Right(Kriterien(i + 1), Len(Kriterien(i + 1)) - 2)) Then x = x + 1
ElseIf Left(Kriterien(i + 1), 2) = "<>" Then
If c2.Value2 <> CDbl(Right(Kriterien(i + 1), Len(Kriterien(i + 1)) - 2)) Then x = x + 1
ElseIf Left(Kriterien(i + 1), 1) = ">" Then
If c2.Value2 > CDbl(Right(Kriterien(i + 1), Len(Kriterien(i + 1)) - 1)) Then x = x + 1
ElseIf Left(Kriterien(i + 1), 1) = "<" Then
If c2.Value2 < CDbl(Right(Kriterien(i + 1), Len(Kriterien(i + 1)) - 1)) Then x = x + 1
Else
If c2.Value = Kriterien(i + 1) Then x = x + 1
End If
End If
Next i
If x = Int((anzKrit + 1) / 2) Then s = s & c.Value & delimiter
Next c
SummewennsText = Left(s, Len(s) - Len(delimiter))
Ende:
End Function
PS: wenn du am Ende noch einen zusätzlichen Parameter als Text angiebst, kannst du das Trennzeichen ändern. Probiere z.B. =summewennstext('MTA-KTA'!$C$8:$C$1000;'MTA-KTA'!$A$8:$A$1000;"<="&WERT($G8);'MTA-KTA'!$B$8:$B$1000;">"&WERT($G8);"/")
Gruß Mr. K.
|