Anzeige
Archiv - Navigation
1752to1756
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 in Spalten
16.04.2020 10:45:26
parza
Liebe Fachleute,
vorab schon herzlichen Dank für das Gedanken machen.
Ich stehe vor dem Problem, dass ich weder mit dem Macrorekorder, noch mit der excelüblichen Variante „Text in Spalten“ lösen könnte. Die Beispieldatei ist gekürzt, eigentlich sind es mehrere Tausend Daten und die Daten stehen eigentlich in anderen Spalten.
Zum Problem: Ich habe Daten die durch einen Backslash voneinander getrennt sind. Nun sollen die Daten vor dem „/“ in einer eigenen Zelle stehen und die Zahlen hinter dem „/“ summiert auch in eigner, so dass es am Schluss so aussieht: fb, dv, LRM 16. Die Datei hilft vielleicht.
Nur wenn Text und Zahlen getrennt sind, kann ich die Zahlen hinter dem „/“ summieren und auf das kommt es an.
Hat jemand eine Idee?
https://www.herber.de/bbs/user/136778.xlsx
Vielen Dank
parza

42
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
www.office-hilfe.com/support/showthread.php/22254
16.04.2020 10:56:27
lupo1
=SUMME(WENNFEHLER(--TEIL(WECHSELN(WECHSELN(A1;")";"/");"/";WIEDERHOLEN(" ";99));ZEILE($1:$19)*99-98; 99);0))
bei älterem Excel als {}
AW: www.office-hilfe.com/support/showthread.php/22254
16.04.2020 12:24:14
parza
Hallo Lupo,
den Text habe ich in Zelle B1 kopiert (ich hoffe dies ist so richtig); dort erscheint nun 0.
Danke für deine Hilfe parza
Eingabe als {} oder Verwendung von Excel-Online
16.04.2020 12:27:19
Excel-Online
... bedeutet: Eingeben und dann nicht nur mit ENTER eingeben, sondern mit STRG-UMSCH-ENTER.
Falls die nachgelieferte Textverkettung aufgrund alter Excel-Version nicht klappt, verwendest Du das für jeden kostenlose
https://office.live.com/start/Excel.aspx
Anzeige
Hier noch die Texte nach (
16.04.2020 11:03:38
lupo1
=TEXTVERKETTEN(", ";;WENN(LINKS(
GLÄTTEN(TEIL(WECHSELN(WECHSELN(A1;")";"/");"/";WIEDERHOLEN(" ";99));ZEILE($1:$19)*99-98;99)))="(";TEIL(
GLÄTTEN(TEIL(WECHSELN(WECHSELN(A1;")";"/");"/";WIEDERHOLEN(" ";99));ZEILE($1:$19)*99-98;99));2;99);""))
AW: Hier noch die Texte nach (
16.04.2020 12:51:01
parza
Hallo Lupo,
die erste Formel habe ich hingekriegt, super. Dort erscheinen jetzt die Summen.
Den zweiten Teil mit Text verketten habe ich nicht verstanden, wohin ich den Kopieren und dann bestätigen soll.
LG
parza
Egal wohin.
16.04.2020 13:34:24
lupo1
Welche Version hast Du? Falls nicht 365, dann musst Du Excel-Online für die Funktion TEXTVERKETTEN verwenden. Den Link hatte ich gegeben.
Falls Du kein Live/Hotmail/Outlook-Account hast: Nimm GDocs oder LO statt dessen.
Anzeige
AW: Text in Spalten
16.04.2020 11:41:32
Daniel
hi
welche Excelversion hast du?
in älteren Excelversionen wird zumindest die Auswertung der Texte von Lupo nicht funktionieren, da müsste dann doch VBA ran, allerdings dann nicht mehr auf recorderniveau:
hier mal eine Beispiellösung.
diesen Code in ein allgemeines Modul:
Option Explicit
Function xxx(txt As String) As Variant
Dim T
Dim i As Long
Dim Texte As String
Dim Summe As Double
txt = Mid(txt, 2, Len(txt) - 2)
txt = Replace(txt, ")(", "/")
T = Split(txt, "/")
For i = 0 To UBound(T) Step 2
Texte = Texte & ", " & T(i)
Summe = Summe + CDbl(T(i + 1))
Next
Texte = Mid(Texte, 3)
xxx = Array(Texte, Summe)
End Function
(du darfst dir auch gerne einen schöneren Namen ausdenken)
da hier Text und Summe gemeinsam berechnet und ausgegeben werden, musst du die Formel so eingeben:
1. markiere B1:C1
2. schreibe =xxx(a1)
3. schließe mit STRG+SHIFT+ENTER ab
4. kopiere dann beide Zellen und füge in die restlichen Zellen ein.
aber auch mit Text-In-Spalten gäbe es für die Summe eine Lösung:
1. ersetzte ")(" durch "/"
2. ersetze "(" durch nichts
3. ersetzte ")" durch nichts
4. führe das Text-in-Spalten mit "/" als Trennzichen durch
jetzt stehen die Texte und Zahlenwerte immer abwechselnd in einzelnen Zellen.
da in der Funktion Summe Texte nichtv stören, kannst du einfach die Summe über die Zeile bilden.
gruß Daniel
Anzeige
AW: Text in Spalten
16.04.2020 12:27:56
parza
Hallo Daniel,
auch dir vielen Dank.
Deinen Code habe ich in Modul kopiert. Es erscheint aber nichts, womit ich das Macro starten könnten.
Was meinst du damit, ich könnte auch einen anderen Namen vergeben.
Deine zweite Lösung habe ich schon getestet (auch mit Macrorecoder), funktioniert aber nur solange nur ein Datensatz in einer Zelle steht.
parza
AW: Text in Spalten
16.04.2020 13:05:42
Daniel
hi
naja ich hatte ja geschrieben, dass das eine Funktion ist.
dh da kannst du nichts ausführen, sondern du musst die Funktion wie eine normale Funktion in einer Formel in einer Excelzelle verwenden.
und wie du das machen musst, hatte ich doch auch beschrieben(die ersten 1-4)
wenn du ausführbaren Code haben willst, dann probier mal zusätzlich diesen Code, der für dich die Schritte 1-4 ausführt und zusätzlich am Schluss die Formel durch Werte ersetz
Sub yyy()
With Columns(1).SpecialCells(xlCellTypeConstants)
With .Offset(0, 1).Resize(, 2)
With .Rows(1)
.FormulaArray = "=xxx(rc[-1])"
.Copy
End With
.Offset(1, 0).Resize(.Rows.Count - 1).PasteSpecial xlPasteAll
.Copy
.PasteSpecial xlPasteValues
End With
End With
End Sub

gruß Daniel
Anzeige
AW: Text in Spalten
16.04.2020 13:41:12
parza
Hallo Daniel,
leider fehlt mir dein Wissen, um es umzusetzen.
Beim 1. Vorschlag erscheint 1 und beim 2. Vorschlag Name?
Ich danke dir für deine Mühe.
parza
AW: Text in Spalten
16.04.2020 13:48:03
Daniel
Du brauchbst beide Codes.
Xxx ist die Funktion, yyy ist das Makro, Welches die Funktion für dich in die Zellen einträgt, dh yyy muss ausgeführt werden, aber beide Quellcodes müssen im Modul1 vorhanden sein.
AW: Text in Spalten
16.04.2020 14:44:02
parza
Hi Daniel,
das habe ich nun in ein Modul eingefügt; aber ich bin zu doof für Excel:
Sub yyy()
With Columns(1).SpecialCells(xlCellTypeConstants)
With .Offset(0, 1).Resize(, 2)
With .Rows(1)
.FormulaArray = "=xxx(rc[-1])"
.Copy
End With
.Offset(1, 0).Resize(.Rows.Count - 1).PasteSpecial xlPasteAll
.Copy
.PasteSpecial xlPasteValues
End With
End With
End Sub

Option Explicit

Function xxx(txt As String) As Variant
Dim T
Dim i As Long
Dim Texte As String
Dim Summe As Double
txt = Mid(txt, 2, Len(txt) - 2)
txt = Replace(txt, ")(", "/")
T = Split(txt, "/")
For i = 0 To UBound(T) Step 2
Texte = Texte & ", " & T(i)
Summe = Summe + CDbl(T(i + 1))
Next
Texte = Mid(Texte, 3)
xxx = Array(Texte, Summe)
End Function

Anzeige
AW: Text in Spalten
16.04.2020 16:42:58
Daniel
Ja da scheint du recht zu haben.
Beide Codes in ein allgemeines Modul einfügen (nicht in ein Tabellenblattmodul !)
Und dann die Sub yyy ausführen.
Ist jetzt eigentlich nicht nicht so schwer.
Wenn du jemanden brauchst, der dir zeigt wo du mit der Maus hinklicken musst, ist ein Forum nicht das geeignete Medium für dich.
AW: Text in Spalten
17.04.2020 06:42:41
parza
Hallo Daniel,
vielen Dank für deine Hilfe.
Ich kann durchaus eine Maus bedienen und weiß auch, dass das Problem nicht selten vor dem Monitor sitzt. Aber für einen Laien ist der Unterschied zwischen den verschiedenen Modularten nicht so einfach ersichtlich und auch in Excel nicht wirklich erkennbar.
Nun denn, manchmal hilft eine Nacht schlafen, denn es hat geklappt und eigentlich war von meinem Ablauf alles richtig. Das Problem war - so vermute ich es jedenfalls - die Reihenfolge der Codeeinfügungen: In meiner Reihenfolge steht "End With und "End Sub" nicht am Ende, sondern mittendrin und das hat das Ausführen deines vba gestoppt.
Also alles gut und bleibt gesund
parza
Anzeige
AW: Text in Spalten
17.04.2020 07:25:25
parza
Hallo Daniel,
nur wenn du noch Lust/Zeit hast: So wie du es anhand meiner Beispieldatei geschrieben hast, funktioniert alles problemlos.
Die Tücke jetzt liegt im Detail: Die Spalte in der der Code greifen soll, hat zwei Kopfzeilen und es befindet sich nicht in jeder Zelle ein Datensatz.
Wäre dir sehr dankbar …
parza
Das ist bei meiner FmlLösung irrelevant! owT
17.04.2020 13:25:57
Luc:?
:-?
AW: Text in Spalten
18.04.2020 09:58:28
Daniel
Tja, da wäre es gut gewesen, wenn deine Beispieldatei diese beiden Details schon enthalten hätte, dann hätte ich dir gleich eine passende Lösung schreiben können.
Wenn man die Probleme in der Fragestellung vereinfacht, gibts in der Regel auch vereinfachte Lösungen.
1. ändere das erste With und mache aus:
With Columns(1).SpecialCells(xlCellTypeConstants)

Das hier:
With ActiveSheet.UsedRange.Columns(1)
2. Den Fehler im Zeilenergebnis kannst in der geschriebenen Formel vermeiden, in dem du das xxx nur ausführen lässt, wenn der Text mit einem "(" beginnt.
=Wenn(Links(A1;1)="(";xxx;"")

Bzw in der schreibweise des Makros
... .FormulaR1C1 ="if(left(RC[-1],1)=""("",xxx,"""")"
Gruß Daniel
Anzeige
AW: Text in Spalten
18.04.2020 13:07:11
parza
Danke. Ich hätte nicht gedacht, dass es einen Unterschied machen würde.
Umso schöner ist es für mich, dass du nochmal geschrieben hast.
parza
AW: Text in Spalten
18.04.2020 14:40:41
Luc:?
Vielen Dank für deine Ignoranz! :-[
Nutze gefälligst die Forumsliste!
Ohne Gruß, Luc :-?
Dem schließe ich mich an.
19.04.2020 11:06:13
lupo1
AW: Dem schließe ich mich an.
19.04.2020 11:28:27
parza
Ich weiß zwar nicht warum und wem ich auf die Füße getreten bin. Ich habe mich gleich in meiner Anfangsfrage für das Mitdenken bedankt. In Zeiten von Corona ist es nicht immer einfach, sofort alles zu erledigen. Ich kann zuhause im Home Office nur sehr begrenzt an der Original Datei testen und als nicht Profi dauert es bei mir länger, bis ich eure Lösungen probiert habe und ich muss zugeben. Daher nochmals an alle, die immer wieder helfen. Ein tolles Forum.
Anzeige
AW: Text in Spalten
18.04.2020 17:15:38
Daniel
bitte sehr.
denke bitte in Zukuntf daran, beim Erstellen der Beispieldateien diese ggf nur inhaltlich zu ändern, aber nicht strukturell.
das Problem ist dass bei .specialcells ein Zellbereich aus mehreren Teilbereichen mit Lücken entsteht.
manche Aktionen erfordern aber lückenlose Zellbereiche.
gruß Daniel
Lösung mit UDFs MaskOn u.VSplit
16.04.2020 22:51:47
Luc:?
Morhn, parza;
folgd 2 Fmln erzeugen das Gewünschte …
• Texte: =WECHSELN(MaskOn(A1;"bst";"-");" ";", ")
• Summen: =SUMME(VSplit(MaskOn(A1;"num");;1))
UDF-Links:
MaskOn (Vs2.1) https://www.herber.de/forum/archiv/1344to1348/1344962_Initialen_bei_Doppelnamen.html#1345181
VSplit (Vs1.1) https://www.herber.de/bbs/user/99024.xlsm (BspDatei m.UDFs)
Gruß, Luc :-?
„Die universelle Befähigung zur Unfähigkeit macht jede menschliche Leistung zu einem unglaublichen Wunder.“ Stapps ironisches Paradoxon
Nichtsdestotrotz Durchblick verbessern mit …

Anzeige
AW: Lösung mit UDFs MaskOn u.VSplit
20.04.2020 09:20:15
parza
Hallo Lupe,
ich bin heute wieder an meinem Rechner an meiner Arbeitsstelle und habe mich mit deiner Lösung auseinandergesetzt. Nochmals vielen Dank für deine Mühe.
Aktuell scheitere ich an zwei Dingen: Zum einen, was "MaskOn" und "VSplit" in der Umsetzung bedeuten, zum anderen und das ist das größere Problem, sitze ich an einem Sicherheitsrechner, der fast alles blockiert auch deine Beispieldateien.
Vielen Dank
parza
AW: Lösung mit UDFs MaskOn u.VSplit
20.04.2020 09:22:05
parza
.. entschuldige die Anrede, natürlich "Luc"
AW: Lösung mit UDFs MaskOn u.VSplit
20.04.2020 10:12:27
Daniel
Hi
Luc hat sich irgendwann mal die Mühe gemacht, zusätzliche Funktionen für Excel zu entwickeln um damit in Formeln effektiver arbeiten zu können.
MaskOn und VSplit sind zwei davon.
Jetzt versucht er, die hier auftretenden Fragestellungen mit Hilfe seiner selbst entneickelten Formeln zu lösen.
Gruß Daniel
AW: Lösung mit UDFs MaskOn u.VSplit
20.04.2020 10:49:36
parza
… danke für die Info, Daniel und auch nochmals an Luc und Lupo für die Unterstützung (der Thread ist mittlerweile viel länger geworden, als ich gedacht habe).
Ich bin mit deiner vba-Lösung, Daniel, sehr zufrieden, da dies, wie ich schon geschrieben habe, auch an meinem Sicherheits-Rechner gut anwendbar ist. Es funktionieret auch sehr gut, bis auf den zweiten Teil deiner Lösung. Hier erscheint dann als Meldung ="if(left(RC[-1],1)=""("",xxx,"""")" (ich wollte dich aber nicht nochmals belästigen).
Bleibt gesund
parza
AW: Lösung mit UDFs MaskOn u.VSplit
20.04.2020 11:10:30
Daniel
Hi
Da hast du vor dem If einfach das "=" vergessen.
Eine Formel muss mit "=", "+" oder "-" beginnen, sonst ist es keine Formel sondern einfacher Text.
Gruß Daniel
AW: Lösung mit UDFs MaskOn u.VSplit
20.04.2020 11:43:39
parza
… so stehts jetzt im Makro.
Sub yyy()
'With Columns(1).SpecialCells(xlCellTypeConstants)
With ActiveSheet.UsedRange.Columns(1)
With .Offset(0, 1).Resize(, 2)
With .Rows(1)
'.FormulaArray = "=xxx(rc[-1])"
.FormulaR1C1 = "if(left(RC[-1],1)=""("",xxx,"""")"
.Copy
End With
.Offset(1, 0).Resize(.Rows.Count - 1).PasteSpecial xlPasteAll
.Copy
.PasteSpecial xlPasteValues
End With
End With
End Sub

Die Fehlermeldung ist aber immer noch
if(left(RC[-1],1)="(",xxx,"")
Aber damit könnte ich leben (allerdings eine 100% Lösung wäre schon Klasse). parza
Naja LESEN sollte man schon können...
20.04.2020 11:59:03
Daniel
... wenn man sich Hilfe in einem Forum holen will.
Ich weiß ja nicht, welchen IQ man braucht, um aus der Formulierung "Da hast du vor dem If einfach das "=" vergessen." zu schlussfolgern, dass man den Text
FormulaR1C1 = "if(left(RC[-1],1)=""("",xxx,"""")"

So ergänzen muss:
.FormulaR1C1 = "=if(left(RC[-1],1)=""("",xxx,"""")"
Aber allzu viele IQ-Punkte sollten es nicht sein.
AW: Naja LESEN sollte man schon können...
20.04.2020 12:14:33
parza
… du wirst beleidigend und das steht dir nicht zu, auch wenn du hilfst.
Falls es dich interessiert, mein IQ liegt bei 130.
Übrigens kommt jetzt als Fehlermeldung #WERT!.
Ich danke dir trotzdem, weil du mir wirklich sehr weiter geholfen hast.parza
AW: Naja LESEN sollte man schon können...
20.04.2020 12:32:18
Daniel
Naja, was heißt beleidigend.
Ich habe dir gesagt, dass du vor dem If ein "=" einfügen musst und du hast es nicht gemacht.
Warum?
Hast du meinen Beitrag nicht verstanden weil er für dich zu kompliziert war oder hast du eine passive Konsumentenhaltung, dh du erwartet von mir fertigen Code, den du ohne eigene Anstrengung einfach nur kopieren und einfügen musst?
Bitte erkläre mir, warum du meine klare Anweisung beim ersten mal nicht ausgeführt hast.
Ansonsten: wenn die Formel den #Wert-Fehler ausgibt, dann könnte es daran liegen, dass der Text in der Zelle zwar mitv"(" beginnt, aber ansonsten nicht der von dir gezeigten Struktur entspricht. Wenn der Text das nicht tut, kann es sein dass die Funktion auf einen Fehler läuft und dieser dann das Gormelergebnis ist.
Wenn ich dir das Problem lösen soll, müsstest du schon die Beispieldatei mit deinem Code und den Fehletverursachenden Daten hochladen.
AW: Naja LESEN sollte man schon können...
20.04.2020 12:51:30
parza
Hallo Daniel,
wir sollten auf keinen Fall ein Scharmützel austragen und ist auch nicht der Sinn eines Forums; dafür finde ich gerade auch dieses Forum zu gut und hilfreich.
Du kannst davon ausgehen, dass, bevor ich auch nur einmal ein Forum anfrage, ich mindestens eine Woche vorher im Internet nach einer Lösung gesucht habe.
Die Ursprungsdatei aus meiner Anfangs hat sich nicht geändert (außer mit den zwei Kopfzeilen und den Leerzeilen dazwischen).
https://www.herber.de/bbs/user/136885.xlsx
Wie gesagt: Mit der jetzigen Lösung wäre ich schon sehr zufrieden.
parza
beantworte bitte meine Frage:
20.04.2020 13:01:18
Daniel
warum hast du meine Anweisung, vor dem "IF" ein "=" einzufügen nicht ausgeführt?
war meine Formulierung zu kompliziert?
wie hätte ich es formulieren sollen?
bitte antworte mir, schließlich will ich mich ja auch verbessern.
außerdem, du solltest schon die Datei mit dem Makro hochladen und daher die Datei als xlsm hochladen oder zumindest deinen Code hier im Forum zeigen, so dass ich ihn mit CopyPaste übertragen kann.
Danke, Daniel
AW: beantworte bitte meine Frage:
21.04.2020 06:49:07
parza
Guten Morgen Daniel,
die zweite Frage ist leichter zu beantworten: Weil ich mir in diesem Forum schon mal eine Belehrung eingeholt habe, ich möchte doch bitte Makros nicht mit hochladen, da dies an dessen Excel-Einstellungen etwas durcheinander gebracht habe. Da ich mich mit vba nicht auskenne, konnte ich es nicht einschätzen.
Zur ersten Frage: Ich kann auf Grund meines Nicht-Wissens in vba nichts ändern/korrigieren und habe alle Variationen des "=" getestet (also kein Konsumverhalten) und habe quasi die letzte Version hochgeladen. Aus dem gleichen Grund ist die von euch Profis angewandte Methode mit "RC -1 usw." für mich ein "böhmisches Dorf". Bei der alten Variante mit z.B. "A1:A100" oder ähnlichem konnte ich durch Überlegen (!) ein bisschen nachvollziehen, wo ich eventuell selbst etwas ändern müsste, ohne dass ich eure Zeit in Anspruch nehmen muss. Dies ist ungefähr so, wie jemanden den Unterschied im Fußball zwischen aktiven und passiven Abseits zu erklären. Wenn man keine Grundahnung hat, hilft eine Teilantwort nichts.
Daher reagiere ich etwas sensibel, wenn mir genau das, was du richtigerweise als Konsumverhalten und "lass die mal machen" beschreibst, unterstellst und öffentlich in ein Forum schreibst (hängt vielleicht auch mit meinem Beruf zusammen). Um im Fußball zu bleiben: Franz Beckenbauer konnte sich nicht vorstellen, dass für jemanden ein Problem war, einen Ball zu stoppen, weil es für ihn ein Kinderspiel war. Eventuell ist es für euch nachzuvollziehen, dass selbst einfache Anweisungen zum Hindernis werden, wenn dann wieder eine Fehlermeldung kommt ...
Ich sag es nochmals, ich finde dieses Forum sehr gut, äußerst hilfreich und hat mir schon viele Stunden Arbeit erspart, weil ihr tolle Lösungen gefunden habt.
Wie wollen wir weiter vorgehen (per pm?)?
Danke dir, parza
AW: beantworte bitte meine Frage:
21.04.2020 07:58:59
Daniel
Kann sein, dass da andere gewisse Befindlichkeiten haben, aber wenn es bei dir nicht funktioniert, dann brauche ich eben deine Daten und deinen Code um herauszufinden, warum das so ist.
Das RC ist nichts anderes, als die Zelladdresse in Z1S1-Schreibweise, die man auch in Excel verwenden kann.
Dabei folgt nach dem R die Zeilen- und nach dem C die Spaltennummer. Steht die Zahl in Eckigen Klammern, dann handelt es sich um einen relativen Zellbezug und die Zahl steht für den Versatzwert. Steht nichts nach dem R oder C, steht der Bbezug auf die gleiche Zeile oder Spalte.
Gruß Daniel
AW: beantworte bitte meine Frage:
21.04.2020 21:12:22
Daniel
hi
ich war wohl beim schreiben der Formel etwas nachlässig, so geht's:
.FormulaArray = "=if(left(RC[-1],1)=""("",xxx(rc[-1]),"""")"
gruß Daniel
AW: beantworte bitte meine Frage:
22.04.2020 06:03:35
parza
Hi Daniel,
perfekt! Läuft.
Danke parza
AW: Eine Möglichkeit mit...
21.04.2020 15:51:10
parza
Servus Case,
ich habe keine Ahnung wie es funktioniert, aber es klappt. Vielen Dank, parza
Du bist aus Bayern? (servus)

311 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige