Supportnet Computer
Planet of Tech

Supportnet / Forum / Tabellenkalkulation

Gibt es in Excel sowas wie eine UNIQUE-Funktion?





Frage

Hallo liebe Excel-Freunde, ich habe da mal eine Frage. Gibt es in Excel eine Tabellenfunktion oder eine Formel wie UNIQUE(.) , an die ich 30 Einzelwerte/Zellbezüge, einen Vektor oder einen Bereich übergeben kann und die mir jeden darin vorkommenden Wert nur einmal zurückgibt, also die mehrfachen aussortiert? Als zweiten Parameter könnte ich mir noch ein 0/1-Flag vorstellen, mit dem ich angebe, ob sie bei mehrfach vorkommenden Werten den jeweils ersten oder letzten zurückgeben soll, aber das wäre schon fast ein unbescheidener Wunsch. Beispielsweise würde =UNIQUE("3";"2";"5";"2";"4";"3";0) dann "3";"2";"5";"4" zurückgeben, =UNIQUE("3";"2";"5";"2";"4";"3";1) aber "5";"2";"4";"3". (Könnte man mit dem zweiten Parameter (=2) auch noch für eine sortierte Rückgabe sorgen, wäre es eine wunderbare Sortierfunktion, aber das hätte ich schon bemerkt, wenn es das gäbe.) Dass man das Aussortieren mit VBA machen kann ist mir klar, aber ich bräuchte es eigentlich als sogenannte Tabellenfunktion, weil ich das UNIQUE gerne innerhalb einer schon existierenden Formel einsetzen möchte und nur mit den Formeln kann ich ein "fertiges" Tabellenblatt erstellen. Ein Makro muss man immer erst per Hand oder durch ein Ereignis starten. Ich hoffe auf neue Erkenntnisse und wünsche Euch allen frohe Ostern! Bernie

Antwort 1 von Saarbauer

Hallo,

was vergleichbares gibt es, zumindest bis Excel 2000 nicht

Gruß

Helmut

Antwort 2 von Primut

Hi Bernie,

es ist prinzipiell schon möglich, in VBA eigene, benutzerdefinierte Funktionen zu programmieren, die sich dann genau so wie normale Funktionen verwenden lassen.

Dein Beispiel sieht allerdings recht schwierig aus, schon aus dem Grund, da Funktionen in der Regel nur einen Funktionswert bereitstellen, du aber gleich einen Vektor / Matrix haben willst. Läßt sich in einer Zelle als Ergebnis schwer darstellen.

Meine Empfehlung: Löse das Formeltechnisch mit Hilfsspalten und zb
ZÄHLENWENN
etc.

Gruß Primut

Antwort 3 von nighty

hi all :)

einfache ist :))

buedde ein beispiel wie der zelleninhalt aussieht bzw.
kann ich davon ausgehen ?

A1="3";"2";"5";"2";"4";"3"

gruss nighty

Antwort 4 von Bernie_W

Hi nighty, Primut,

ne, ne, so einfach isses nicht. Das sollte schon so sein:
A1="3", B1="2", C1="5", D1="2", E1="4", F1="3" oder
A1="3", A2="2", A3="5", A4="2", A5="4", A6="3" oder bunt gemischt

so dass ich dann mitten in meiner Formel aufrufen kann:
=...(UNIQUE(A1;B1;C1;D1;E1;F1;0))... oder =...(UNIQUE(A1:F1;0))... bzw.
=...(UNIQUE(A1;A2;A3;A4;A5;A6;0))... oder =...(UNIQUE(A1:A6;0))...
naja, Zellen, Bereiche, absolute und relative und gemischte Bezüge, das kennst Du ja alles. Falls das Material mal verstreut oder durcheinander ist, solls auch gehen

=...(UNIQUE(A4;F2;C1;E6;E1;B2;0))...

Spannende Frage an Primut, wie mache ich das, in VBA eine eigene, benutzerdefinierte Funktionen zu programmieren.
Bis Alt+F11 komme ich alleine, dann wird es schon in dem Browser auf der linken Seite etwas unübersichtlich und unverständlich. Zum Schluss müsste ich die fertig programmierte Funktion wohl irgendwie "exportieren" oder was ähnliches anstellen, damit sie so wie die normalen Tabellenfunktionen in Formeln verfügbar ist. Auf dem Gebiet fehlt mir leider noch alles, da gibts noch viel zu tun! Wie fange ich das am besten an? (Excel-Hilfe? VBA-Hilfe?)

Hilfe! Bitte!
Bernie

Antwort 5 von Bernie_W

Hi all,

also ich denke, mit

Dim ergebnis() As Variant
Schleife(i)
Redim Preserve ergebnis(i)
ergebnis(i) =...
Loop Schleife(i)

müsste das irgendwie gehen. Man muss das Zeug, was man berechnet hat dann nur noch wieder loswerden, das muss dann wohl auf jeden Fall eine Matrixformel sein. Da ja erst zur Laufzeit klar ist, wie viele Werte überhaupt zurückgegeben werden, muss die Funktion eben was leer lassen oder abschneiden, wenns nicht passt. Aber mehr als es Ausgangswerte sind können ja nicht zurückkommen, höchstens weniger.

Und wenn der Anwender meint, dass er von 6 Ausgangswerten sowieso nur 4 zurück- kriegt oder nur die ersten 3 braucht, dann hätte ich auch nichts dagegen, wenn er den Zielbereich gleich so klein macht.

Die konkreten VBA-Probleme kommen dann bestimmt noch, jetzt bräuchte ich erstmal einen Anfang.

Viele Grüße, Bernie

Antwort 6 von Primut

Hi Bernie,

dacht ich mir doch, das das nicht ganz so einfach ist.

Von der Sache her ist ja eigentlich nighty der "Formel"-Experte und ich würde übergeben.
Aber trotzdem ein paar Fragen zur mgl. Problemklärung :

Du hast in deinem Beispiel die Zahlen immer in Anführungszeichen geschrieben. In Excel wären das somit Text zeichen (Strings) und keine Zahlen. Ist das beabsichtigt?
Für entsprechende Formel müßte das Format der Eingabefelder schon eindeutig definiert sein.

Soll die Anzahl der Eingabefelder fest (ist einfacher!!) oder variabel sein?

In welchem Format soll dann die Ausgabe erscheinen?
Daher meine Bemerkung schon in A2. ZB alle Werte als String verknüpft als Ausgabe ist sicher einfach, aber dann kannst du nur bedingt damit weiterrechnen. Hängt also auch ein bißchen am Gesamtproblem, was du machen willst.


Gruß Primut

Antwort 7 von Primut

Hi,

zu deiner Frage der benutzerdefinierten Funktion zB Hier ;-)

Gruß Primut

Antwort 8 von Bernie_W

Hi Primut,

@AW7: Danke! Ich denke mal, da sind die Public-Deklarationen das wichtigste. Sonst sehe ich da auf den ersten Blick nichts auffälliges.

@AW6: Zahlen in Anführungszeichen hat nichts zu bedeuten, das sollen Texte im allgemeinen sein. Schlechtes Beispiel, sorry für die Verwirrung.

Bei den Eingabewerten und ihren Formaten dachte ich an das volle Programm wie bei ANZAHL2: 1 bis 30 Bezüge, Bereiche, Namen, egal was drin steht. (Wobei man über "" als Wert mal ernsthaft nachdenken müsste.)
Zitat:
Soll die Anzahl der Eingabefelder fest ... oder variabel sein?

Also ich würde die "Eingabefelder " ja lieber als Parameter bezeichnen, muss aber zugeben, dass ich selber sehr inkonsequent war und das 0/1-Flag als "zweiten Parameter" bezeichnet habe, obwohls der siebente war. Zählen müsste man könnten und dann auch tun.

Eigentlich habe ich die Frage ja schon beantwortet: variabel natürlich. Alle anderen Funktionen mit gleichartigen Parametern können das ja auch, wenn ich nur an MAX und MIN denke. Aber notfalls könnte man sich auch auf einen einzigen PArameter beschränken, wenn dies wenigstens ein zusammenhängender Bereich sein kann oder ein Name dafür. Mehrere gesplittete Bereiche machen vielleicht doch zu viel Ärger.

Als Ausgabe soll das rauskommen, was man reingegeben hat, jedes Teil für sich in eine Zelle innerhalb eines Zielbereichs, den man vor der Eingabe der Matrixformel natürlich passend markieren muss. Was nicht passt wird abgeschnitten, was solls. Alles erstmal ohne Änderung der Reihenfolge und natürlich ohne jegliche Format- und Typumwandlung. Also wenn die Eingabe ein Bereich ist, der die Zahl 5, den Text "5", den Wert WAHR, den Text "WAHR" und dieZahl 5 enthält, dann sollen die Zahl 5, der Text "5", der Wert WAHR und der Text "WAHR" in den ersten 4 Zellen des Zielbereichs stehen, falls der groß genug war. Als normaler Mensch würde ich ohne Platznot wahrscheinlich in mind. 80% den Zielbereich genauso groß machen wie den Eingabebereich.

Mein jetziges Gesamtproblem hängt mit KKLEINSTE zusammen, dass ich zB. erst eine 6, dann 100.000-mal eine 7 bekomme, obwohl ich nur eine brauche, und dann nicht weiß, wann die 8 kommt und ob überhaupt oder ob es eine 9 ist. KKLEINSTE soll mir sagen, der zweitkleinste Wert ist 7 und der drittkleinste 8 (und nicht nochmal 7). Aber das kann die Funktion nicht und einen Parameter, um das ein oder aus zu schalten hat sie nicht.

Außerdem möchte ich KKLEINSTE auf diese Weise noch erweitern bzw. umgehen, weil es ja nur Zahlenwerte vergleichen kann, technische Bezeichnungen aber oft Buchstaben am Anfang haben: DIN-5008, IEEE-802.11g, ICE591, intel486DX2/66, BMW520i, ST3200822A. Sowas kann man bisher alles nicht vernünftig sortieren und ausmisten, höchstens mit VBA.

So, is ziemlich lang geworden. Aber die Fragen musste ich ja beantworten.

Viele Grüße, Bernie

Antwort 9 von nighty

hi all :)

ich glaub hab nix gerafft :))

hab das gemacht :)))

inhalt EINER zelle 1,1,3,2,6,6

formel lautet

=Sumtext(A1;0)
bzw.
=Sumtext(A1;1)

ist 1,3,2,6 bei parameter 0

ist 1,2,3,6 bei parameter 1

einzufuegen unter
alt/f11/projektexplorer/einfuegen/allgemeines modul

Option Explicit
Function Sumtext(Zellen As Range, Sortieren As Boolean) As String
ReDim zaehler2(0) As String
Dim zeichen As Integer
Dim zaehler1 As Integer
Dim zaehler3 As Integer
Dim zaehler5 As Integer
Dim zaehler8 As Integer
Dim zaehler4 As String
Dim zaehler6 As String
Dim zaehler7 As String
Application.Volatile
For zeichen = 1 To Len([Zellen])
If Mid([Zellen], zeichen, 1) Like "[0-9]" = True Then
zaehler2(zaehler1) = Mid([Zellen], zeichen, 1)
zaehler1 = zaehler1 + 1
ReDim Preserve zaehler2(zaehler1)
End If
Next zeichen
For zaehler3 = 0 To zaehler1
For zaehler5 = 0 To zaehler1
If zaehler2(zaehler5) = zaehler2(zaehler3) And zaehler3 <> zaehler5 Then
zaehler2(zaehler5) = zaehler2(zaehler1)
zaehler8 = zaehler8 + 1
Exit For
End If
Next zaehler5
Next zaehler3
zaehler1 = zaehler1 - zaehler8 / 2
For zaehler3 = 0 To zaehler1 + 1
If zaehler2(zaehler3) <> "" Then zaehler4 = zaehler4 & zaehler2(zaehler3) & ","
Next zaehler3
zaehler4 = Mid(zaehler4, 1, Len(zaehler4) - 1)
If Sortieren = True Then
zaehler4 = ""
For zaehler3 = 0 To zaehler1 + 1
For zaehler5 = 0 To zaehler1 + 1
If zaehler2(zaehler3) <= zaehler2(zaehler5) Then
zaehler6 = zaehler2(zaehler5)
zaehler7 = zaehler2(zaehler3)
zaehler2(zaehler5) = zaehler7
zaehler2(zaehler3) = zaehler6
End If
Next zaehler5
Next zaehler3
For zaehler3 = 0 To zaehler1 + 1
If zaehler2(zaehler3) <> "" Then zaehler4 = zaehler4 & zaehler2(zaehler3) & ","
Next zaehler3
zaehler4 = Mid(zaehler4, 1, Len(zaehler4) - 1)
End If
Sumtext = zaehler4
End Function

zum üben wars allemale lustig :))

ich les nochmal beizeiten in ruhe durch :)))

Antwort 10 von nighty

hi all :)

hier ein kurzes beispiel fuer einen eventuellen formelaufbau :))

gruss nighty

Option Explicit
Function Sumtext(DeineZellen As Range, DeineParameter As Boolean) As String
Dim zelle As Range
Rem eine schleife fuer deinen bereich
For Each zelle In DeineZellen
Rem zelle auf abfrage ,in diesem beispiel "Hallo"
If Cells(zelle.Row, zelle.Column) = "Hallo" Then
Rem DeineParameter auf abfrage wobei else false ist
If DeineParameter = True Then
Rem Deine Anweisungen bei parameter 0
Sumtext = "Gutes Wetter"
Else
Rem Deine Anweisungen bei parameter 1
Sumtext = "Schlechtes Wetter"
End If
End If
Next zelle
End Function

Antwort 11 von nighty

hi all :)

und korrigiert :)

gruss nighty

Option Explicit
Function Sumtext(DeineZellen As Range, DeineParameter As Boolean) As String
Application.Volatile
Dim zelle As Range
Rem eine schleife fuer deinen bereich
For Each zelle In DeineZellen
Rem zelle auf abfrage ,in diesem beispiel "Hallo"
If Cells(zelle.Row, zelle.Column) = "Hallo" Then
Rem DeineParameter auf abfrage wobei else false ist
If DeineParameter = True Then
Rem Deine Anweisungen bei parameter 0
Sumtext = "Gutes Wetter"
Else
Rem Deine Anweisungen bei parameter 1
Sumtext = "Schlechtes Wetter"
End If
End If
Next zelle
End Function

Antwort 12 von Primut

@nighty,

nicht schlecht,
Zitat:
ich glaub hab nix gerafft :))

dafür warst du aber ziemlich schnell ;-}

Was ich soweit verstanden habe, will Bernie einfach die Zellinhalte eines beliebigen Bereiches auf Dopplungen vergleichen und die nicht-doppelten Inhalte in einem neuen Bereich wieder ausgeben. Ich denke, genau in dieser Ausgabe besteht auch das Funktions-Problem.
Mein Vorschlag wäre ein klassisches Makro, das entsprechende Bereiche vergleichstechnisch meinetwegen über
Worksheet_Change
ständig selbst aktualisiert. Vergleichs- und Ausgabebereich (+ Sortierparameter) können ja in vorher extra definierte Zellen eingetragen werden, die dann entsprechend abgefragt werden.

Gruß Primut

Antwort 13 von Bernie_W

Hallo Ihr,

erstmal vielen Dank an alle, vor allem an nighty. Der scheint ja Weltmeister im VBA zu sein und hat mehr getan, als ich erwartet hatte und als ich im Moment verarbeiten kann. Es funktioniert so, wie er es beschrieben hat, auch die Sortierung. Dass ich es eigentlich ein bisschen anders machen möchte, hatte ich schon geschrieben. Nur das UNIQUE noch mal kurz als Beispiel, meine anderen Formeln drumrum lasse ich weg, weil ich sonst auch noch sämtliche anderen Ausgangsdaten mit angeben müsste :

B1:B10 markieren, in die aktive Zelle B1 die Formel =UNIQUE(A1:A10;0) schreiben, Strg+Shift+Enter und fertig ist die Matrixformel. Dann müssen in B1:B10 entweder genau dieselben 10 Werte stehen wie in A1:A10, wenn sie alle verschieden waren, oder weniger, wenn es in A1:A10 doppelte gab. Eine freie Position in der Ausgabe B1:B10 soll automatisch vom nächsten Wert besetzt werden, so dass die Werte alle aufrutschen und die freien Plätze nach unten durchgereicht werden. Wenn also A1:A5 ="sechsmal", A6:A8 ="3-mal" und A9=A10="zweimal", dann soll das Ergebnis sein: B1 = "sechsmal", B2 = "3-mal", B3 = "zweimal" und B4:B10 = "".

Aber eigentlich hatte ich ja vor, das alles mal selbst zu programmieren und mir nicht von Euch fertig abzuholen. Ich wollte auch klären, ob es schon so eine Tabellenfunktion gibt oder ob man durch sinnvolle Kombination mehrerer normaler Funktionen wie KKLEINSTE, MAX, MIN, ANZAHL, INDIREKT usw. sich sowas relativ leicht und übersichtlich zusammenbauen kann, aber das scheint wohl nicht u gehen. Bleibt also VBA übrig.

Da gehe ich davon aus, dass ich das, was nighty in einer halben Stunde schafft vielleicht in 2 oder 3 Monaten hinkriege und mit etwas Forums-Hilfe bei Schwierigkeiten vielleicht auch in der halben Zeit. Aber damit muss ich leben.

Außerdem habe ich nicht immer Zeit, erst wieder ab Dienstag 18.4., deshalb habe ich jetzt noch nichts selbstprogrammiertes und würde mich erstmal für Eure bis jetzt geleistete Arbeit und Mühe danken. Lasst mich auch noch was machen, ich melde mich wieder!

Ein frohes Osterfest an alle! Bernie

Antwort 14 von Bernie_W

... würde ich mich erstmal für Eure bis jetzt geleistete Arbeit und Mühe bedanken.

Bernie_W

Antwort 15 von Primut

Hi Bernie,

besten Dank für deine Super - Erklärung, das wünscht man sich hier immer, ist aber viel zu selten.

So, ich hab mal etwas rumprobiert und dir als Osterei sozusagen eine "Unique-Funktion" gebaut. Zuerste als Erklärung:
Ich hab es nicht geschafft, eine Matrix-Funktion zu programmieren, keine Ahnung, wie das funktioniert. Dafür habe ich sie so programmiert, daß du sie nahezu ebenso verwenden kannst, du mußt sie bloß entsprechend runterkopieren. Beispiel:
zu untersuchender Bereich: A1:A100
auszugebender Bereich: B1:B100
Formel in B1: =Unique($A$1:$A$100;A1)
und anschließend bis B100 runterkopieren:

Option Explicit

Function Unique(Bereich As Range, Zelle As Range)
Application.Volatile
Dim z As Range
Dim Anz As Integer
Dim a As Integer
Dim i As Integer
Dim k As Integer
Dim zellnr As Integer
Dim Sort As Variant

Anz = Bereich.Cells.Count
ReDim x(Anz)

a = 0
For Each z In Bereich
If z.Address = Zelle.Address Then
zellnr = a
 Else
 End If
 x(a) = z.Value
 a = a + 1
Next
Rem Dopplungen löschen
For i = 0 To Anz - 1
For k = i To Anz - 1
 If x(i) = x(k) And i <> k Then
 x(k) = ""
 Else
 End If
 Next k
Next i
Rem Sortieren
For i = 0 To Anz - 1
For k = 0 To Anz - 1
 If x(k) > x(k + 1) Then
   Sort = x(k)
   x(k) = x(k + 1)
   x(k + 1) = Sort
  Else
  End If
Next
Next
Unique = x(zellnr)

End Function


Bei der Formeleingabe erhälst du zwei Eingabebereiche, der erste ist der zu untersuchende Auswahlbereich. Einfach markieren, aber der Bereich muß zusammenhängend sein. Bei Zelle mußt du die erste Zelle des zu untersuchenden Bereiches eintragen. Diese verschiebt sich beim runterkopieren, wogegen der Bereich fest bleibt.

Also bei Zahlen läuft es ganz gut, natürlich sortiert!
Texte funktionieren von der Sache her auch bei der Doppelungsprüfung, allerdings funktioniert dort die Sortierung nicht so einfach. Da bleibt also für dich auch noch was zum probieren.

Viel Spaß

Primut

PS.: Feedback wäre nett

Antwort 16 von Bernie_W

Hallo Primut,

was soll ich sagen, mir fehlen die Worte. Es funktioniert (auch dank Nightys Hinweis wie man es als Funktion verfügbar macht: alt f11/einfuegen/modul) und das mit gerade mal 30 Programmzeilen. Das hätte ich nie für möglich gehalten.

Ich gebe zu, dass ich noch nicht den ganzen Code verstanden habe, der Anfang
a = 0
For Each z In Bereich
If z.Address = Zelle.Address Then
zellnr = a
Else
End If
x(a) = z.Value
a = a + 1
Next
und der zweite Parameter (Zelle A1) verwirrt mich noch ein bisschen, aber das kriege ich raus. Der Vektor x() wird mit Werten belegt, mit zellnr merkt man sich eine Zahl a für später, das else ist entbehrlich (wie auch das letzte For i = 0 To Anz - 1 .. Next), aber am Ende wird mit Unique = x(zellnr) genau der richtige Wert zurückgegeben, das ist verblüffend. Das muss ich mir jetzt erstmal ganz genau und in Ruhe angucken. Natürlich auch Nightys Lösung noch mal.

Ich danke Euch für zwei komplette, funktionierende Beispiele, die ich zum einen so als Funktionen benutzen kann, zum anderen aber auch sehr schön als Beispiel, wie man sich eigene Funktionen mit Parametern programieren kann.

Falls ich bei der Matrixformel weiterkomme, werde ich mich melden. Vorerst bin ich gescheitert, als zweiten Funktionsparameter den Zielbereich eingeben zu lassen, in den ich die Ergebnisse - und zwar alle auf einmal - zurückschreibe. Das wäre eine Vorstufe zur Matrixfunktion gewesen, glaube ich, funktioniert aber leider nicht.

Danke nochmal! Bernie

Antwort 17 von Bernie_W

Hallo Primut,

das letzte For i = 0 To Anz - 1 .. Next ist wohl doch nicht überflüssig. Entschuldigung! Die innere Schleife muss also Anz-mal laufen. (Ist das Bubble-Sort oder was ähnliches?)

Habe gerade mal mit übersichtlicheren Zahlen rumexperimentiert, und zwar mit 1, 2, .. 20 und mit 4, 5, .. 23 (lückenlos, ohne doppelte, sortiert).
Kriege als Ergebnis in der ersten Zelle immer eine 0, obwohl die gar nicht zu den Ausgangswerten gehört, alle Werte sind um eine Postion verschoben und der letzte fehlt. Der Fehler tritt nur auf, wenn überhaupt kein doppelter Wert dabei ist. Ich glaube, jetzt wird es doch noch mal spannend.

Grüße, Bernie

Antwort 18 von Primut

Hi Bernie,

nochmal als Erklärung:
Vom Prinzip her liefern selbstdefinierte Funktionen, soweit mir bekannt, nur ein Ergebnis, das am Funktionsende zugewiesen wird.

Da du aber mehrere verschiedene Ergebnisse haben wolltest, mußte ich halt rumtricksen: Es wird mit dem Array
X()
in jeder Funktion gerechnet, (Sortiert, entdoppelt). Dieses Array ist so lang wie der Ausgangsbereich und in jeder Funktion vorhanden. Für die Ausgabe muß also nur für jede Ergebniszelle die richtige Array-Position ermittelt werden.
For each z ...
überprüft alle Zellen des ausgewählten Bereiches.
a 
wird entsprechend der Zellanzahl hochgezählt und mit
zellnr = a
wird festgelegt, welche Position des Array ausgegeben werden soll.
Mit
x(a) = z.Value
werden ganz einfach den einzelnen Array - Positionen die Zellwerte des ausgewählen Bereiches nacheinander übertragen.

Darin liegt in gewisser Weise auch das Problem. Bei sehr großen Auswahlbereichen wird die Rechenzeit sehr hoch, vielleicht fällt mir ja noch was ein dazu.
Wenn du ebenfalls Buchstaben sortieren willst, liegt das Problem nur darin, daß sortiertechnisch erst die Zahlen , dann die Leerzellen und dann erst die Buchstaben kommen.
Aber das ist noch recht einfach.

Beste Grüße erstmal, war für mich auch eine interessante Übung.

Primut

Antwort 19 von Bernie_W

Hallo Primut,

zwei kleine Änderungen in Deinem Code (Sortierschleifen bis Anz - 2 statt Anz - 1)

Option Explicit

Function Unique(Bereich As Range, Zelle As Range)
Application.Volatile
Dim z As Range
Dim Anz As Integer
Dim a As Integer
Dim i As Integer
Dim k As Integer
Dim zellnr As Integer
Dim Sort As Variant

Anz = Bereich.Cells.Count
ReDim x(Anz)

a = 0
For Each z In Bereich
If z.Address = Zelle.Address Then
zellnr = a
End If
x(a) = z.Value
a = a + 1
Next
a = 0
Rem Dopplungen löschen
For i = 0 To Anz - 1
For k = i To Anz - 1
If x(i) = x(k) And i <> k Then
x(k) = ""
Else
End If
Next k
Next i
a = 0
Rem Sortieren
For i = 0 To Anz - 2
For k = 0 To Anz - 2
If x(k) > x(k + 1) Then
Sort = x(k)
x(k) = x(k + 1)
x(k + 1) = Sort
End If
Next
Next
Unique = x(zellnr)

End Function

Nehme an, dass das ok ist.
Grüße von Bernie

Antwort 20 von Primut

Hi Bernie,

ja logisch, die letzte Zelle wird ja nicht mehr sortiert.
Na ja, man lernt halt nie aus.

Thanks

Primut

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: