3k Aufrufe
Gefragt in Tabellenkalkulation von
bin absoluter neuling und möchte den inhalt einer variablen alphabetisch sortieren.
also wenn da "erad" steht soll es dann "ader" sein
ich möchte mit vba arbeiten

11 Antworten

0 Punkte
Beantwortet von beverly Experte (3.5k Punkte)
Hi Aron,

zerlege zuerst die Variable in ihre Einzelbestandteile und schreibe sie dabei in ein Array. Sortiere dann dieses Array. Danach setzt du die Variable aus dem Arrayinhalt neu zusammen:


Sub VariableSortieren()
Dim arrWert()
Dim strWert As String
Dim intZaehler As Integer
strWert = "erad"
' Größe des Array aus der Buchstabenanzahl festlegen, Array beginnt bei 0
ReDim arrWert(0 To Len(strWert) - 1)
' Schleife über alle Bestandteile der Variablen
For intZaehler = 1 To Len(strWert)
' jeweils Einzelwert ins Array eintragen
arrWert(intZaehler - 1) = Mid(strWert, intZaehler, 1)
Next intZaehler
' Array sortieren
QuickSort arrWert
' ursprünglichen Variableninhalt löschen
strWert = ""
' Schleife über alle Arrayfelder
For intZaehler = 0 To UBound(arrWert())
' Variable zusammensetzen
strWert = strWert & arrWert(intZaehler)
Next intZaehler
MsgBox strWert
End Sub

Sub QuickSort(ByRef VA_Array, Optional V_Low1, Optional V_High1)
' http://www.herber.de/forum/archiv/108to112/t109556.htm
On Error Resume Next
Dim V_Low2 As Long, V_High2 As Long
Dim V_Val1, V_Val2 As Variant
If IsMissing(V_Low1) Then
V_Low1 = LBound(VA_Array, 1)
End If
If IsMissing(V_High1) Then
V_High1 = UBound(VA_Array, 1)
End If
V_Low2 = V_Low1
V_High2 = V_High1
V_Val1 = VA_Array((V_Low1 + V_High1) / 2)
While (V_Low2 <= V_High2)
While (VA_Array(V_Low2) < V_Val1 And _
V_Low2 < V_High1)
V_Low2 = V_Low2 + 1
Wend
While (VA_Array(V_High2) > V_Val1 And _
V_High2 > V_Low1)
V_High2 = V_High2 - 1
Wend
If (V_Low2 <= V_High2) Then
V_Val2 = VA_Array(V_Low2)
VA_Array(V_Low2) = VA_Array(V_High2)
VA_Array(V_High2) = V_Val2
V_Low2 = V_Low2 + 1
V_High2 = V_High2 - 1
End If
Wend
If (V_High2 > V_Low1) Then Call _
QuickSort(VA_Array, V_Low1, V_High2)
If (V_Low2 < V_High1) Then Call _
QuickSort(VA_Array, V_Low2, V_High1)
End Sub


Bi später,
Karin

P.S. An den "Kommentarschreiber"
Ein qualifizierter und kompetenter Beitrag mit einem Lösungsvorschlag zum Problem wäre für den Fragesteller wesentlich hilfreicher gewesen.
0 Punkte
Beantwortet von
Hi All,

coole Lösung. Das geht sogar noch etwas einfacher.

Sub VariableSortieren()
MsgBox Varsort("erad")
End Sub

Public Function Varsort(var As String) As String
'sortiert nach Reihenfolge des Ascii-Codes

Dim arr(255)
For p = 1 To Len(var)
zchn = Mid(var, p, 1)
arr(Asc(zchn)) = zchn
Next p

For i = 1 To UBound(arr)
If arr(i) <> "" Then Varsort = Varsort + arr(i)
Next i

End Function

Mr. K.
0 Punkte
Beantwortet von
Kommando zurück. Jeder Buchstabe wird leider nur einmal angesprochen.
Hiermit klappts aber:

Sub VariableSortieren2()
MsgBox Varsort("Hähnchen")
End Sub

Public Function Varsort(var As String) As String
'sortiert nach Reihenfolge des Ascii-Codes

Dim arr(255) As Byte
For p = 1 To Len(var)
zchn = Mid(var, p, 1)
arr(Asc(zchn)) = arr(Asc(zchn)) + 1
Next p

For i = 1 To UBound(arr)
If arr(i) > 0 Then
Varsort = Varsort + Chr(i)
arr(i) = arr(i) - 1
i = i - 1
End If
Next i

End Function

Mr. K.
0 Punkte
Beantwortet von
das klappt leider so nicht.
0 Punkte
Beantwortet von beverly Experte (3.5k Punkte)
Hi,

bei deinem Beispiel "erad" wird am Ende anstelle von doch "ader" ausgegeben - WAS also klappt nicht? Solch allgemeine Aussagen sind alles andere als hilfreich.

Bis später,
Karin
0 Punkte
Beantwortet von
man kann auch mit KANONEN auf spatzen schiessen.

nimm einfach ein engebaute funktion string sort und gut ist
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi all ^^

*das hier von Excel 3000 gesprochen wird,wird,wo ich noch Excel 2000 besitze,finde ich gemein :-(*

gruss nighty
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi all ^^

ops ,Schreibfehler auch noch

gruss nighty
0 Punkte
Beantwortet von
Ich habe zwar keine Lösung,jedoch falls ich welche hätte, dann würde ich sie für mich behalten.
Aber mal ernst, nach den bisherigen Lösungsvorschlägen ist dir nichts mehr als
das klappt leider so nicht.
eingefallen?
Wo hapert es denn?

Zumindest soviel Respekt vor den die sich dein Problem mehr als nur durchgelesen haben, sollte schon vorhanden sein.
Aber das ist hier leider zum Standard geworden, nur nehmen und das so viel wie möglich, aber ohne was zu geben.
Oder kurz, hier wird meistens nur noch konsumiert.
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi tabellculation ^^

*Applaus* ;das liest sich richtig gut *knuddel knuddel*

gruss nighty
...