Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Einträge in gefilterter Liste ohne Duplikate
#1
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:

    
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
Antworten Top
#2
P u s h
Gruß Günter
Jeder Fehler erscheint unglaublich dumm, wenn andere ihn begehen.
angebl. von Georg Christoph Lichtenberg (1742-1799)
Antworten Top
#3
Hallöchen,

wie sehen denn die bisherigen Versuche aus?
Bei der Formel
=SUMMENPRODUKT(TEILERGEBNIS(9;INDIREKT("B"&ZEILE(2:99)))*(VERGLEICH(B2:B99&"";B2:B99&"";0) =ZEILE(1:98)))
solltest Du erst mal schauen, wie Du das INDIREKT gesondert berechnest und die Formel dann mit dem Ergebnis evaluierst.
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste