Unikate aus Liste extrahieren

In diesem Beispiel liegt eine Liste vor, die einen Eintrag jeweils mehrfach enthält. Ziel ist nun, aus der Liste jeden der mehrfach vorkommenden Werte jeweils nur ein einziges mal auszulesen und in einer separaten Tabelle darzustellen. Die Lösung ist formelbasiert und funktioniert ohne VBA.

Die folgend Abbildung zeigt die Ausgangstabelle:

Ziel ist nun, aus der Spalte "Ort" jeden Ortsnamen ein einziges mal in einer separaten Tabelle auszulesen.

Die Lösung finden Sie in der Beispieldatei, welche Sie am Ende der Lösung herunterladen können.

Lösungsweg

Das Arbeitsblatt Demonstration zeigt den Lösungsweg. Es werden einige Hilfsspalten für Nebenrechnungen benötigt (Spalten A, B, C und D). In Zelle A2 wird die Zeilenanzahl der Ursprungstabelle mit der Formel 65536-COUNTBLANK(Ausgangssituation!C:C)-1 ermittelt. (Hinweis: Der Wert 65536 ist für Excel 2003, nicht für Excel 2007 zutreffend.)

In Spalte C wird in der obersten Zelle zunächst als Startwert die Zeilennummer der ersten Tabellenzeile eingetragen. In den folgenden Zeilen sollen die Positionen der folgenden Unikate in der Ursprungstabelle ermittelt werden. Für Duplikate wird die Position 0 vergeben.
Die Formel in B3 lautet
WENN(UND(NICHT(ISTLEER(Ausgangssituation!C3)),Ausgangssituation!C3<>"",
ISTNV(VERGLEICH(Ausgangssituation!C3,BEREICH.VERSCHIEBEN(Ausgangssituation!$C$2,0,0,
ZEILE(Ausgangssituation!C3)-$B$2,1),0))),ZEILE(Ausgangssituation!C3),0)
.

Diese Formel untersucht, ob drei Kriterien (UND) erfüllt sind. Die ersten beiden Kriterien fragen, ob die aktuelle Zelle in der Ursprungstabelle nicht leer ist bzw. eine leere Zeichenkette enthält. Das soll verhindern, dass leere Zellen oder leere Zeichenketten als Unikat gezählt werden.

Das dritte Kriterium ist die Prüfung, ob der Wert der aktuellen Zelle in der Ursprungstabelle weiter oben (BEREICH.VERSCHIEBEN) schon einmal vorgekommen ist (VERGLEICH). Wenn das nicht zutrifft, handelt es sich um ein Unikat, und die Zeilennummer wird eingetragen, sonst 0.

In der Hilfsspalte C wird mit der Formel WENN(B2<>0,"U","D") ein Kennzeichen eingetragen, ob es sich um ein Unikat ("U") oder Duplikat ("D") handelt. In D2 wird zunächst die Startzeile eingetragen. Darunter werden die Positionen der Unikate aufgelistet. Das erledigt die Formel

WENN(ODER(D2=MAX(B:B),D2=0),0,BEREICH.VERSCHIEBEN(BEREICH.VERSCHIEBEN($B$2,D2-2,0,1,1),VERGLEICH("U",BEREICH.VERSCHIEBEN($C$2,D2-1,0,$A$2-D2+1,1),0),0,1,1)).

Die Formel prüft zunächst, ob die bisher ermittelte Position bereits die letzte Position (MAX) oder 0 (Ende-Kennzeichen) ist. Wenn ja, wird 0 gesetzt. Sonst wird die nächste Position aus Spalte B übernommen, für die der Wert in Spalte C "U" ist.

Hinweise/Bemerkungen

Die Spalten A, B, C und D sind Hilfsspalten und können ausgeblendet werden. Das Ergebnis ist im Arbeitsblatt Ergebnis beispielhaft dargestellt.

Die Ergebnistabelle kann maximal so viel Zeilen haben wie die Ursprungstabelle. Deshalb wurden hier 20 Zeilen für das Ergebnis eingetragen. Wenn die Ursprungstabelle variabel ist, muss immer in der Ergebnistabelle geprüft werden, ob genügend viele Zeilen da sind. Dazu muss Spalte D eingeblendet sein. Das erste Auftreten von 0 kennzeichnet das Ende der Unikat-Liste.

Das Ergebnis sehen Sie in der folgenden Abbildung:

 

Die Lösung stammt von wilfert.de und wird mit ausdrücklicher Genehmigung auf Excel-Inside.de veröffentlicht.

Hier können Sie die Beispieldatei herunterladen.