Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1168to1172
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
Text auf Zellen verteilen!
Micha
Guten Morgen,
auch mein heutiges Problemchen habt ihr schon oft Diskutiert aber "die" Lösung habe ich im Archiv leider nicht gefunden. In eine Datei die zum Entschlüsseln eine Nummer dient, wird in Zelle C25 eine Text kopiert, der aus max. 40 Zeichen oder weniger besteht. Dieser soll in Summe auf 13 Zellen verteilt werden. Beispielstext 123/xxx/yy/zzzzzz/aaa/45.
Einzig der / dient mir als Orientierung. Die 123 bzw. 45 sind in Länge und Position fix.
Die Werte xxx yyy zzz aa könen in ihrer Länge variieren.
Mittels Textfunktionen verteile 123 45 auf 4 Zellen ( Zelle 1 = 1, Zelle 2 =2, Zelle 3 = 3; Zelle 13 = 45)
Nun sollte der /xxx/yy/zzzzzz/aaa/-Anteil auf die verbleibenden 9 Zellen Verteilt werden.
Jeder / in eine Zelle (in Summe 5) und die in Länge und Inhalt variabelnen xxx yyy zzz aa Anteile auch auf je eine Zelle (in Summe 4).
Ich hoffe ich konnte mein Anliegen verständlich darstellen!?
Hat zufällig eine von euch ein entsprechendes Makro bzw kann mir helfen?
Danke und Gruß Micha
AW: Text auf Zellen verteilen!
06.08.2010 09:33:44
mpb
Hallo Micha,
teste mal:
Sub String_splitten()
Set ziel = Range("D25")
Range("C25").TextToColumns Destination:=ziel, DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar _
ziel.Offset(0, 12) = ziel.Offset(0, 5)
ziel.Offset(0, 11) = "/"
ziel.Offset(0, 10) = ziel.Offset(0, 4)
ziel.Offset(0, 9) = "/"
ziel.Offset(0, 8) = ziel.Offset(0, 3)
ziel.Offset(0, 7) = "/"
ziel.Offset(0, 6) = ziel.Offset(0, 2)
ziel.Offset(0, 5) = "/"
ziel.Offset(0, 4) = ziel.Offset(0, 1)
ziel.Offset(0, 3) = "/"
ziel.Offset(0, 2) = Right(ziel, 1)
ziel.Offset(0, 1) = Mid(ziel, 2, 1)
ziel.Offset(0, 0) = Left(ziel, 1)
End Sub

Die Zeile
Set ziel = Range("D25")
legt fest, wo das Ergebnis hingespeichert werden soll, ggf. anpassen.
Gruß
Martin
Anzeige
AW: Text auf Zellen verteilen!
06.08.2010 10:59:41
Micha
Hallo Martin,
vielen Dank für Deine Mühen.
Nach einigen kleine Stolpereien anfänglich funktioniert Dein Makro jetzt grundsätzlich.
Irgendwie hatte ich am Anfang immer eine Spaltenversatz - vermtl. das Ziel falsch definiert.
Zwei Haken hat das Ganze jedoch noch!
1. Ich bekomme die Textverteilung nur hin wenn ich Sie manuell über eine Steuerelement starte. Kann dies auch über die Eingabebestätigung mit ENTER gestartet werden?
2. Zunächst wird der ganze Text auf die ersten 5 Zellen verteilt dann dauert es ca. 1Min während der die Textteile sukzessive an ihr Ziel gerückt werden? Wie kann ich das beschleunigen?
Anzeige
AW: Text auf Zellen verteilen!
06.08.2010 11:35:47
mpb
Hallo Micha,
ich verstehe Deine Fragen nicht. Am besten, Du lädst mal die Datei hoch (bitte in einem Format, das sich mit Excel 2002 öffnen lässt).
Gruß
Martin
AW: Text auf Zellen verteilen!
06.08.2010 10:08:00
Rudi
Hallo,
alternativ:
Sub tt()
Dim sText As String, sSplit
sText = "123/xnnnxx/yy/zzzz123zz/aaa/45"
Range("A2").Resize(, 13) = TextSplitten(sText)
End Sub

Function TextSplitten(sText As String)
Dim arrTmp, arrSplit(1 To 1, 1 To 13), i As Integer
arrTmp = Split(sText, "/")
For i = 1 To 3
arrSplit(1, i) = Mid(arrTmp(0), i, 1)
Next
For i = 1 To 5
arrSplit(1, 2 * i + 3) = arrTmp(i)
Next
For i = 4 To 12 Step 2
arrSplit(1, i) = "/"
Next
TextSplitten = arrSplit
End Function

Gruß
Rudi
Anzeige
AW: Text auf Zellen verteilen!
06.08.2010 11:14:41
Micha
Hallo Rudi,
auch Dir vielen Dank für Deine Mühen.
Irgendwie komme ich mit Deiner Variante noch nicht ganz ans Ziel, vermute jedoch, dass das Problem vor dem Rechner sitzt.
Habe Deine Lösung in VBA Editor in das Tabellenblatt meiner Datei eingetragen.
Nach der Eingabe meines Textes in C25 beginnt die Verteilung sofort. Leider werden jedoch nur die ersten 3 und die letzte Zelle befüllt. Die 9 Zellen dazwischen bleiben leer!
Wo hab ich nen Fehler gemacht?
Gruß Micha
Wo hab ich nen Fehler gemacht?
06.08.2010 12:02:34
Rudi
Hallo,
das weiß ich doch nicht.
Dass die Verteilung nach Eingabe beginnt, liegt woanders (Change-Prozedur)
Lad mal die Mappe hoch und beschreibe genau, was wann wo passieren soll.
Gruß
Rudi
Anzeige
AW: Wo hab ich nen Fehler gemacht?
06.08.2010 12:26:04
Micha
Hallo Rudi,
dass die Verteilung unmittelbar nach der Eingabe beginnt ist o.k. und entspricht auch meinen Vorstellungen!
Das jedoch nur die ersten 3 und die letzte Zelle befüllt wird und die 9 Zellen dazwischenleer bleiben war ja mein ursprüngliches Problem!
Gruß Micha
AW: Wo hab ich nen Fehler gemacht?
06.08.2010 12:43:37
mpb
Hallo Micha,
Rudis Makro läuft überhaupt nicht automatisch ab, das musst Du manuell starten. Vermutlich hast Du in Deiner Datei noch eine Ereignisprozedur, die bei Eingabe in C25 startet. Das Ergebnis, das Du erhältst, ist nicht(!) das Ergebnis von Rudis Makro. Kopiere mal diesen Code in ein "normales" Modul
Sub tt()
Dim sText As String, sSplit
sText = Range("C25") 'äbgeändert, damit nicht ein fest vorgegebener String, sondern der  _
String in C25 gesplittet wird.
Range("A2").Resize(, 13) = TextSplitten(sText)
End Sub
Function TextSplitten(sText As String)
Dim arrTmp, arrSplit(1 To 1, 1 To 13), i As Integer
arrTmp = Split(sText, "/")
For i = 1 To 3
arrSplit(1, i) = Mid(arrTmp(0), i, 1)
Next
For i = 1 To 5
arrSplit(1, 2 * i + 3) = arrTmp(i)
Next
For i = 4 To 12 Step 2
arrSplit(1, i) = "/"
Next
TextSplitten = arrSplit
End Function
trage etwas in C25 ein und starte danach das Makro tt über ALT-F8. Das gewünschte Ergebnis sollte in Zeile 2 ab A2 stehen.
Gruß
Martin
P.S. Bitte antworte noch auf mein vorangegangenes Posting.
Anzeige
AW: Musterdatei anbei
06.08.2010 13:53:25
mpb
Hallo Micha,
hier nochmal Rudis Code, den Du in ein "normales Modul" kopieren musst.
Sub tt()
Dim sText As String, sSplit
sText = Range("C25")
Range("B13").Resize(, 13) = TextSplitten(sText)
End Sub
Function TextSplitten(sText As String)
Dim arrTmp, arrSplit(1 To 1, 1 To 13), i As Integer
arrTmp = Split(sText, "/")
For i = 1 To 3
arrSplit(1, i) = Mid(arrTmp(0), i, 1)
Next
For i = 1 To 5
arrSplit(1, 2 * i + 3) = arrTmp(i)
Next
For i = 4 To 12 Step 2
arrSplit(1, i) = "/"
Next
TextSplitten = arrSplit
End Function
Der erste fett hervorgehobene Range ist die "Quellzelle". Wenn Du aus C2 auslesen willst, musst Du C25 durch C2 ersetzen.
Der zweite fett hervorgehobene Range ist die erste "Zielzelle". In der Musterdatei ist das B13, darauf ist jetzt der Code eingestellt. Ggf. bitte anpassen.
Gruß
Martin
Anzeige
AW: Musterdatei anbei
06.08.2010 14:17:18
Micha
Hallo Martin,
bekommt man das Ganze noch irgendwie automatisiert gestartet z.B nach betätigen der Entertaste nach Eingabe in C25?
Gruß Micha
AW: Musterdatei anbei
06.08.2010 14:36:22
Rudi
Hallo,
in den Code der Tabelle:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$C$25" Then
Range("B13").Resize(, 13) = textSplitten(Target)
End If
End Sub

Gruß
Rudi
AW: sorry
06.08.2010 14:43:25
mpb
Hallo Rudi,
sorry für's einmischen, Dein letztes Posting hatte ich nicht gesehen (refresh unterlassen).
Gruß
Martin
egal, passiert halt owT
06.08.2010 20:21:37
Rudi
AW: Ereignisprozedur
06.08.2010 14:40:06
mpb
Hallo Micha,
ich nehme einfach mal an, Rudis Code funktioniert jetzt bei Dir.
Rechtsklick auf den Tabellenreiter und "Code anzeigen" auswählen. In das sich öffnende Fenster kopierst Du folgenden Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$C$25" Then
Call tt
End If
End Sub
Gruß
Martin
Anzeige
AW: Text auf Zellen verteilen!
06.08.2010 13:19:12
JOWE
hätte da auch noch 'ne Lösung:
Sub splitter()
Dim sh As Worksheet
Set sh = ActiveSheet
Dim i, j, sp, spN, ze, zeN As Long
Dim z, zN As String
'hier die Quellzelle als Adresse aus einer Inputbox
'mit der Angabe werden Zeile und Spalte ermittelt
z = InputBox("In welcher Zelle steckt der Wert?" _
& vbCr & "Bitte Adresse eingeben 'z.B. C25'", "Parameterabfrage", "C25")
ze = sh.Range(z).Row
sp = sh.Range(z).Column
'hier die Zielzelle als Adresse aus einer Inputbox
'mit der Angabe werden Zeile und Spalte ermittelt
zN = InputBox("In welcher Zelle steckt der Wert?" _
& vbCr & "Bitte Adresse eingeben 'z.B. A1'", "Parameterabfrage", "A1")
zeN = sh.Range(zN).Row
spN = sh.Range(zN).Column - 1
For i = 1 To 3
sh.Cells(zeN, i + spN) = Mid(sh.Cells(ze, sp), i, 1)
Next
sh.Cells(zeN, spN + 13) = Right(sh.Cells(ze, sp), 2)
sh.Cells(zeN, spN + 4) = Mid(sh.Cells(ze, sp), 5, Len(sh.Cells(ze, sp)) - 7)
sh.Cells(zeN, spN + 4).TextToColumns Destination:= _
sh.Cells(zeN, spN + 4), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar _
:="/", FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1), _
Array(4, 1)), TrailingMinusNumbers:=True
j = 7
For i = spN + 11 To 5 Step -2
sh.Cells(zeN, i) = sh.Cells(zeN, spN + j)
j = j - 1
Next
For i = spN + 4 To spN + 12 Step 2
sh.Cells(zeN, i) = "'/"
sh.Cells(zeN, i).HorizontalAlignment = xlCenter
Next
End Sub
Greez Jochen
Anzeige
Text auf Zellen verteilen - Jetzt gehts Danke!
06.08.2010 17:01:45
Micha
Hallo ihr tapferen Excelhelfer,
vielen Dank für eure Hilfe!
Die Kombination der beiden Codes in Modul und Tabellenblatt kopiert hat mein Problem gelöst.
Sub tt()
Dim sText As String, sSplit
sText = Range("C25")
Range("B36").Resize(, 13) = TextSplitten(sText)
End Sub Function TextSplitten(sText As String)
Dim arrTmp, arrSplit(1 To 1, 1 To 13), i As Integer
arrTmp = Split(sText, "/")
For i = 1 To 3
arrSplit(1, i) = Mid(arrTmp(0), i, 1)
Next
For i = 1 To 5
arrSplit(1, 2 * i + 3) = arrTmp(i)
Next
For i = 4 To 12 Step 2
arrSplit(1, i) = "/"
Next
TextSplitten = arrSplit
End Function
----------------------------------------------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$C$25" Then
Call tt
End If
End Sub
Danke und schönes Wochenende
Micha
Anzeige
AW: Text auf Zellen verteilen - Jetzt gehts Danke!
06.08.2010 17:03:56
JoWE
so wärs ganz schnell:
Sub split_it()
Dim myStr As String
myStr = Left(Range("c25"), 3)
myStr = Left(myStr, 1) & "/" & Mid(myStr, 2, 1) & "/" & Right(myStr, 1)
myStr = myStr & Right(Range("C25"), Len(Range("C25")) - 3)
myStr = Replace(myStr, "/", "|/|")
Range("A2") = myStr
Range("A2").TextToColumns Destination:=Range("A2"), _
DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
ConsecutiveDelimiter:=False, Tab:=True, _
Semicolon:=False, Comma:=False, Space:=False, _
Other:=True, OtherChar:="|"
End Sub

AW: Text auf Zellen verteilen - Jetzt gehts Danke!
06.08.2010 17:14:04
JoWE
oder so:
Sub split_it()
Dim myStr As String
Range("A2") = Replace(Left(Left(Range("c25"), 3), 1) & "/" & Mid(Left(Range("c25"), _
3), 2, 1) & "/" & Right(Left(Range("c25"), 3), 1) & Right(Range("C25"), _
Len(Range("C25")) - 3), "/", "|/|")
Range("A2").TextToColumns Destination:=Range("A2"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar:="|"
End Sub

308 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige