Funktion Sum mit CountIf

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
MsgBox
Bild

Betrifft: Funktion Sum mit CountIf
von: Chris
Geschrieben am: 31.05.2015 15:05:51

Hallo zusammen,
ich möchte innerhalb eines Codes bestimmte Werte in einer Spalte zählen lassen und das Ergebnis dann in einer Variable speichern.
Leider weiss ich nicht, wie ich das syntaktisch richtig schreibe. Hier meine ersten Versuche, _
damit ihr wisst was ich meine:


Dim adr As Range
Dim Anz As Integer
Set adr = Worksheets("AusgabeRotation2").Cells(4, MaxSpalteAusgabe)
Anz = Application.WorksheetFunction.Sum(CountIf(adr, "Station AO", "Station B&B"))
MsgBox Anz
End Sub

Der Code soll also in dem angegebenen Bereich nach den Werten Station AO und Station B&B suchen und die Anzahl der gefundenen Stellen dann in der Variable Anz speichern.
Danke für eure Hilfe und beste Grüße
Chris

Bild

Betrifft: AW: Funktion Sum mit CountIf
von: Sepp
Geschrieben am: 31.05.2015 16:03:49
Hallo Chris,

ANZ = Application.WorksheetFunction.CountIf(adr, "Station AO") + Application.WorksheetFunction.CountIf(adr, "Station B&B")
Gruß Sepp


Bild

Betrifft: oder kompakter
von: Sepp
Geschrieben am: 31.05.2015 16:06:09

With Application
  ANZ = .CountIf(adr, "Station AO") + .CountIf(adr, "Station B&B")
End With

Gruß Sepp


Bild

Betrifft: AW: oder kompakter
von: Chris
Geschrieben am: 31.05.2015 17:33:17
Hallo ihr beiden,
danke für eure Hilfe.
Habe jetzt noch ein paar andere Suchkriterien hinzugefügt und nun bekomme ich einen Syntaxfehler. Habe zuvor den Hinweis von Excel bekommen, das ein Bindestrich ( _ ) oder ein geschlossene Klammer erwartet wird. Deshalb habe ich hier noch eine zweite variable Anz2 hinzugefügt da ich dachte es sind zuviel Zeichen.
Nun ist aber dieser blöde Syntaxfehler da :(
Hier der Code dazu:

Set adr = Worksheets("AusgabeRotation").Range(Cells(4, 2), Cells(MaxZeileAusgabe1a, 2))
With Application
  Anz1 = .CountIf(adr, "Station AO") + .CountIf(adr, "Station B&B") + .CountIf(adr, "Station Q- _
Tor") + .CountIf(adr, "Station Libero") + .CountIf(adr, "Station Unterstützer Rolle") + .CountIf(adr, "Station Unterstützer HL6)
  Anz2 = .CountIf(adr, "Station Unterstützer HL7)


Bild

Betrifft: AW: oder kompakter
von: Daniel
Geschrieben am: 31.05.2015 17:45:44
Hi
pack nicht alles in eine Zeile, das wird zu unübersichtlich.
wenn du jedes .CountIf in eine eigne Zeile schreibst, wirds zwar etwas länger, aber deutlich übersichtlicher.
ausserdem, dass Worksheet muss vor jedem Zellbezug (Range, Cells, Columns, Rows) stehen, das gilt auch für die Cells innerhalb der Range!!!!
(hier hilft zum verkürzen die WITH-Klammer):

With Worksheets("AusgabeRotation")
Set adr = .Range(.Cells(4, 2), .Cells(MaxZeileAusgabe1a, 2))
End With
With Application.Worksheetfunction
  Anz1 = 0
  Anz1 = Anz1 + .CountIf(adr, "Station AO")
  Anz1 = Anz1 + .CountIf(adr, "Station B&B")
  Anz1 = Anz1 + .CountIf(adr, "Station Q-Tor")
  Anz1 = Anz1 + .CountIf(adr, "Station Libero")
  Anz1 = Anz1 + .CountIf(adr, "Station Unterstützer Rolle")
  Anz1 = Anz1 + .CountIf(adr, "Station Unterstützer HL6)
  Anz2 = .CountIf(adr, "Station Unterstützer HL7)
End With
ist zwar etwas länger, aber um welten Übersichtlicher und weniger Fehleranfällig.
Gruß Daniel

Bild

Betrifft: AW: oder kompakter
von: Daniel
Geschrieben am: 31.05.2015 18:00:36
Ausserdem sieht man dann schneller die Optimierungsmöglichkeiten:
die Summierung kannst du auch in einer Schleife erstellen:

With Application.Worksheetfunction
For each X in Array("AO", "B&B", "Q-Tor", "Liebero", "Unterstützer Rolle", "Station Unterstü _
tzer HL6")
    Anz1 = Anz1 + .CountIf(adr, "Station " & X)
Next
End with
Gruß Daniel
ps: Achtung, der Editor dieses Forums fügt bei zu langen Codezeilen (aus sicht des Editors) eigenmächtig die Zeilenumbrüche "_" ein und dies oft an unpassender Stelle, z.B. mitten im Textstring.
Diese Zeilenumbrüche müssen entfernt werden, wenn man den Code aus dem Forum kopiert.
pps: der Schreibfehler in meinem letzten Beitrag sollte sofort auffallen ;-) und damit die Vorteile der mehrzeiligen Schreibweise unterstreichen ;-)

Bild

Betrifft: AW: oder kompakter
von: Chris
Geschrieben am: 31.05.2015 18:52:33
Mensch war das auch bescheuert mit den "" (Danke Sepp) und das Abkürzen ist eine sehr gute Hilfe und zeigt den Fehler auch gleich viel schneller. Danke Daniel
Da braucht es noch einiges an Routine...
Beste Grüße

Bild

Betrifft: AW: oder kompakter
von: Sepp
Geschrieben am: 31.05.2015 17:46:40
Hallo Chris,
die "" müssen schon passen, sonst kann es nicht funktionieren!

With Application
  anz1 = .CountIf(adr, "Station AO") + .CountIf(adr, "Station B&B") + _
    .CountIf(adr, "Station Q-Tor") + .CountIf(adr, "Station Libero") + _
    .CountIf(adr, "Station Unterstützer Rolle") + .CountIf(adr, "Station Unterstützer HL6") + _
    .CountIf(adr, "Station Unterstützer HL7")
End With

Und poste bitte immer einen vollständigen Codeabschnitt, es ist lästig, wenn man immer alles nachbauen muss.
Gruß Sepp


Bild

Betrifft: AW: Funktion Sum mit CountIf
von: Daniel
Geschrieben am: 31.05.2015 16:26:56
noch ein vermuteter Fehler:
Set adr = Worksheets("AusgabeRotation2").Cells(4, MaxSpalteAusgabe)
weist der Variablen adr nur eine einzige Zelle in der zeile 4 zu.
wenn du in der ganzen Spalte zählen willst, dann

Set adr = Worksheets("AusgabeRotation2").Colums(MaxSpalteAusgabe)
Gruß Daniel

 Bild

Beiträge aus den Excel-Beispielen zum Thema "Funktion Sum mit CountIf"