Aktuell kann es Probleme bei der Anmeldung mit dem Chrome oder Edge Browser geben. Ihr müsstet in die Einstellungen des Browsers gehen und Cache, Cookies und sofern vorhanden, gespeicherte Passwörter vom CEF löschen oder alternativ auf einen anderen Browser ausweichen. Ursache sind vermutlich kürzliche Browserupdates. x

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
Top
#2
P u s h
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)
Top


Gehe zu:


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