AW: Zählen eindeutiger Werte mit Bedingung
05.11.2021 16:42:11
Lenzmacher
Ich versuche immer, solche speziellen Sachen bei großen Listen als Datenbank zu behandeln und diese Abfragen mit SQL durchzuführen.
hört sich aber komplizierter an als es ist. hier mal der für deine Tabelle genutzte Code
Sub SQL()
Dim WB As Workbook
Set WB = Application.ThisWorkbook
Dim WS As Worksheet
Set WS = WB.Worksheets("Tabelle1")
Dim Conn As ADODB.Connection
Dim rs As ADODB.Recordset
Set Conn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")
Dim ConnStr As String
ConnStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & WB.FullName & ";Extended Properties=""Excel 12.0;HDR=Yes;IMEX=1"";"
Conn.Open ConnStr
With WS
ZAHL1 = .Cells(2, 5)
ZAHL2 = .Cells(3, 5)
ZAHL3 = .Cells(4, 5)
ZAHL4 = .Cells(5, 5)
sSql00 = "Select distinct count(Zahlen) as ANZAHL "
sSql01 = ", (Select count(Zahlen) FROM [Tabelle1$] where left(Zahlen,1) = " & ZAHL1 & ") as ZAHLEN1"
sSql02 = ", (Select count(Zahlen) FROM [Tabelle1$] where left(Zahlen,1) = " & ZAHL2 & ") as ZAHLEN2"
sSql03 = ", (Select count(Zahlen) FROM [Tabelle1$] where left(Zahlen,1) = " & ZAHL3 & ") as ZAHLEN3"
sSql04 = ", (Select count(Zahlen) FROM [Tabelle1$] where left(Zahlen,1) = " & ZAHL4 & ") as ZAHLEN4"
sSql05 = " from [Tabelle1$] "
sSql = sSql00 & sSql01 & sSql02 & sSql03 & sSql04 & sSql05
rs.Open sSql, Conn
If rs.EOF = False Then
.Cells(2, 6) = rs.Fields("ZAHLEN1")
.Cells(3, 6) = rs.Fields("ZAHLEN2")
.Cells(4, 6) = rs.Fields("ZAHLEN3")
.Cells(5, 6) = rs.Fields("ZAHLEN4")
.Cells(6, 6) = rs.Fields("ANZAHL")
End If
rs.Close
sSql = " Select distinct Zahlen from [Tabelle1$]"
rs.Open sSql, Conn
ANZAHL = rs.GetRows()
.Cells(7, 6) = UBound(ANZAHL, 2)
rs.Close
End With
Conn.Close
End Sub
im ersten Teil bilde ich die Verbindung zur Excel-Tabelle als "Datenbank"
im 2. Teil suche ich nach den Zahlen, die von dir in E2-E5 vorgegeben wurden. diese sind änderbar....
im letzten Teil zähle ich die eindeutigen Datensätze.
Voraussetzung ist, dass die Datei gespeichert ist.
Eine Summenbildung wäre auch machbar, wenn die Verbindung einmal steht, braucht man auch keine Hilfsspalten mehr.
FG
Lenzi