721 Aufrufe
Gefragt in Tabellenkalkulation von service9500 Einsteiger_in (3 Punkte)
Hi,

habe ein kleines Problem.

Ich möchte gerne eine Liste mit IP-Adressen sortieren.
Leider sortiert es mir Excel folgendermaßen:

12.16.29.1
12.16.29.10
12.16.29.100
12.16.29.12
12.16.29.125
12.16.29.13

und brauchen tue ich es als

12.16.29.1
12.16.29.10
12.16.29.12
12.16.29.13
12.16.29.100
etc.

Wie kann ich die Zellen formatieren, damit mir Excel die Zeilen richtig sortiert?

Gruß

Service9500

8 Antworten

0 Punkte
Beantwortet von cherry Einsteiger_in (9 Punkte)
Hallo Helmut

Bei mir funktioniert's nicht. Deine Formel ergibt bei der Adresse 172.168.1.2 = 01720.1608.10.2

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

hier noch ein wenig spielerei bzw eine benuzerdefinierte variante :-))

gruss nighty

Function SumZahlen(Zellen As Variant) As String
Application.Volatile
Dim Zelle As Range
Dim Zeichen As Integer
Dim Schalter As Boolean
Dim ArrInd As Integer
Dim AddSt As Integer
ReDim Arrfeld(Len([Zellen])) As String
ArrInd = 1
If IndexBlock > Len([Zellen]) Then IndexBlock = Len([Zellen])
For Zeichen = 1 To Len([Zellen])
If Mid([Zellen], Zeichen, 1) Like "[0-9]" = True Then
Arrfeld(ArrInd) = Arrfeld(ArrInd) & Mid([Zellen], Zeichen, 1)
Schalter = True
End If
If Schalter = True And Mid([Zellen], Zeichen, 1) Like "[0-9]" = False Then
ArrInd = ArrInd + 1
Schalter = False
End If
Next Zeichen
For AddSt = 1 To UBound(Arrfeld)
If Len(Arrfeld(AddSt)) = 1 Then SumZahlen = SumZahlen & "00" & Arrfeld(AddSt) & "."
If Len(Arrfeld(AddSt)) = 2 Then SumZahlen = SumZahlen & "0" & Arrfeld(AddSt) & "."
If Len(Arrfeld(AddSt)) = 3 Then SumZahlen = SumZahlen & Arrfeld(AddSt) & "."
Next AddSt
SumZahlen = Mid(SumZahlen, 1, Len(SumZahlen) - 1)
End Function
0 Punkte
Beantwortet von saarbauer Profi (15.6k Punkte)
Hallo @Cherry ,

dein Problem ist mit meiner Lösung

="0"&TEIL(A1;1;3)&"0"&TEIL(A1;4;3)&"0"&TEIL(A1;7;3)&WENN(LÄNGE(TEIL(A1;10;3))=3;TEIL(A1;10;3);WENN(LÄNGE(TEIL(A1;10;3))=2;"0"&TEIL(A1;10;3);"00"&TEIL(A1;10;3)))


nicht zu machen, da dort von anderen Voraussetzungen ausgegangen wird. es handelt sich bei den den IP-Nummern von @service9500 immer um zweistellige Blöcke, bis auf den letzten. bei dir sind 2 dreistellige Blöcke und 2 einstellige. Zudem hast du nur einen Wert zur Verfügung gestellt und wie die anderen aussehen?

Gruß

Helmut

P.S. du solltest in Zukunft einen eigenen Thread eröffnen, da dann besser auf dein spezielles Problem eingegangen werden kann
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi all ^^

hier ein beispiel fuer spalte a

gruss nighty

was los helmut keine ideen ?

was los admin ,die folgefrage ist aktuell und gaeste ausgeschlossen ?

Public Sub Beispiel()
Dim ZeilenA As Long
ZeilenA = Sheets(1).Range("A" & Rows.Count).End(xlUp).Row
ReDim intArray(ZeilenA, 1) As Variant
intArray() = Range("A1:A" & ZeilenA)
For Index = 1 To ZeilenA
intArray(Index, 1) = IPer(intArray(Index, 1))
Next Index
Range("A1:A" & ZeilenA) = intArray()
End Sub
Function IPer(Zellen As Variant) As String
Application.Volatile
Dim Zelle As Range
Dim Zeichen As Integer
Dim Schalter As Boolean
Dim ArrInd As Integer
Dim AddSt As Integer
ReDim Arrfeld(Len([Zellen])) As String
ArrInd = 1
If IndexBlock > Len([Zellen]) Then IndexBlock = Len([Zellen])
For Zeichen = 1 To Len([Zellen])
If Mid([Zellen], Zeichen, 1) Like "[0-9]" = True Then
Arrfeld(ArrInd) = Arrfeld(ArrInd) & Mid([Zellen], Zeichen, 1)
Schalter = True
End If
If Schalter = True And Mid([Zellen], Zeichen, 1) Like "[0-9]" = False Then
ArrInd = ArrInd + 1
Schalter = False
End If
Next Zeichen
For AddSt = 1 To UBound(Arrfeld)
If Len(Arrfeld(AddSt)) = 1 Then IPer = IPer & "00" & Arrfeld(AddSt) & "."
If Len(Arrfeld(AddSt)) = 2 Then IPer = IPer & "0" & Arrfeld(AddSt) & "."
If Len(Arrfeld(AddSt)) = 3 Then IPer = IPer & Arrfeld(AddSt) & "."
Next AddSt
IPer = Mid(IPer, 1, Len(IPer) - 1)
End Function
0 Punkte
Beantwortet von saarbauer Profi (15.6k Punkte)
Hallo @nighty,

Ideen schon, blos gestern keine Lust (Weiberfastnacht).

Ausserdem ist eine Angabe etwas Mager man sollte schon in etwa wissen wie die anderen Daten aufgebaut sind (gleiches Schema oder anders).

Gruß

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

@helmut
:-)

@all
noch zum abschluss

die folgende syntax ist nur notwendig zur aktualisierung bei direkten einsatz einer function,im obigen beispiel also nicht notwendig da der aufruf ja ueber ein makro erfolgt

Application.Volatile


gruss nighty
0 Punkte
Beantwortet von cherry Einsteiger_in (9 Punkte)
Hallo zusammen

Sorry für die wenigen Angaben. Ich hatte eine Lösung für alle Adressen gesucht, es sollte egal welche Oktetts wieviele Zahlen hat. Die Lösung von Helmut ist wie ich herausgefunden hab zu statisch.

Danke Nighty für dein Code, werde es mal ausprobieren.

Habe übrigens hier angehängt, weil ich genau das gleiche Problem hatte wie serice9500, nur für x-beliebige IP-Adresse. Ich muss es sortieren können. Wenn ich ein neues Tread eröffnet hätte, wäre das auch nicht recht gewesen!

Nochmals vielen Dank für eure Hilfe.

Gruss
Michelle
0 Punkte
Beantwortet von saarbauer Profi (15.6k Punkte)
Hallo,

nur mit einer Formel ist es sehr schwierig zu machen, da du die Trennungspunkte jedesmal suchenmusst und danndarüber die Auffüllnullen ermitteln. Ich bin an der maximalen längeder Formel gescheitert, daher ist es aus meiner Sicht hier nur mit einem Makro zu machen.

Da @nighty schon einen Vorschlag gemacht hat, der aus meiner Sicht funktionieren müsse, mach ich keinen weiteren.

Gruß

Helmut
...