Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1352to1356
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

Zählenwenn Formel via Makro erstellen

Zählenwenn Formel via Makro erstellen
02.04.2014 09:28:33
Dominic
Hallo zusammen,
ich habe eine umfangreiche Excel Tabelle erstellt, ein Tabellenblatt "Datenbasis" wird über eine Datenbankverknüpfung via SQL Abfrage mit Daten gefüttert.
Diese Datenbasis kann schnell mal 75.000 Zeilen und mehr erreichen. In Spalte B werden die Kundennamen aufgeführt. Zu jedem Kunden gibt es unzählige Transaktionen. Ich möchte nun eine Kundenauflistung erhalten, indem Excel diese Spalte B durchsucht und jeden Kunden nur einmalig aufführt.
Bei meiner Recherche zur Lösung dieses Problems bin ich auf folgende Idee mit einer Hilfstabelle gestoßen:
Im Datenblatt in Zelle X1 wird einfach nur "1" eingetragen.
Im Datenblatt in Zelle X2 folgende Formel einfügen und runterziehen, (und das leider bis 75.000).
=(ZÄHLENWENN($B$1:B2;B2)=1)+MAX(X$1:X1)~f~
Im Tabellenblatt "Test"
füge ich in A1 folgende Formel ein und ziehe diese runter:
~f~=WENN(ZEILE(B2)>MAX(Datenbasis!X:X);"";INDEX(Datenbasis!B:B;VERGLEICH(ZEILE(B2);Datenbasis!X:X;0)))
Dann werden mir im Tabellenblatt Test in A1 und folgende Zellen nach und nach die Kunden aufgeführt. Jeder Kunde wird hierbei tatsächlich nur einmalig aufgeführt. Nun ist es jedoch so, dass ich nach jeder Aktualisierung der Datenbasis die Formel in Spalte X im Tabellenblatt Datenbasis manuell erweitern muss und die Berechnung dazu irgendwie ewig dauert.
Kann ich diese Funktion die ich in X2 eingefügt habe auch via Makro lösen? So brauche ich nur ein Makro starten, nachdem ich die Datenbasis aktualisiert habe, und das wars.
Oder kennt ihr für mein gewünschtes Ergebnis der Kundenauflistung eine bessere Lösungsmöglichkeit?
Vielen Dank!

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zählenwenn Formel via Makro erstellen
02.04.2014 13:15:57
fcs
Hallo Dominic,
der schnellste Weg zu einer Kunden Auflistung dürfte eine Auswertung per Pivot-Tabellenbericht sein.
Gruß
Franz

AW: Zählenwenn Formel via Makro erstellen
03.04.2014 10:14:56
Dominic
Hi Franz,
vielen Dank für den Vorschlag.
Leider ist eine Pivot Tabelle in diesem Fall keine mögliche Option für mich.
Ich muss diese Auflistung in mein bestehendes Layout/Konstrukt einfügen, das geht über die Pivot Tabelle so gar nicht.
Mit der Pivot Tabelle könnte ich mir zwar jedesmal manuell die Kundenuflistung erstellen, per copy paste dem gewünschten Tabellenblatt hinterlegen. Ich möchte es aber automatisiert haben.
Heißt in diesem Tabellenblatt Test sollen alle Kunden automatisch aufgeführt werden, sobald die Datenbasis aktualisiert wurde, passt sich diese Liste wieder an. Ohne meine manuelle Änderung.
Hast du hierzu eine Idee oder einen Vorschlag?

Anzeige
AW: Zählenwenn Formel via Makro erstellen
03.04.2014 15:05:19
fcs
Hallo Dominic,
die Pivot-Tabellenlösung könnte man natürlich auch per Makro automatisieren.
Hier eine Makro-Lösung, die aus den Werten einer Spalte eine Liste ohne doppelte Einträge erstellt.
Dieses Makro kannst du nach der Aktualisierung der Daten starten.
Blattnamen und Zeile_1, Spalte der Kundennamen musst du anpassen.
Gruß
Franz
Sub KundenListe02()
'Erstellt aus den Werten in einer Spalte eines Tabellenblatts eine Liste _
ohne doppelte Einträge
Dim arrData, Zeile As Long, objCol As New Collection, objItem As Variant
Dim wks As Worksheet
Dim Zeile_1 As Long, Spalte As Long
'Werte in Datenarray einlesen
Set wks = ActiveWorkbook.Worksheets("Tabelle1") 'Tabelle mit Importierten daten
With wks
Zeile_1 = 2 'Zeile mit 1. Kundennamen
Spalte = 1 ' Spalte mit den Kundennamen
'letzte Zeile mit Wert
Zeile = .Cells(.Rows.Count, Spalte).End(xlUp).Row
If Zeile = Zeile_1 Then
.Range(.Cells(Zeile_1, Spalte), .Cells(Zeile, Spalte)).ClearContents
End If
'Werte ohne doppelte in Collection erfassen
On Error Resume Next
For Zeile = LBound(arrData, 1) To UBound(arrData, 1)
If arrData(Zeile, 1) = "" Then
objCol.Add "", "(Leer)"
Else
objCol.Add arrData(Zeile, 1), _
IIf(IsNumeric(arrData(Zeile, 1)), CStr(arrData(Zeile, 1)), arrData(Zeile, 1))
End If
Next
Err.Clear
'Werte in Liste eintragen
If objCol.Count > 0 Then
Zeile = Zeile_1
For Each objItem In objCol
.Cells(Zeile, Spalte).Value = objItem
Zeile = Zeile + 1
Next
'Werte sortieren
If objCol.Count > 1 Then
With .Range(.Cells(Zeile_1, Spalte), .Cells(Zeile_1 + objCol.Count - 1, Spalte))
.Sort Key1:=.Cells(1, 1), Order1:=xlAscending, Header:=xlNo
End With
End If
End If
End With
Erase arrData
Beenden:
Set objCol = Nothing
With Application
.ScreenUpdating = True
.Calculation = xlCalculationAutomatic
End With
End Sub

Anzeige

302 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige