Microsoft Excel

Herbers Excel/VBA-Archiv

Teilergebnis 103 – Anzahl2 mit Bedingungen


Betrifft: Teilergebnis 103 – Anzahl2 mit Bedingungen von: KK
Geschrieben am: 27.04.2017 19:33:59

Hallo an alle hier,
ich arbeite mit Excel 2010 auf Win7 und stehe als ewiger Makro-Laie wieder einmal vor einem für mich schier unlösbaren Problem.

Das folgende Makro zur Erzeugung der Funktion „zählenspezial“ habe ich einem Forum entnommen – leider ist derjenige, der das erstellt hat dort nicht mehr registriert ….

Public Function zählenSpezial(Bereich As Range) As Long
Dim zelle As Range
Dim dic

Set dic = CreateObject("scripting.dictionary")

For Each zelle In Bereich
If Not zelle.Height = 0 And Not zelle.Value = "" And Not dic.exists(zelle.Value) Then
dic.Add zelle.Value, ""
End If
Next zelle

zählenSpezial = dic.Count
End Function
Mit dieser Funktion „zählenspezial“ lässt sich Anzahl2 nur eingeblendeter Zellen (Teilergebnis 103 = durch Autofilter oder durch manuell ausgeblendete Zellen) unter folgenden Bedingungen: ohne doppelte Werte, ohne leere Werte.

In Anlehnung an diese Funktion bräuchte ich jetzt noch für die gleiche Tabelle folgende Funktionen:

1) zählenspezial1
Anzahl2 wie oben unter folgenden Bedingungen:
mit doppelten Werten, ohne leere Werte (““)

2) zählenspezial2
Anzahl2 wie oben unter folgenden Bedingungen:
mit doppelten Werten, ohne leere Werte (““), ohne Werte „nein“

3) zählenspezial3
Anzahl2 wie oben unter folgenden Bedingungen:
mit doppelten Werten, ohne leere Werte (““), ohne Werte „???“

4) zählenspezial4
Anzahl2 wie oben unter folgenden Bedingungen:
mit doppelten Werten, mit Werten „ja“

Vielleicht findet sich hier jemand, der mir bei der Lösung helfen kann. Bin für jeden Ratschlag dankbar.

Grüße
Konrad

  

Betrifft: AW: Teilergebnis 103 – Anzahl2 mit Bedingungen von: ransi
Geschrieben am: 28.04.2017 09:59:15

hallo,

Teste mal diese 3:

' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

'1) zählenspezial1
'Anzahl2 wie oben unter folgenden Bedingungen:
'mit doppelten Werten, ohne leere Werte (““)
'
'2) zählenspezial2
'Anzahl2 wie oben unter folgenden Bedingungen:
'mit doppelten Werten, ohne leere Werte (““), ohne Werte „nein“
'
'3) zählenspezial3
'Anzahl2 wie oben unter folgenden Bedingungen:
'mit doppelten Werten, ohne leere Werte (““), ohne Werte „???“
'
'4) zählenspezial4
'Anzahl2 wie oben unter folgenden Bedingungen:
'mit doppelten Werten, mit Werten „ja“

Function ZählenSpezial1(bereich As Range) As Long
    Dim zelle As Range
    Dim mydic
    Dim L As Long
    Set mydic = CreateObject("scripting.dictionary")
    For Each zelle In bereich
        If zelle.Height <> 0 Then
            If zelle.Value <> "" Then
                L = L + 1
                mydic(L) = 0
            End If
        End If
    Next zelle
    ZählenSpezial1 = mydic.Count
End Function


Function ZählenSpezial2(bereich As Range) As Long
    Dim zelle As Range
    Dim mydic
    Dim L As Long
    Set mydic = CreateObject("scripting.dictionary")
    
    For Each zelle In bereich
        If zelle.Height <> 0 Then
            If zelle.Value <> "" Then
                If zelle.Value <> "nein" Then
                    L = L + 1
                    mydic(L) = 0
                End If
            End If
        End If
    Next zelle
    ZählenSpezial2 = mydic.Count
End Function


Function ZählenSpezial3(bereich As Range) As Long
    Dim zelle As Range
    Dim mydic
    Dim L As Long
    Set mydic = CreateObject("scripting.dictionary")
    
    For Each zelle In bereich
        If zelle.Height <> 0 Then
            If zelle.Value <> "" Then
                If zelle.Value <> "???" Then
                    L = L + 1
                    mydic(L) = 0
                End If
            End If
        End If
    Next zelle
    ZählenSpezial3 = mydic.Count
End Function



Zählenspezial 4 hab ich nicht verstanden.
Sollen da nur Zellen mit "ja" gezählt werden?

ransi


  

Betrifft: AW: Teilergebnis 103 – Anzahl2 mit Bedingungen von: KK
Geschrieben am: 28.04.2017 15:20:06

Hallo ransi,
vielen herzlichen Dank für deine perfekte Lösung!

zu Zählenspezial4:
richtig, es sollen nur Zellen mit "ja" gezählt werden - müßte der Code dann so aussehen?

Function ZählenSpezial4(bereich As Range) As Long
    Dim zelle As Range
    Dim mydic
    Dim L As Long
    Set mydic = CreateObject("scripting.dictionary")
    
    For Each zelle In bereich
        If zelle.Height <> 0 Then
            'If zelle.Value <> "" Then
                If zelle.Value = "ja" Then
                    L = L + 1
                    mydic(L) = 0
                End If
            'End If
        End If
    Next zelle
    ZählenSpezial4 = mydic.Count
End Function

Noch eine Bitte habe ich - nachdem deine Codes so sauber strukturiert sind:
könntest du den ursprünglichen Code für zählenSpezial ebenso sauber strukturiert als ZählenSpezial0 darstellen?

Grüße
Konrad


Beiträge aus den Excel-Beispielen zum Thema "Teilergebnis 103 – Anzahl2 mit Bedingungen"