Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1456to1460
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Zahlen aus einer Zelle sortieren?

Zahlen aus einer Zelle sortieren?
12.11.2015 11:39:30
Janosch
Guten Tag miteinander,
ich stehe grade vor dem Problem, dass ich recht viele Zellen mit Inhalten wie zB. diesem hier habe: 391 153 40 347 16 3 456 382 365 441 412
Ich brauche diese Zahlen aber in aufsteigender Form (in der gleichen Zelle).
Ich habe mir einen Workaround ausgedacht, der allerdings ziermlich umständlich ist:
Ich nutze die "Text in Spalten" funktion, kopiere dann diese Spalten um die Inhalte dann in transponierter Form wieder an eine leere Stelle zu kopieren. Dann sortiere ich diesen Bereich aufsteigend und kopiere die sortierten Zahlen in ein Worddokument um entsprechende Umbrüche durch Leerzeichen zu ersetzen.
Ich nehme an, dass das reichlich umständlich ist. Aber nach etwas googlen und überlegen kommt mir keine bessere Idee.
Hat von euch Fachleuten vielleicht jemand eine Idee geschweige denn die Lösung?
Schöne Grüße
Jolonosch

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zahlen aus einer Zelle sortieren?
12.11.2015 12:35:49
MCO
Hallo!
Ich hab dir mal eine Funktion gebaut, die die Aufgabe erledigt.
Du gehst auf die Zelle die sortiert werden soll, rechte Maustaste, erster Eintrag.
Im Grunde mache ich das, was du auch schon gemacht hast, jedoch automatisch.
Viel Erfolg!
https://www.herber.de/bbs/user/101456.xlsm
Gruß, MCO

AW: Zahlen aus einer Zelle sortieren?
12.11.2015 12:50:56
Janosch
Top! Vielen Dank MCO!
Das vereinfacht das ganze schon ungemein!
Wäre es kompliziert, dass auf mehrere Zellen in einer Spalte anzuwenden?

Anwendung auf alle gewählten Zellen bzw Bereich
12.11.2015 13:13:39
MCO
Hi!
Tausche den Code aus:
Public Function Inhalt_sortieren()
Dim rng As Variant
Dim x As Single
Dim zahlen As Range, bereich As Range
Dim txt As String
For Each cl In Selection
rng = Split(Trim(Replace(cl.Value, "  ", " ")))
txt = ""
For x = 0 To UBound(rng)
Cells(cl.Row, Columns.Count - x) = rng(x)
Next x
Set zahlen = Cells(cl.Row, Columns.Count).CurrentRegion
For x = 0 To UBound(rng)
txt = txt & " " & WorksheetFunction.Small(zahlen, x + 1)
Next x
zahlen.ClearContents
cl.Value = Trim(txt)
Next cl
Set zahlen = Nothing
End Function
Der gilt jetzt für alle gewählten Zellen, egal ob eine oder mehrere. Vorraussetzung ist der Inhalt, sonst läuft der Code auf Fehler.
Habe auch noch eingebaut, dass mehrere Leerzeichen ignoriert werden, außerdem führende und folgende Leerzeichen.
Wenn der Bereich immer der gleiche ist, kannst du die Zeile am Anfange der Schleife durch diese austauschen:
    For Each cl In Range("D2:D1000").SpecialCells(xlCellTypeConstants)

Das heißt z.B. jede zelle im Bereich D2 bis D1000, in denen Konstanten stehen.
(wie zu Fuss: spalte D markieren, F5, Inhalte..., Konstanten)
Gruß, MCO

Anzeige
AW: Zahlen aus einer Zelle sortieren?
12.11.2015 12:57:40
fcs
Hallo Janosch,
hier eine benutzerdefinierte VBA-Funktion, die du wie eine normale Tabellenfunktion nutzen kannst.
Wenn du direkt die Zellinhalte umwandeln willst, dann die Zellen markieren und Makro prcZellinhalSortieren starten
Gruß
Franz
'Code in einem allgemeinen Modul der Datei
Option Explicit
Sub prcZellinhaltSortieren()
If MsgBox("Inhalte in den selektierten Zellen am Leerzeichen splitten und Inhalt sortieren",  _
_
vbOKCancel, "Makro: prcZellinhaltSortieren") = vbCancel Then Exit Sub
Dim Zelle As Range
Application.ScreenUpdating = False
For Each Zelle In Selection
If Trim(Zelle.Text)  "" Then
Zelle.Value = fncSortieren(sText:=Zelle.Text, sTrennzeichen:=" ")
End If
Next
Application.ScreenUpdating = True
End Sub
Public Function fncSortieren(sText As String, sTrennzeichen As String)
'Teilt die texte am Trennzeichen, Sortiert aufsteigend und gibt sortierte Zahlenfolge zurück
'Formelbeispiel in Tabellenzelle: =fncSortieren(A2;" ")
Dim arrText As Variant, intK As Integer
Dim arrZahl()
If Trim(sText) = "" Then fncSortieren = "": Exit Function
arrText = VBA.Split(sText, sTrennzeichen)
ReDim arrZahl(LBound(arrText) To UBound(arrText))
For intK = LBound(arrText) To UBound(arrText)
If IsNumeric(arrText(intK)) Then
arrZahl(intK) = CLng(arrText(intK))
Else
arrZahl(intK) = arrText(intK)
End If
Next
If LBound(arrText) = UBound(arrText) Then
fncSortieren = sText
Else
Call QuickSort(arrZahl)
fncSortieren = VBA.Join(arrZahl, sTrennzeichen)
End If
End Function
'Quicksort hier stibitzt: https://www.herber.de/forum/archiv/108to112/109556_Alphabetisch_sortieren_mit_QuickSort.html#109556
Public Sub QuickSort(ByRef VA_array, Optional V_Low1, Optional V_high1)
On Error Resume Next
Dim V_Low2, V_high2, V_loop As Integer
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_val1 And _
V_high2 > V_Low1)
V_high2 = V_high2 - 1
Wend
If (V_Low2  V_Low1) Then Call QuickSort(VA_array, V_Low1, V_high2)
If (V_Low2 

Anzeige

330 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige