16.08.2017, 13:59
Guten Tag,
Grundlage ist die Formel
aus http://www.herber.de/excelformeln und bitte suchen ... Einträge in gefilterter Liste ohne Duplikate zählen (339)
=SUMMENPRODUKT(TEILERGEBNIS(3;INDIREKT("B"&ZEILE(2:99)))*(VERGLEICH(B2:B99&"";B2:B99&"";0) =ZEILE(1:98)))
Ich habe die Formel so angepasst, dass diese auch bei einfügen von Spalten vor der Summenspalte funktioniert
Die Summenspalte ist als Bereich SummenSpalte definiert!
Formel:
=SUMMENPRODUKT(TEILERGEBNIS(9;INDIREKT(LINKS(ADRESSE(1;SPALTE(SummenSpalte);4);
LÄNGE(ADRESSE(1;SPALTE(SummenSpalte);4))-1)&ZEILE(INDIREKT(2&":"&ANZAHL2($A:$A)))))*(VERGLEICH(SummenSpalte&"";SummenSpalte&"";0) =ZEILE(INDIREKT(1&":"&ANZAHL2($A:$A)-1))))
Beim Versuch diese Formel mit Evaluate auszuwerten bin ich bisher gescheitert!
Alternativ habe ich einen eine Code geschrieben:
Code eingefügt mit: Excel Code Jeanie
Leider ist der Code bei Tabellen mit vielen Zeilen sehr langsam, während die Formel
=SUMMENPRODUKT(TEILERGEBNIS(9;INDIREKT(LINKS(ADRESSE(1;SPALTE(SummenSpalte);4);LÄNGE(ADRESSE(1;SPALTE(SummenSpalte);4))-1)&ZEILE(INDIREKT(2&":"&ANZAHL2($A:$A)))))*(VERGLEICH(SummenSpalte&"";SummenSpalte&"";0) =ZEILE(INDIREKT(1&":"&ANZAHL2($A:$A)-1))))
oder
=SUMMENPRODUKT(TEILERGEBNIS(9;INDIREKT("B"&ZEILE(2:99)))*(VERGLEICH(B2:B99&"";B2:B99&"";0) =ZEILE(1:98)))
sehr schnell ist.
Wie muss ich die Formeln =SUMMENPRODUKT(TEILERGEBNIS(9;INDIREKT("B"&ZEILE(2:99)))*(VERGLEICH(B2:B99&"";B2:B99&"";0) =ZEILE(1:98)))
anpassen damit sie mit Evaluate auswertbar ist??
Wobei die Summenspalte flexibel bleiben muss!
Besten Dank für Tipps
Gruß Rolf
Grundlage ist die Formel
aus http://www.herber.de/excelformeln und bitte suchen ... Einträge in gefilterter Liste ohne Duplikate zählen (339)
=SUMMENPRODUKT(TEILERGEBNIS(3;INDIREKT("B"&ZEILE(2:99)))*(VERGLEICH(B2:B99&"";B2:B99&"";0) =ZEILE(1:98)))
Ich habe die Formel so angepasst, dass diese auch bei einfügen von Spalten vor der Summenspalte funktioniert
Die Summenspalte ist als Bereich SummenSpalte definiert!
Formel:
=SUMMENPRODUKT(TEILERGEBNIS(9;INDIREKT(LINKS(ADRESSE(1;SPALTE(SummenSpalte);4);
LÄNGE(ADRESSE(1;SPALTE(SummenSpalte);4))-1)&ZEILE(INDIREKT(2&":"&ANZAHL2($A:$A)))))*(VERGLEICH(SummenSpalte&"";SummenSpalte&"";0) =ZEILE(INDIREKT(1&":"&ANZAHL2($A:$A)-1))))
Beim Versuch diese Formel mit Evaluate auszuwerten bin ich bisher gescheitert!
Alternativ habe ich einen eine Code geschrieben:
Sub test_aufruf()
Dim summe As Double
summe = FilterSummeOhneDup(ThisWorkbook.ActiveSheet, 3, 2, 1, 83, 84)
End Sub
Function FilterSummeOhneDup(wksZiel As Worksheet, lStartRow As Long, lFilterZeile As Long, lColumnCount As Long, _
lSumColumnFilter As Long, lSummeFilter As Long) As Double
Dim i As Long, iX As Long, iZ As Long, zCount As Long, zA As Long
Dim vSummeFilter As Variant, SumZaehler As Long
Dim vArrayFilter As Variant, vArraySumme As Variant, lRowAbzug As Long
Dim a As Range
On Error Resume Next
With wksZiel
i = .UsedRange.SpecialCells(xlCellTypeLastCell).Row
ReDim vArrayFilter(i - lStartRow)
ReDim vArraySumme(i - lStartRow)
ReDim vZaehler(i * 2, 1)
If i > 1 Then
If wksZiel.FilterMode Then
zCount = .Range(.Cells(lFilterZeile, lColumnCount), .Cells(lFilterZeile, i)) _
.SpecialCells(xlCellTypeVisible).SpecialCells(xlCellTypeConstants).Count
For iX = lStartRow To i
If .Rows(iX).EntireRow.Hidden = False Then
vArrayFilter(iX - lStartRow) = .Cells(iX, lSumColumnFilter)
vArraySumme(iX - lStartRow) = .Cells(iX, lSummeFilter)
End If
Next iX
Else
zCount = i
For iX = lStartRow To i
vArrayFilter(iX - lStartRow) = .Cells(iX, lSumColumnFilter)
vArraySumme(iX - lStartRow) = .Cells(iX, lSummeFilter)
Next iX
' Stop
End If
End If
End With
zA = 0
vSummeFilter = 0
For iX = 0 To UBound(vArrayFilter)
zA = zA + 1
If zA > zCount Then
' Stop
GoTo Weiter
End If
vZaehler(iZ, 0) = vArrayFilter(iX)
vZaehler(iZ, 1) = 1
SumZaehler = 0
For iZ = 0 To iZ
If vZaehler(iZ, 0) = vArrayFilter(iX) Then
SumZaehler = vZaehler(iZ, 1) + SumZaehler
'Exit For
End If
Next iZ
If SumZaehler = 1 Then
vSummeFilter = vSummeFilter + (vArraySumme(iX) * 1)
End If
iZ = iZ + 1
Next iX
Weiter:
FilterSummeOhneDup = Round(vSummeFilter, 4)
End Function
Code eingefügt mit: Excel Code Jeanie
Leider ist der Code bei Tabellen mit vielen Zeilen sehr langsam, während die Formel
=SUMMENPRODUKT(TEILERGEBNIS(9;INDIREKT(LINKS(ADRESSE(1;SPALTE(SummenSpalte);4);LÄNGE(ADRESSE(1;SPALTE(SummenSpalte);4))-1)&ZEILE(INDIREKT(2&":"&ANZAHL2($A:$A)))))*(VERGLEICH(SummenSpalte&"";SummenSpalte&"";0) =ZEILE(INDIREKT(1&":"&ANZAHL2($A:$A)-1))))
oder
=SUMMENPRODUKT(TEILERGEBNIS(9;INDIREKT("B"&ZEILE(2:99)))*(VERGLEICH(B2:B99&"";B2:B99&"";0) =ZEILE(1:98)))
sehr schnell ist.
Wie muss ich die Formeln =SUMMENPRODUKT(TEILERGEBNIS(9;INDIREKT("B"&ZEILE(2:99)))*(VERGLEICH(B2:B99&"";B2:B99&"";0) =ZEILE(1:98)))
anpassen damit sie mit Evaluate auswertbar ist??
Wobei die Summenspalte flexibel bleiben muss!
Besten Dank für Tipps
Gruß Rolf