von mikeleb » Do, 12.02.2015 14:30
Hallo,
das Makro macht das, was es soll.
Der Aufruf =uniques(A1;",") mit A1="2, 2, 2, 3, 3, 5, 3, 3, 3, 2, 5 "
zerlegt den Text in Einzelteile, wobei nach jedem "," getrennt wird. Das ergibt in dem Beispiel
Der este Eintrag ist eine "2", der zweite allerdings " 2" und damit etwas anderes. Der letzte Eintrag ist interessanterweise " 5 " und damit etwas anderes als " 5".
Daher ist das Ergebnis
2, 2, 3, 5, 5 ,,,,,,
erstmal (formal) völlig korrekt, nur nicht das, was du willst.
Ein besseres Ergebnis erzielt folgende Funktion:
Code: Alles auswählen
function Uniques(sText As String, sDelimiter As String) As String
Dim k As Long, n as long, i as long
Dim aData() As String, aDataNew() as string
Dim neu as boolean
sText=trim(sText) 'Unterbindung unsinniger Leerezeichen am Anfang bzw. am Ende
aData = Split(sText, sDelimiter)
n=ubound(aData())
For k = 0 To n
neu=true
for i=0 to ubound(aDataNew())
if aData(k)=aDataNew(i) then neu=false
next
if neu then
Redim Preserve aDataNew(i)
aDataNew(i)=aData(k)
end if
Next
Uniques = trim(Join(aDataNew(), sDelimiter))
End function
Der Aufruf
ergibt nun
Hallo,
das Makro macht das, was es soll.
Der Aufruf =uniques(A1;",") mit A1="2, 2, 2, 3, 3, 5, 3, 3, 3, 2, 5 "
zerlegt den Text in Einzelteile, wobei nach jedem "," getrennt wird. Das ergibt in dem Beispiel
[code]2
2
2
3
3
5
3
3
3
2
5 [/code]
Der este Eintrag ist eine "2", der zweite allerdings " 2" und damit etwas anderes. Der letzte Eintrag ist interessanterweise " 5 " und damit etwas anderes als " 5".
Daher ist das Ergebnis [quote]2, 2, 3, 5, 5 ,,,,,,[/quote] erstmal (formal) völlig korrekt, nur nicht das, was du willst.
Ein besseres Ergebnis erzielt folgende Funktion:
[code]function Uniques(sText As String, sDelimiter As String) As String
Dim k As Long, n as long, i as long
Dim aData() As String, aDataNew() as string
Dim neu as boolean
sText=trim(sText) 'Unterbindung unsinniger Leerezeichen am Anfang bzw. am Ende
aData = Split(sText, sDelimiter)
n=ubound(aData())
For k = 0 To n
neu=true
for i=0 to ubound(aDataNew())
if aData(k)=aDataNew(i) then neu=false
next
if neu then
Redim Preserve aDataNew(i)
aDataNew(i)=aData(k)
end if
Next
Uniques = trim(Join(aDataNew(), sDelimiter))
End function[/code]
Der Aufruf [code]=uniques(A1;", ")[/code] ergibt nun [code]2, 3, 5[/code]