Clever-Excel-Forum

Normale Version: ZählenWenn
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Guten Abend,

ich suche eine Möglichkeit, in mehreren Tabellen, die alle Unterschiedliche Namen haben, aber alle in einer Datei sind, zu Zählen wie oft ein Wert in einer bestimmten Spalte vorkommt.

Natürlich geht das in dem ich in der Formel immer addiere

ZählenWenn(Tabelle;Bereich;Kriterium)+ZählenWenn(Tabelle2;Bereich;Kriterium)+ZählenWenn(Tabelle3;Bereich;Kriterium) etc.

Aber geht das ganze auch einfacher (eleganter).

vba ist sicherlich auch eine Möglichkeit, aber die gelingt mir gerade auch nicht.

Wäre schön, wenn ich hier eine Lösung bekommen könnte


Bernd
Hallo Steve,

da habe ich genau das Problem, die Tabellen haben alle unterschiedliche Namen und fangen nicht alle mit "Tabelle" an.

Dann steht der Suchbegriff halt immer nur in der Spalte "C" und das zum Glück in allen Tabellen :=)



Bernd
Hi,


wer lesen kann...


Zitat:Für nicht durchnummerierte Tabellen siehe die Summenformel

Nr. 234
[url=http://excelformeln.herber.de/pages/Flexible_Alternative_zur_Summierung_ueber_mehrere_Tabellen.html][/url]
Hey, nochmal Danke an Euch beide. Ich bin leider seit gestern unterwegs und komme erst Mittwoch dazu mir das genauer an zu schauen. Ich werde mich dann nochmal melden.

Aber ich würde das vielleicht doch noch lieber in vba machen, da ich das Ergebnis vielleicht in einem Userform einbetten will.

Hier mal mein Ansatz:

Code:
Dim adr As Range
Dim Anz As Integer
Set adr = Worksheets("Januar").Range("C1:C40")
Anz = Application.WorksheetFunction.CountIf(adr, "Socken")


Nun dazu die Fragen

1. Wie kann man das in ein Array einbauen (die Tabellen heißen von Januar bis Februar)
2. Es sind nicht nur Socken sondern mehrere bekannte Artikel
3. und es sollen nur die Freitage gezählt werden

Das Datum ist in den Spalten A und B abgebildet.

In A ist der Tag und in B das Datum wie folgt abgebildet:  01.04.2023

Wenn es einfacher geht mit einer Formel auch gerne, weil die kann ich in einer weitern Tabelle hinterlegen und dann im UserForm abbilden, wenn ich das richtig sehe, oder?




Merci 
Bernd
Hi,

das könnte man z.B. so machen:
Code:
Dim a As Variant
Dim b As Variant
Dim x As Variant
Dim y As Variant
Dim Anz As Long
a = Array("Januar", "Februar")
b = Array("Socken", "Hemden", "Hosen")
For Each x In a
    With Worksheets(x)
        For Each y In b
            Anz = Anz + Application.WorksheetFunction.CountIfs(.Range("C1:C40"), y, .Range("A1:A40"), "Fr")
        Next y
    End With
Next x
Debug.Print Anz

Wenn ich mir allerdings so deine Probleme anschaue, solltest du mal über deinen Dateiaufbau nachdenken.

Daten werden in Listen erfasst. Ein Datensatz ist eine Zeile. https://www.online-excel.de/excel/singsel.php?f=52

Gleichartige Daten gehören in ein Tabellenblatt. Notfalls macht man eine weitere Spalte, die den bisherigen Blattnamen hat. https://www.excel-ist-sexy.de/mehrere-ta...uswertung/

Unter Berücksichtigung dieser Vorgaben werden Auswertungen wesentlich einfacher.
Hey HKindler,

habe Deine Antwort gerade erst gelesen. Und ich war wohl auf dem Richtigen weg 

Mein erster Versuch:
Code:
Dim anz As Long

anz = 0

   'Ein Variant Array deklarieren
   Dim strNamen(1 To 4) As String

   'das Array füllen
   strNamen(1) = "Januar"
   strNamen(2) = "Februar"
   strNamen(3) = "März"
   strNamen(4) = "April"

   'deklarieren einer Variant-Variable, die das Array-Element enthält
   Dim Element As Variant

   'Das gesamte Array durchlaufen
   For Each Element In strNamen
     
     anz = anz + WorksheetFunction.CountIf(Range("C1:C40"), "Socken")
     
     
     
   Next Element

  MsgBox anz

Nun werde ich Deines noch dazu Bauen (vor allem mit dem Freitag). Dann werde ich mich nochmal melden.

Aber super Dank schonmal an alle


Bernd

Hallo nochmal,

da habe ich nun aber noch ein kleines Problem   

Den Wochentag setze ich um durch ein Formatierung ("TTTT") . wie kann ich das nun abfragen?

Code:
Anz = Anz + Application.WorksheetFunction.CountIfs(.Range("C1:C40"), y, .Range("A1:A40"), "Fr")

hier muss ich irgendwie das "Fr" ersetzten, aber wie.

Danke
Bernd
Hi,

dann musst du dir entweder das "Fr" in der Zelle nicht durch eine entsprechende Formatierung des Datums, sondern durch eine Formel holen: Also statt =B1 verwendest du =TEXT(B1;"TTT").
Oder du verwendest in VBA statt CountIfs ein entsprechendes SumProduct. Was aber nicht so ganz einfach sein dürfte.

Aber nochmals:
Du solltest dir dringend einen anderen Dateiaufbau überlegen!
Es war noch nie gut, ein neues Blatt anzufangen, nur weil sich das Datum ändert. Ich habe dir die Links in meinem ersten Post nicht aus Spaß an der Freude rausgesucht.
Du hast natürlich recht, aber diese "dusselige" Tabelle gibt es nun schon so viele Jahre so und soll auch nicht verändert werden (nicht meine Idee und Auffassung) aber nun werde ich es ebend umformatieren und dann sollte es klappen


Danke
Bernd