4.6k Aufrufe
Gefragt in Tabellenkalkulation von saharra Mitglied (113 Punkte)
Hallo Leute,

ich habe folgendes Problem. In meiner Exceltabelle stehen in einer Zelle mehrere Zahlen untereinander. Diese Zahlen würde ich gerne jeweils einzeln in einer Zelle anzeigen.

Beispiel:

In Zelle A1 steht

12345
45362
67543
83492
43526

Das Ergebnis soll sein:

A1: 12345
A2: 45362
A3: 67543
A4: 83492
A5: 43526

Vielleicht mit VBA???
Schon mal vielen Dank im Voraus

11 Antworten

0 Punkte
Beantwortet von rainberg Profi (14.9k Punkte)
Hallo,

darf's auch eine Formel sein?

Wenn ja, trage diese Formel in eine Zelle ein und kopiere sie nach Bedarf nach unten.


=TEIL(A$1;ZEILE(A1)*6-5;5)

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

wie gewünscht

gruss nighty

Option Explicit
Sub ZahlenTrennen()
Dim Index As Long
Dim Zelle As Integer
Dim LetzteZeile As Long
Dim Zaehler As Integer
Dim Izahl As Long
Index = 2
LetzteZeile = Cells(Rows.Count, 1).End(xlUp).Row
ReDim SpalteA(LetzteZeile, 1) As Variant
ReDim SpalteB(Rows.Count, 1) As Variant
SpalteA() = Range("A1:A" & LetzteZeile)
SpalteB() = Range("A1:A" & Rows.Count)
For Zelle = 2 To LetzteZeile
For Zaehler = 1 To Len(SpalteA(Zelle, 1))
Izahl = Val(SumZahlen(SpalteA(Zelle, 1), Zaehler))
If Izahl > 0 Then
SpalteB(Index, 1) = Izahl
If Index > Rows.Count Then
MsgBox ("Zeilenanzahl wurde überschritten und das Makro abgebrochen")
End
End If
Index = Index + 1
Else
Exit For
End If
Next Zaehler
Range("A1:A" & Rows.Count) = SpalteB()
Next Zelle
End Sub
Function SumZahlen(Zellen As Variant, zaehler1 As Integer) As String
Dim Zelle As Range
Dim zeich1 As Integer
Dim schalter As Boolean
Dim zaehler3 As Integer
ReDim zaehler2(Len([Zellen])) As String
zaehler3 = 1
Application.Volatile
If zaehler1 > Len([Zellen]) Then zaehler1 = Len([Zellen])
For zeich1 = 1 To Len([Zellen])
If Mid([Zellen], zeich1, 1) Like "[0-9,.]" = True Then
zaehler2(zaehler3) = zaehler2(zaehler3) & Mid([Zellen], zeich1, 1)
schalter = True
End If
If schalter = True And Mid([Zellen], zeich1, 1) Like "[0-9,.]" = False Then
zaehler3 = zaehler3 + 1
schalter = False
End If
Next zeich1
SumZahlen = zaehler2(zaehler1)
End Function
0 Punkte
Beantwortet von saharra Mitglied (113 Punkte)
Hallo Rainer, hallo nighty,

es gestaltet sich so, dass in dem Sheet nicht nur Zahlen, sondern auch Text steht. Und das Sheet ist nen paar Zeilen länger als nur Zeile A (leider :-))
Nun habe ich beide Lösungsansätze ausprobiert und es hat nicht funktioniert.

@nighty ich hab schon versucht integer in variant umzumodeln, ging aber auch nicht.

Hat noch wer ne Idee?? ich wäre echt dankbar...
0 Punkte
Beantwortet von rainberg Profi (14.9k Punkte)
Hallo saharra,

warum stellst Du die Frage nicht gleich so, wie sie sich auch tatsächlich darstellt???

Solche Nachreichungen kosten auch die Zeit des Helfers und erfordern unnötige Postings.
Auch jetzt ist mir noch nicht klar wo was steht und wo welches Ergebnis stehen soll.

Eine Beispieldatei könnte helfen.

Gruß
Rainer
0 Punkte
Beantwortet von saharra Mitglied (113 Punkte)
Sorry,

dachte den Rest kann ich dann so lösen.

Wie mache ich das mit einer Beispieldatei. Bzw. wie lasse ich sie dir zukommen??

Grüße
0 Punkte
Beantwortet von rainberg Profi (14.9k Punkte)
Hallo,

lade die Datei auf den kostenlosen WebSpace eines Filehosters Deiner Wahl und poste dann den Dir zugeteilten Download-Link hier im Beitrag.

Ein möglicher Hoster wäre:


www.file-upload.net/

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

es koennten verbundene zellen und oder geschuetzte bereiche vorliegen

und korrigiert (ueberlauf)

gruss nighty

Option Explicit
Sub ZahlenTrennen()
Dim Index As Long
Dim Zelle As Long
Dim LetzteZeile As Long
Dim Zaehler As Integer
Dim Izahl As Long
Index = 2
LetzteZeile = Cells(Rows.Count, 1).End(xlUp).Row
ReDim SpalteA(LetzteZeile, 1) As Variant
ReDim SpalteB(Rows.Count, 1) As Variant
SpalteA() = Range("A1:A" & LetzteZeile)
SpalteB() = Range("A1:A" & Rows.Count)
For Zelle = 2 To LetzteZeile
For Zaehler = 1 To Len(SpalteA(Zelle, 1))
Izahl = Val(SumZahlen(SpalteA(Zelle, 1), Zaehler))
If Izahl > 0 Then
SpalteB(Index, 1) = Izahl
Index = Index + 1
If Index > Rows.Count Then
MsgBox ("Zeilenanzahl wurde überschritten und das Makro abgebrochen")
End
End If
Else
Exit For
End If
Next Zaehler
Range("A1:A" & Rows.Count) = SpalteB()
Next Zelle
End Sub

Function SumZahlen(Zellen As Variant, BlNr As Integer) As String
Dim Zelle As Range
Dim ZeichenAnz As Integer
Dim Schalter As Boolean
Dim Index As Integer
ReDim NeuArr(Len([Zellen])) As String
Index = 1
Application.Volatile
If BlNr > Len([Zellen]) Then BlNr = Len([Zellen])
For ZeichenAnz = 1 To Len([Zellen])
If Mid([Zellen], ZeichenAnz, 1) Like "[0-9,.]" = True Then
NeuArr(Index) = NeuArr(Index) & Mid([Zellen], ZeichenAnz, 1)
Schalter = True
End If
If Schalter = True And Mid([Zellen], ZeichenAnz, 1) Like "[0-9,.]" = False Then
Index = Index + 1
Schalter = False
End If
Next ZeichenAnz
SumZahlen = NeuArr(BlNr)
End Function
0 Punkte
Beantwortet von
Hallo saharra,

ich kann nicht erkennen, warum Rainers Formel aus AW1 nicht auch mit reinem mehrzeiligen Text oder gemischtem mehrzeiligen Inhalt funktionieren sollte, so lange jede einzelne "Zeile innerhalb der Zelle" genau 5 Zeichen enthält. Wenn Deine Ausgangsdaten in A1 stehen, können die Ergebnisse natürlich nicht auch in A1:A5 beginnen, sondern bestenfalls ab A2:A6 oder in jedem anderen freien Bereich, in den Du die Formel eintragen und so weit runterkopieren musst, wie nötig.

Auch wenn die Ergebnisse entgegen Deiner ursprünglichen Fragestellung nun nebeneinander (in mehreren Zellen einer Zeile) stehen sollen, gibt es eine analoge Formellösung:

=TEIL($A1; SPALTE(A1) * 6 - 5; 5)

MfG Charlotte
0 Punkte
Beantwortet von saharra Mitglied (113 Punkte)
Hier der Downloadlink:

http://www.file-upload.net/download-2084924/Beispiel.xls.html

PS: Leider hat nicht jede Zeile 5Einträge.
Ich merk schon, das wird schwieriger.

Grüße
0 Punkte
Beantwortet von rainberg Profi (14.9k Punkte)
Hallo saharra,

hättest Du Dein Problem gleich so geschildert, wie es sich jetzt darstellt, hätte ich keinen Formelvorschlag gemacht.
Somit verabschiede ich mich aus diesem Thread.

Gruß
Rainer
...