Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1912to1916
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA CountIf

VBA CountIf
16.01.2023 12:46:57
Paul
Hallo zusammen,
ich stehe mal wieder vor einem Problem.
Ich bekomme 1x im Monat eine Excel Datei, für die ich gerne ein Skript schreiben würde. Das Skript soll Daten aus der Tabelle erfassen, und zusammengefasst auf einem zweiten Tabellenblatt speichern.
1)

Sub Autofilter()
Set ZielSheet = Sheets.Add(after:=Tabelle1)
ZielSheet.Name = "Infos_zu_Datensatz" 
2) Nun meine erste Frage: Ich würde gerne eine eine CountIf Funktion nutzen, um zu zählen wie viele Elemente es allgemein in Spalte C gibt, und außerdem wie viele Elemente jeweils mit dem Inhalt "x" und "y" in Spalte C enthalten sind.
--> Output in der Tabelle 2 soll dann in etwa sein:
Gesamt: 300
X: 170
Y:130
3) Eine Auflistung welche verschiedenen Typen es in Spalte D gibt.
Beispiel Inhalte Spalte D: Peter,Peter,Dieter,Tim
--> Output Typen: Peter,Dieter,Tim (doppelte sollen ignoriert werden, und nur 1x in dem Output auftauchen)"
Vielen Dank im Voraus!

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Teillösung
16.01.2023 13:16:08
MCO
Hallo!
mit VBA würde die funktion für alle Datensätze COUNTA() heißen
mit Bedingung: SUM(--(C:C="X"))
Gruß, MCO
AW: VBA CountIf
16.01.2023 14:06:23
ChrisL
Hi
Für grosse Datenmengen könnte man ggf. noch etwas optimieren, aber wahrscheinlich reicht...

Sub t()
Dim QuellSheet As Worksheet, ZielSheet As Worksheet
Dim i As Long, Zaehler As Long
Set QuellSheet = ActiveSheet
Set ZielSheet = Sheets.Add(after:=Tabelle1)
ZielSheet.Name = "Infos_zu_Datensatz"
With QuellSheet
ZielSheet.Range("A1") = WorksheetFunction.CountA(.Columns(3))
ZielSheet.Range("A2") = WorksheetFunction.CountIf(.Columns(3), "x")
ZielSheet.Range("A3") = WorksheetFunction.CountIf(.Columns(3), "y")
For i = 1 To .Cells(.Rows.Count, 4).End(xlUp).Row
If WorksheetFunction.CountIf(.Range("D1:D" & i), .Cells(i, 4)) = 1 Then Zaehler = Zaehler + 1
Next i
ZielSheet.Range("A4") = Zaehler
End With
End Sub
cu
Chris
Anzeige
AW: VBA CountIf
16.01.2023 14:34:49
Paul
Hallo ChrisL,
vielen Dank für die schnelle Hilfe. Der erste Teil klappt genau wie ich es mir vorgestellt habe vielen Dank. Allerdings gibt mir die Schleife ja quasi "nur" die Anzahl der verschiedenen Typen wieder. Ich hatte mir gewünscht, dass hier die Strings (doppelte entfernt) aufgelistet werden.
Daten in der Spalte: Peter, Peter, Peter, Dieter,Paul,Tim
--> Zielsheet soll dann nur Peter, Dieter,Paul,Tim angezeigt werden. Danke

For i = 1 To .Cells(.Rows.Count, 4).End(xlUp).Row
If WorksheetFunction.CountIf(.Range("D1:D" & i), .Cells(i, 4)) = 1 Then Zaehler = Zaehler + 1
Next i
ZielSheet.Range("A4") = Zaehler

Anzeige
AW: VBA CountIf
16.01.2023 14:39:13
ChrisL
Hi
Dann z.B.

Sub t()
Dim QuellSheet As Worksheet, ZielSheet As Worksheet
Dim i As Long
Set QuellSheet = ActiveSheet
Set ZielSheet = Sheets.Add(after:=Tabelle1)
ZielSheet.Name = "Infos_zu_Datensatz"
With QuellSheet
ZielSheet.Range("A1") = WorksheetFunction.CountA(.Columns(3))
ZielSheet.Range("A2") = WorksheetFunction.CountIf(.Columns(3), "x")
ZielSheet.Range("A3") = WorksheetFunction.CountIf(.Columns(3), "y")
For i = 1 To .Cells(.Rows.Count, 4).End(xlUp).Row
If WorksheetFunction.CountIf(.Range("D1:D" & i), .Cells(i, 4)) = 1 Then _
ZielSheet.Cells(.Rows.Count, 2).End(xlUp).Offset(1) = .Cells(i, 4)
Next i
End With
End Sub
cu
Chris
Anzeige
AW: VBA CountIf
18.01.2023 07:26:38
Paul
Hallo Chris,
danke für dein Skript. Ich konnte das Skript jetzt für meine Excel Reports einsetzten. Leider stehe ich noch vor einem kleinen Problem.

For tt = 2 To .Cells(.Rows.count, 50).End(xlUp).Row
If WorksheetFunction.CountIf(.Range("AX1:AX" & tt), .Cells(tt, 50)) = 1 Then _
ZielSheet.Cells(.Rows.count, 17).End(xlUp).Offset(1) = .Cells(tt, 50)
Next tt
Und zwar gibt es bei mir bei den Excel Reports die Spalte "Bemerkungen", welche leider nicht immer in Spalte 50 zu finden ist, sondern auch mal in spalte 54 (Abhängig von anderen vorausgehenden Spalten)
Gibt es die Möglichkeit das Skript so anzupassen, dass in den Spaltenüberschriften nach "Bermerkungen" gesucht wird, und diese Spaltennummer dann in das o.g. Skript einzubauen?
Das wäre wirklich super, und würde das Skript für mich perfekt machen.
Danke und LG
Anzeige
AW: VBA CountIf
18.01.2023 08:40:07
ChrisL
Hi

s = Application.Match("Bemerkungen", .Rows(1), 0)
For tt = 2 To .Cells(.Rows.Count, s).End(xlUp).Row
If WorksheetFunction.CountIf(.Range(.Cells(2, s), .Cells(tt, s)), .Cells(tt, s)) = 1 Then _
ZielSheet.Cells(.Rows.Count, 17).End(xlUp).Offset(1) = .Cells(tt, s)
Next tt
cu
Chris

167 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige