Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Mit VBA Text in 3 Spalten aufteilen

Mit VBA Text in 3 Spalten aufteilen
08.03.2018 18:06:44
Albin
Hallo Zusammen
Mir fehlt noch das Pünktli auf dem i.
Ich möchte den Text z.B. "11 - Mitte01 / AB2" aufteilen in 3 neue Spalten. Die Quell ist in Spalte I abgelegt. Da jetzige Makro schreibt mir schön in der ersten Spalte F den Wert "12" rein. In der 3-Spalte H den Wert "AB1" rein.
Leider passt die mittlere Spalte G noch nicht, dort kommt der falsche Text mit "Mitte01 / AB2" daher. Es sollte aber nur "Mitte01" stehen.
Ich komme einfach mit der Abfrage für die Spalte G, ab Sonderzeichen - bis zum Sonderzeichen / nicht klar. :-(
Ich danke für Eure Hilfe.
LG
Albin
https://www.herber.de/bbs/user/120296.xlsm

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Mit VBA Text in 3 Spalten aufteilen
08.03.2018 18:40:36
Daniel
Hi
probiers mal mit diesen Formeln:
F2: =Links($I2;Finden("-";$I2)-1)
G2: =Teil($I2;Finden("-";$I2)+1;Finden("/";$I2)-Finden("-";$I2)-1)
H2: =Teil($I2;Finden("/";$I2)+1;999)

wenn die Leerzeichen stören, hilft GLÄTTEN()
um Spalte A auch noch zu berücksichtigen, ergänzt du in den Formeln noch:
=Wenn($A2="";"";und hier dann die andere Formel)
per Makro gäbs aber auch noch ne andere elegante Variante:
1. Ersetze in Spalte I das "-" durch "/"
2. wende dann DATEN - DATENTOOLS - TEXT IN SPALTEN auf die Spalte I an, mit dem "/" als anderes Trennzeichen und der Zelle F2 als Ziel
falls I unverändert erhalten bleiben soll, einfach die Spalte nochmal kopieren, kannst du ja hinterher wieder löschen
Gruß Daniel
Anzeige
AW: Mit VBA Text in 3 Spalten aufteilen
08.03.2018 19:09:13
Albin
Hoi Daniel
Passt noch nicht so ganz. Den die Einträge in der Spalte I, importiere ich aus einer SQL - DB. Leider wäre der Aufwand sehr gross, dies zu ändern. Sorry
Was ich brauche ist die richtige Abfrage im Makro. siehe Upload oder Makro
https://www.herber.de/bbs/user/120296.xlsm
Sub formal_V3()
Dim wks As Worksheet
Dim Zei_L As Long
Set wks = ActiveSheet
Application.Calculation = xlCalculationManual
With wks
Zei_L = .Cells(.Rows.Count, 1).End(xlUp).Row
If Zei_L >= 2 Then
With .Range(.Cells(2, 1), .Cells(Zei_L, 1))
If Application.WorksheetFunction.CountBlank(.Cells) = 0 Then
.Offset(0, 5).FormulaR1C1 = "=LEFT(RC[4],FIND(""-"",RC[4])-1)"
.Offset(0, 6).FormulaR1C1 = "=Reght(RC[3],FIND(""-"",RC[4])-1)"  '' test
.Offset(0, 7).FormulaR1C1 = "=RIGHT(RC[2],LEN(RC[2)-FIND(""-"",RC[1]))"
Else
With .SpecialCells(xlCellTypeConstants)
.Offset(0, 5).FormulaR1C1 = "=LEFT(RC[3],FIND(""-"",RC[3])-1)"
.Offset(0, 6).FormulaR1C1 = "=Right(RC[2],FIND(""/"",RC[2])-1)"  ''da muss es sein " _
.Offset(0, 7).FormulaR1C1 = "=RIGHT(RC[1],LEN(RC[1])-FIND(""/"",RC[1]))"
End With
End If
End With
End If
End With
Application.Calculation = xlCalculationAutomatic
End 

Sub
Gruss Albin

Anzeige
AW: Mit VBA Text in 3 Spalten aufteilen
08.03.2018 19:30:41
Daniel
HI
das passt schon.
wenn du einen Teiltext aus der Mitte eines Textes auslesen willst, brauchst du die Funktion TEIL und als zusätzlichen Parameter die Startposition (also das Zeichen ab dem gelesen wird), sowie die Länge des Teiltextes.
Diese ergibt sich aus der Postion des BIS-Zeichens minus der Position des AB-Zeichens.
da du die Trennzeichen nicht mitlesen willst, halt immer noch um 1 verschoben.
du musst doch nur in dieser Zeile:
.Offset(0, 6).FormulaR1C1 = "=Right(RC[2],FIND(""/"",RC[2])-1)"

meine geänderte Formel für die Spalte G verwenden.
um dir die Formel in der englischen R1C1-Schreibweise anzeigen zu lassen, kannst du auch meine deutsche Formel von Hand in die Zelle eintragen und dann im Direktfenster den passenden Formeltext mit:
?Selection.FormulaR1C1
anzeigen lassen. von dort kannst du dann die Formel in den Code kopieren (doppeln der Anführungszeichen nicht vergessen!)
und noch ein kleiner Tip: die Formeln werden für die R1C1-Schreibweise kürzer und einfacher, wenn du so viele Zellbezüge wie möglich absolut setzt (hier alle Spaltenbezüge).
Gruß Daniel
Anzeige
AW: Mit VBA Text in 3 Spalten aufteilen
08.03.2018 20:21:08
Albin
Lieber Daniel
Ich bin kein Profi, wie Du! Einigermassen habe ich deine Hilfe verstanden. Laub mir, ich mache es mir nicht einfach und frage einfach im Forum. Mich nervst es einfach tödlich, wenn ich nach langem Versuche, es nicht hinbekomme. Könntest Du mir bitte das ganze Makro so anpassen und zusenden, dass es läuft.
Das wäre total lieb von Dir.
Albin
PS: Vielleicht bin ich mal in 10 Jahr soweit wie Du, wenn überhaupt?!
AW: Mit VBA Text in 3 Spalten aufteilen
08.03.2018 20:44:32
Daniel
naja, ich bin nicht dein no-cost-Dienstleister!
den Rest des Codes hast du ja auch irgendwie hinbekommen.
Es ist ist ja nur die andere Formel, die du da einsetzen musst.
Die Formel kannst du ja erst mal unabhängig vom Makro testen (Excel gut!!!)
Wenn die Formel dann funktioniert, kannst du ihren Text über den Recorder oder wie von mir gezeigt anzeigen lassen und in den Code übernehmen.
Gruß Daniel
Anzeige
AW: Mit VBA Text in 3 Spalten aufteilen
08.03.2018 21:28:22
Albin
naja, habe es schon versucht.
Danke für die Unterstützung, versuche es weiterhin allein.
Mit deiner zweit Formel, komme ich sicher weiter in der Lösungsuche.
Excel gut!!! was heisst heute zutage schon Gut? Zum Beispiel Cremeschnitten sind sicher vielmals GUT.
= Glätten(I2...) brachte nicht viel.
FG
Albin
AW: Mit VBA Text in 3 Spalten aufteilen
08.03.2018 21:39:37
Daniel
naja, hast du wenigstens mal meine Formel von Hand getestet, ob sie das richtige Ergebnis liefert?
einfach mal die Formel in die Zelle schreiben solltest du ja hinbekommen.
bzw das Glätten muss außen rum, für den Fall, dass du die Leerzeichen am Anfang und Ende weg haben willst:
also diese Formel in G2: =Glätten(Teil($I2;Finden("-";$I2)+1;Finden("/";$I2)-Finden("-";$I2)-1))
liefert die das passende Ergebnis in Spalte G?
Anzeige
Da du ohnehin VBA verwenden willst, ...
09.03.2018 00:34:19
Luc:-?
…Albin,
könntest du auch eine UDF (mit mehr Komfort) verwenden, zB so:
F2:H2: {=SplitVx(I2;{" - "." / "})}
Falls der 1.Wert auch als echte Zahl dargestellt wdn soll, dann so:
F2:H2: {=WENNFEHLER(--SplitVx(I2;{" - "." / "});SplitVx(I2;{" - "." / "}))}
Alternativ könnte auch eine andere UDF benutzt wdn, die diese Umwandlung bereits enthält:
F2:H2: {=VSplit(I2;{" - "." / "};1)}
Da ich bereits mit einer bisher unpublizierten Version dieser UDF arbeite, könnte es sein, dass die letzt­publizierte das 2.Argument nicht verträgt. Dann besser so:
F2:H2: {=VSplit(WECHSELN(I2;"-";"/");" / ";1)}
Als ZellFmln sind das natürlich (plurale) MatrixFmln über alle 3 Spalten einer Zeile. Allerdings kann man die UDFs auch in einer Sub­pro­zedur verwenden, wobei ein Array aus 3 Werten entsteht. Dabei können auch Werte bedingungsabhängig weg­ge­las­sen bzw in diesem aus­ge­tauscht wdn, wobei Letz­teres dann ggf an einer Array-Kopie erfolgen sollte. Mit ZellFmln wäre das zwar auch möglich, erforderte aber eine längere Fml.
Natürlich kann das in einer Subprozedur auch mit der vbFkt Split bewerkstelligt wdn; die ist aber weniger komfortabel, was dich ja hier­bei nicht unbedingt stören dürfte.
Die UDFs sind im Archiv enthalten und dort in etlichen Beiträgen auch verlinkt. Allerdings scheint die Archiv-Recherche hier schon seit Wochen (oder gar Monaten) nicht mehr zu fktionieren, weshalb du wohl herber-extern nach ihnen suchen oder bei Interesse nochmal nachfragen müsstest.
Gruß, Luc :-?
Anzeige
AW: Da du ohnehin VBA verwenden willst, ...
09.03.2018 09:17:16
snb

Sub M_snb()
sn = Columns(9).SpecialCells(2).Resize(, 3)
For j = 2 To UBound(sn)
st = Split(Replace(sn(j, 1), "-", "/"), "/")
sn(j, 1) = Trim(st(0))
sn(j, 2) = Trim(st(1))
sn(j, 3) = Trim(st(2))
Next
Cells(1, 6).Resize(UBound(sn), 3) = sn
End Sub

AW: Da du ohnehin VBA verwenden willst, ...
09.03.2018 09:43:02
Albin
Hoi Luc
Danke vielmal für deine detaillierte Beschreibung / Erklärung. Dein Marko passt wie eine 1.
Da sieht man mal wieder, wie einfach die Lösung sein könnte.
Das mit dem Archiv ist so eine Sache. Natürlich suche ich immer vorgängig im Netz nach einer Lösung. Aber vielmals sieht man den Wald vor lauter Bäume nicht mehr.
Ich danke Dir nochmals und wünsche Dir ein schönes Weekend.
LG
Albin
Anzeige
Du meinst sicher nicht mich, ...
09.03.2018 16:12:29
Luc:-?
…Albin,
da dein Beitrag 1. unter dem von snb steht, du 2. nicht nach Links gefragt hast und ich auch nicht annehme, dass du selbst die erwähnten UDFs gesucht und auch gefunden hast, sowie du auch 3. Makro und nicht UDF schreibst. ;-]
Die Subprozedur (Makro) von snb ist im Ggsatz zu meinen UDFs sehr speziell und nur auf deinen Fall zugeschnitten, was bei einem solchen Makro auch legitim ist. Das kannst du dann auch in deines integrieren. Meine UDFs hättest du in der für Fktt üblichen Form in deinen Pgmm verwenden können.
SchöWE dito, Luc :-?

376 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige