Supportnet / Forum / Tabellenkalkulation
Zelleninhalt auf mehrere Zeilen verteilen
Frage
Hallo,
ich bin auf der Suche nach einem Makro, mit dem ich folgendes Problem lösen kann:
So ist meine Tabelle grundsätzlich aufgebaut:
Zelle A1 = 10
Zelle B1 = 8000..8002|8020|8050..8060|8100
Zelle A2 = 20
Zelle B2 = 4000..4020|4050|4060
Die Punkte (..) bedeuten von bis und
der Strich (|) bedeutet UND .
Ich hätte gerne, dass jede Zahl in der B-Spalte in einer neuen Zeile abgebildet wird, d.h.
Spalte A Spalte B
10 8000
10 8001
10 8002
10 8020
.....
10 8100
20 4000
20 4001
.....
20 4060
Kann man so etwas mit einem Makro abbilden ?
Da ich blutiger Anfänger bin , habe ich gedacht, ich frage einfach mal nach. Im vorraus schon besten Dank für Eure Hilfe.
Blacky$$$
Antwort 1 von Saarbauer
Hallo,
wäre über ein Makro machbar, aber dazu sind noch einige Ergänzungen erforderlich.
Der genau Aufbau der Daten in Spalte B
1. immer 4 Stellen ?
2. wie getrennt oder auch nicht?
3 Anzahl der Werte bekannt oder variabel?
4. Daten in anderes Tabellenblatt oder das gleiche?
Gruß
Helmut
wäre über ein Makro machbar, aber dazu sind noch einige Ergänzungen erforderlich.
Der genau Aufbau der Daten in Spalte B
1. immer 4 Stellen ?
2. wie getrennt oder auch nicht?
3 Anzahl der Werte bekannt oder variabel?
4. Daten in anderes Tabellenblatt oder das gleiche?
Gruß
Helmut
Antwort 2 von Blacky___
Hallo Helmut,
vielen Dank für Deine schnelle Antwort.
Ich versuche jetzt mal Deine Fragen zu beantworten:
1. immer 4 Stellen ?
Ja, die Zahlen haben immer 4 Stellen.
2. wie getrennt oder auch nicht?
Ich verstehe nicht ganz, was Du damit meinst.
Die Trennung der einzelnen Blöcke (8000..8002 ist für mich ein Block) erfolgt immer durch das "|"-Zeichen. Meinst Du das?
3 Anzahl der Werte bekannt oder variabel?
Die Werte stehen in der Regel 50 Zeilen und die Zahlen liegen zwischen 1000 und 9999.
4. Daten in anderes Tabellenblatt oder das gleiche?
Die Daten sollen in ein neues Tabellenblatt geschrieben werden.
Ich hoffe, dass damit Deine Fragen ausreichend geklärt sind.
Viele Grüße
Rainer
vielen Dank für Deine schnelle Antwort.
Ich versuche jetzt mal Deine Fragen zu beantworten:
1. immer 4 Stellen ?
Ja, die Zahlen haben immer 4 Stellen.
2. wie getrennt oder auch nicht?
Ich verstehe nicht ganz, was Du damit meinst.
Die Trennung der einzelnen Blöcke (8000..8002 ist für mich ein Block) erfolgt immer durch das "|"-Zeichen. Meinst Du das?
3 Anzahl der Werte bekannt oder variabel?
Die Werte stehen in der Regel 50 Zeilen und die Zahlen liegen zwischen 1000 und 9999.
4. Daten in anderes Tabellenblatt oder das gleiche?
Die Daten sollen in ein neues Tabellenblatt geschrieben werden.
Ich hoffe, dass damit Deine Fragen ausreichend geklärt sind.
Viele Grüße
Rainer
Antwort 3 von Saarbauer
Hallo,
im großen und ganzen alles beantwortet bis Frage 2
ich meinte, ob in einem Block immer gleichviel Zahlen stehen oder unterschiedlich
so gemeint
8000|8001|8002|8003
2000|2001|2002|2003
(hier immer 4 Zahlen)
oder so
8000|8001|8002|8003
2000|2001|2002|2003 |2004
Gruß
Helmut
im großen und ganzen alles beantwortet bis Frage 2
ich meinte, ob in einem Block immer gleichviel Zahlen stehen oder unterschiedlich
so gemeint
8000|8001|8002|8003
2000|2001|2002|2003
(hier immer 4 Zahlen)
oder so
8000|8001|8002|8003
2000|2001|2002|2003 |2004
Gruß
Helmut
Antwort 4 von Saarbauer
Hallo,
mein Lösungsvorschlag
Sub Aufteilen()
LetzteZeile = Range("Tabelle1!A65536").End(xlUp).Row
Sheets("Tabelle2").Select
k = 1
For i = 1 To LetzteZeile
Zahl_a = Range("Tabelle1!A" & i).Value
Länge_Zahl = Len(Range("Tabelle1!B" & i).Value)
Zahl_b = Range("Tabelle1!b" & i).Value
For j = 4 To Länge_Zahl Step 5
Range("A" & k).Value = Range("Tabelle1!A" & i).Value
x = j - 3
Range("B" & k).Value = Mid(Zahl_b, x, 4)
k = k + 1
Next j
Next i
End Sub
müsste funktionieren
Gruß
Helmut
mein Lösungsvorschlag
Sub Aufteilen()
LetzteZeile = Range("Tabelle1!A65536").End(xlUp).Row
Sheets("Tabelle2").Select
k = 1
For i = 1 To LetzteZeile
Zahl_a = Range("Tabelle1!A" & i).Value
Länge_Zahl = Len(Range("Tabelle1!B" & i).Value)
Zahl_b = Range("Tabelle1!b" & i).Value
For j = 4 To Länge_Zahl Step 5
Range("A" & k).Value = Range("Tabelle1!A" & i).Value
x = j - 3
Range("B" & k).Value = Mid(Zahl_b, x, 4)
k = k + 1
Next j
Next i
End Sub
müsste funktionieren
Gruß
Helmut
Antwort 5 von Blacky___
Hallo Helmut,
wow, das geht aber schnell bei Dir.
Leider funzt die ganze Sache noch nicht wirklich.
Ich glaube, dass Du was übersehen hast.
Es stehen nicht nur Zahlenblöcke in Spalte B sondern auch Von-Bis-Anweisungen.
Beispiel: 8000..8002|8020 d.h.
8000
8001
8002
8020 gehören dazu.
Das macht die Sache glaube ich etwas komplizierter, oder?
Gruß
Rainer
wow, das geht aber schnell bei Dir.
Leider funzt die ganze Sache noch nicht wirklich.
Ich glaube, dass Du was übersehen hast.
Es stehen nicht nur Zahlenblöcke in Spalte B sondern auch Von-Bis-Anweisungen.
Beispiel: 8000..8002|8020 d.h.
8000
8001
8002
8020 gehören dazu.
Das macht die Sache glaube ich etwas komplizierter, oder?
Gruß
Rainer
Antwort 6 von Saarbauer
Hallo,
in dem Fall würde ich mir die Tabelle gern ansehen. Übersehen kann ich nicht direkt sagen, falscxh interpretiert, daher meine Fragen in AW1.
Im Pager findest du miel Mailadresse sende mir mal die Datei oder ein passendes Beispiel
Gruß
Helmut
in dem Fall würde ich mir die Tabelle gern ansehen. Übersehen kann ich nicht direkt sagen, falscxh interpretiert, daher meine Fragen in AW1.
Im Pager findest du miel Mailadresse sende mir mal die Datei oder ein passendes Beispiel
Gruß
Helmut
Antwort 7 von Saarbauer
Hallo,
wenn deine Daten so ausshen wie in der Anfrage, dann müsste es hiermit gehen
Sub Aufteilen()
LetzteZeile = Range("Tabelle1!A65536").End(xlUp).Row
Sheets("Tabelle2").Select
k = 1
For i = 1 To LetzteZeile
Zahl_a = Range("Tabelle1!A" & i).Value
Länge_Zahl = Len(Range("Tabelle1!B" & i).Value)
Zahl_b = Range("Tabelle1!b" & i).Value
For j = 4 To Länge_Zahl Step 5
If Mid(Zahl_b, j + 1, 2) = ".." Then
W1 = Mid(Zahl_b, j - 3, 4)
W2 = Mid(Zahl_b, j + 3, 4)
For l = W1 To W2
Range("A" & k).Value = Range("Tabelle1!A" & i).Value
Range("B" & k).Value = l
k = k + 1
Next l
j = j + 6
Else
Range("A" & k).Value = Range("Tabelle1!A" & i).Value
Range("B" & k).Value = Mid(Zahl_b, j - 3, 4)
k = k + 1
End If
Next j
Next i
End Sub
Gruß
Helmut
wenn deine Daten so ausshen wie in der Anfrage, dann müsste es hiermit gehen
Sub Aufteilen()
LetzteZeile = Range("Tabelle1!A65536").End(xlUp).Row
Sheets("Tabelle2").Select
k = 1
For i = 1 To LetzteZeile
Zahl_a = Range("Tabelle1!A" & i).Value
Länge_Zahl = Len(Range("Tabelle1!B" & i).Value)
Zahl_b = Range("Tabelle1!b" & i).Value
For j = 4 To Länge_Zahl Step 5
If Mid(Zahl_b, j + 1, 2) = ".." Then
W1 = Mid(Zahl_b, j - 3, 4)
W2 = Mid(Zahl_b, j + 3, 4)
For l = W1 To W2
Range("A" & k).Value = Range("Tabelle1!A" & i).Value
Range("B" & k).Value = l
k = k + 1
Next l
j = j + 6
Else
Range("A" & k).Value = Range("Tabelle1!A" & i).Value
Range("B" & k).Value = Mid(Zahl_b, j - 3, 4)
k = k + 1
End If
Next j
Next i
End Sub
Gruß
Helmut

