Mehrfach auftretende Strings in einer Zelle löschen

Das Tabellenkalkulationsprogramm

Moderator: Moderatoren

pityuse
Beiträge: 3
Registriert: Do, 12.02.2015 09:03

Mehrfach auftretende Strings in einer Zelle löschen

Beitrag von pityuse »

Hallo miteinander,

ich habe Zellen mit identischen Strings in derselben Zelle wie zum Beispiel:

Golf Golf Polo Golf -> gewünscht wäre Golf Polo
oder
2.0 2.0 1.6 1.8 1.6 -> gewünscht wäre 2.0 1.6 1.8

ich habe diese Frage gestern in einem englischen Excel-Forum gepostet und von einem Guru auch eine Antwort erhalten. Leider bringe ich die von ihm geschriebene Funktion in LibreOffice 4.3.5.2 nicht zum Laufen. Kann sich hier jemand erbarmen? Das wäre sehr freundlich. Ich glaube nicht, dass es schwierig ist, aber ich kann es nicht.

Code: Alles auswählen

Function Uniques(Text As String, Delimiter As String) As String
  Dim X As Long, Data() As String
  Data = Split(Text, Delimiter)
  With CreateObject("Scripting.Dictionary")
    For X = 0 To UBound(Data)
      .Item(Data(X)) = 1
    Next
    Uniques = Join(.keys, Delimiter)
  End With
End Function
Danke vorab!
Andreas
mikeleb
*******
Beiträge: 1315
Registriert: Fr, 09.12.2011 16:50

Re: Mehrfach auftretende Strings in einer Zelle löschen

Beitrag von mikeleb »

Hallo,
in einem englischen Excel-Forum
Daher hast du auch eine Excel-Lösung erhalten.
Folgendes sollte dein Problem lösen. (Fragen rund um die Programmierung passen aber besser in das entsprechende Unterforum viewforum.php?f=18)

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
	aData = Split(sText, sDelimiter)
	n=ubound(aData())
	Redim aDataNew(n)
	For k = 0 To n
		neu=true
		i=0
		do while aDataNew(i)<>""
			if aData(k)=aDataNew(i) then neu=false
			i=i+1
		loop
		if neu then aDataNew(i)=aData(k)
	Next
	Uniques = trim(Join(aDataNew(), sDelimiter))
End function
Gruß,
mikeleb
pityuse
Beiträge: 3
Registriert: Do, 12.02.2015 09:03

Re: Mehrfach auftretende Strings in einer Zelle löschen

Beitrag von pityuse »

Hallo Mike,

danke für deine Antwort. Ich war auf das MrExcel-Forum bei einer anderen Suche gestoßen und hatte dort ursprünglich was anderes gefragt, und als Bonus diese Funktion bekommen. Ich dachte, dass die Anpassung für LibreOffice mit minimalen Änderungen gemacht ist, aber wurde doch mehr. Danke, dass du dir die Zeit genommen hast. Es funktioniert...beinahe:

Hieraus:
2, 2, 2, 3, 3, 5, 3, 3, 3, 2, 5
macht die Funktion:
2, 2, 3, 5, 6,,,,
Nochmaliges Anwenden auf das Resultat bewirkt nichts. Es scheint, dass der erste String vergessen wird. Die Kommas am Schluss sind kein Problem. Die mehrfachen "3" in Stringmitte sind kein Problem, nur die doppelte "2" am Anfang.

Falls du das mit wenig Aufwand richten kannst: DANKE auch dafür.

Gruß
Andreas


mikeleb hat geschrieben:Hallo,
in einem englischen Excel-Forum
Daher hast du auch eine Excel-Lösung erhalten.
Folgendes sollte dein Problem lösen. (Fragen rund um die Programmierung passen aber besser in das entsprechende Unterforum viewforum.php?f=18)

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
	aData = Split(sText, sDelimiter)
	n=ubound(aData())
	Redim aDataNew(n)
	For k = 0 To n
		neu=true
		i=0
		do while aDataNew(i)<>""
			if aData(k)=aDataNew(i) then neu=false
			i=i+1
		loop
		if neu then aDataNew(i)=aData(k)
	Next
	Uniques = trim(Join(aDataNew(), sDelimiter))
End function
mikeleb
*******
Beiträge: 1315
Registriert: Fr, 09.12.2011 16:50

Re: Mehrfach auftretende Strings in einer Zelle löschen

Beitrag von mikeleb »

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: Alles auswählen

2
 2
 2
 3
 3
 5
 3
 3
 3
 2
 5 
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

Code: Alles auswählen

=uniques(A1;", ")
ergibt nun

Code: Alles auswählen

2, 3, 5
Gruß,
mikeleb
pityuse
Beiträge: 3
Registriert: Do, 12.02.2015 09:03

Re: Mehrfach auftretende Strings in einer Zelle löschen

Beitrag von pityuse »

Danke Mike, das ist genau das, was ich gesucht habe. Wie kann ich mich revanchieren? Vermutlich überhaupt nicht. Wenn du mal Hilfe oder einen Tipp mit Finnisch/Finnland brauchst, dann schicke mir eine PN.
Gruß
Andreas
Antworten