3.7k Aufrufe
Gefragt in Tabellenkalkulation von korfuweb Mitglied (949 Punkte)
Nach Zahlen nicht nach Text sortieren!

Hallo Supportgemeinde,

Mal wieder was kniffliges – (zumindest für mich).

Will einfach nach Zahlen sortieren anstatt nach Text – diesbezüglich möchte ich mir einfach eine Hilfsspalte anlegen, die aus dem „Textwert einen Zahlewert macht.
Beispiel:
Habe folgende Werte in Spalte A:

SK-54345-00-01
O-102-00-01
P-3332-00-03

Nun soll in Spalte B einfach die alphanumerische Zeichen entfernt werden das das ganze so aussieht:
543450001
1020001
33320003

Hab schon verschienden Sachen mit TEIL(…;FINDEN….usw probiert komm aber irgendwie nicht richtig weiter.

Für Hilfe von den Profis hier wäre ich dankbar!

Gruß Volker

16 Antworten

0 Punkte
Beantwortet von coros Experte (4k Punkte)
HAllo Volker,

da mir Formeln nicht so liegen, habe ich Dir mal ein VBA-Makro erstellt, welches Dir die Zellen, die Du vorher markieren musst (können auch ganze Bereiche oder eine ganze Spalte sein), "auseinandernimmt" und nur die Zahlen wie gewünscht eine Spalte weiter nach rechts aufführt.

Kopiere das Makro in ein StandardModul und starte es z.B. über eine Befehlsschaltfläche
Teste das Makro aber bitte in einer Testdatei und nicht gleich in Deiner Originaldatei.

Option Explicit

Sub Numerische_Zahlen_rausfiltern()
Dim intWortteil As Integer
Dim strArray As String
Dim rngZelle As Range
For Each rngZelle In Selection
strArray = ""
rngZelle.Offset(0, 1).Clear
For intWortteil = 1 To Len(rngZelle)
If IsNumeric(Mid(rngZelle.Value, intWortteil, 1)) = True Then _
strArray = strArray & Mid(rngZelle.Value, intWortteil, 1)
Next
On Error Resume Next
rngZelle.Offset(0, 1) = CDbl(strArray)
On Error GoTo 0
Next
End Sub
Ich hoffe, Du kommst klar. Bei Fragen melde Dich.

MfG,
Oliver
[sub]Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du[/sub]
[sup] ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.[/sup]
0 Punkte
Beantwortet von rainberg Profi (14.9k Punkte)
Hallo Volker,

für die Hilfsspalte könntest Du folgende Matrixformel verwenden
(Formeleingabe mit Strg+Shift+Enter bestätigen)

Formel für B1, Werte stehen in A1:Axxx

=SUMME((TEIL(0&A1;KGRÖSSTE(WENN(ISTZAHL(TEIL(0&A1;ZEILE($1:$
256);1)*1);ZEILE($1:$256);1);ZEILE($1:$256));1)*1)*10^(ZEILE($1:$256)-
1))

Gruß
Rainer
0 Punkte
Beantwortet von rainberg Profi (14.9k Punkte)
Hallo Volker,

wenn die Stringmuster alle so aussehen, wie aus den 3 geposteten
Werten zu ersehen ist, reicht auch folgende Normalformel


=--WECHSELN(TEIL(A1;FINDEN("-";A1)+1;99);"-";"")

Gruß
Rainer
0 Punkte
Beantwortet von korfuweb Mitglied (949 Punkte)
Zunächst mal vielen Dank für die Antworten:
@Oliver
Dein VBA funktioniert - leider ist das bei größeren Datenmengen etwas langsam.

@Rainer
Irgendwo in der 1ten Formel ist ein Fehler - mhhh arbeite daran diesen zu finden.

Die zweite Formel funktioniert super - allerdings wenn kleine Abweicheungen in der Nr. sind. Z.B. P300-123-00-03/BH - versagt diese leider.
Im Augenblick funktioniert es, jedoch weiß ich nicht ob in Zukunft die Kombination genau in dieser Form erhalten bleibt.

Deshalb suche ich immer noch nach einer Lösung das definitiv nur die Zahlen in eine neue Zelle eingefügt werden unabhängig wie die einzelne Schreibweise der einzelnen Zahlenwerte ist.

Danke für eure bisherige Hilfe - hat mich schon ein ganzes Stück nach vorne gebracht.

Gruß Volker
0 Punkte
Beantwortet von coros Experte (4k Punkte)
Hallo Volker,

hänge bei meinem Code gleich am Anfang die Zeilen

With Application
.ScreenUpdating = False
.Calculation = xlCalculationManual
End With
und am Ende des Codes die Zeilen

With Application
.ScreenUpdating = True
.Calculation = xlCalculationAutomatic
End With
an, dann wird es etwas schneller.

MfG,
Oliver
[sub]Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du[/sub]
[sup] ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.[/sup]
0 Punkte
Beantwortet von rainberg Profi (14.9k Punkte)
Hallo Volker,

- allerdings wenn kleine Abweicheungen in der Nr. sind. Z.B. P300-
123-00-03/BH - versagt diese leider.


.... das ist logisch.
Man müsste eben wissen, welche Abweichungen da vorkommen können,
um die Formel anzupassen.

Die erste Formel hat bei mir funktioniert, leider sehe ich Deine Datei nicht
und kann deshalb nicht sagen warum es bei Dir nicht funktioniert.

Gruß
Rainer
0 Punkte
Beantwortet von rainberg Profi (14.9k Punkte)
Hallo Volker,

vielleicht hilft das weiter

rapidshare.com/files/280029108/Volker.xls.html

Gruß
Rainer
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi all ^^

bei ca 60 000 zellen unter 1 sekunde

gruss nighty

Sub NurZahlen()
ReDim SpalteA(Cells(Rows.Count, 1).End(xlUp).Row, 1) As Variant
Dim Zelle As Long
Dim Zeichen As Variant
Dim Puffer As String
SpalteA() = Range("A1:A" & Cells(Rows.Count, 1).End(xlUp).Row)
For Zelle = 2 To Cells(Rows.Count, 1).End(xlUp).Row
For Zeichen = 1 To Len(SpalteA(Zelle, 1))
If IsNumeric(Mid(SpalteA(Zelle, 1), Zeichen, 1)) = True Then Puffer = Puffer & Mid(SpalteA(Zelle, 1), Zeichen, 1)
Next Zeichen
SpalteA(Zelle, 1) = Puffer
Puffer = ""
Next Zelle
Range("A1:A" & Cells(Rows.Count, 1).End(xlUp).Row) = SpalteA()
End Sub
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi all ^^

schneller ist nur noch ein dictionary object :-))

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

wennman bei der ersten schleife statt

Cells(Rows.Count, 1).End(xlUp).Row

eine variable einsetzt

spart man sich bestimmt auch noch einige tausendstel sekunden

gruss nighty
...