Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1744to1748
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
Inhaltsverzeichnis

Umbrüche in Zelle zählen und trennen

Umbrüche in Zelle zählen und trennen
17.03.2020 11:24:22
Barnabas
Hallo zusammen,
Erst einmal ein Hallo ins Forum. Ich bin neu hier angemeldet, auch wenn ich schon einiges hier gelesen und gefunden habe. Vielen Dank schon einmal dafür.
Ich versuche verzweifelt eine Lösung zu finden für mein Problem und hoffe daher auf eure Unterstützung.
Ich bin ganz neu im Thema VBA und daher noch nicht mit allen Möglichkeiten vertraut. Wenn ihr einen besseren Ansatz habt, dann würde mich das natürlich auch sehr interessieren.
Ich habe eine Spalte mit vielen beschriebenen Zellen, wovon einige einen Zeilenumbruch (ALT + ENTER) haben. Die Anzahl Zeilen variiert dabei.
Ich möchte gerne, dass die Zellen mit mehr als einer Zeile auf Zeilenbasis getrennt werden und jeweils in eine Zelle geschrieben werden.
Bsp:
A1 mit Inhalt:
Test1
Test2
Test3
A2 mit Inhalt:
Test4
A3 mit Inhalt:
Test5
Test6
Als Ergebnis möchte ich für die Spalten B1:B6 jeweils einen Eintrag „TestX“ haben. Das ganze soll über VBA realisiert sein.
Folgendes habe ich bisher probiert. Das funktioniert bisher nur mäßig, da eine Fehlermeldung auftaucht, sobald eine Zelle nicht den abgefragten Zeilenumbruch aufweist und die On Error GoTo Anweisung nicht für alle Zeilen funktioniert.
Da es sich hier um ein reines Testscript handelt bitte ich zu vernachlässigen, dass jede Zell-Zeile in eine neue Spalte geschrieben wird. Das spielt für mich ersteinmal keine Rolle.
In einem zweiten Schritt würde ich gerne jede Zelle auf Leerzeichen überprüfen und diese entfernen, wenn sie bestehen.
Tausend Dank vorab
Hier nun der Code (wie gesagt, ist nur ein Entwurf und ich würde mich sehr über euren Input freuen). Falls von Relevanz, Ich bin mit Office 365 unterwegs:
Option Explicit
Sub UmbrücheAuflösen()
Dim r As Long 'Zeilennummer
Dim AnzahlEinträge 'Zu betrachtende Zeile innerhalb der Zelle
Dim AuswahlZeileinZelle 'Korrigierte Variable für die zu betrachtende Zeile innerhalb der Zelle  _
_
für den X(0), X(1),... Befehl
Dim SourceColumn 'Spalte mit Quell-Information
Dim c 'Spalte zum beschreiben
SourceColumn = 1
c = 3
For AnzahlEinträge = 1 To 10 'Schleife für bis zu 10 Zeilenumbrüche in einer Zelle
c = c + 1 'Spalte 4 als erste zu beschreibende Spalte
AuswahlZeileinZelle = AnzahlEinträge - 1
For r = 5 To 26 'Die Anzahl Zellen variiert, ich werde das zu einem späteren Zeitpunkt  _
automatisieren
If Range(Cells(r, SourceColumn), Cells(r, SourceColumn))  "" Then
x = Split(Cells(r, SourceColumn), Chr(10))
On Error GoTo weiter
Range(Cells(r, c), Cells(r, c)).Value = x(AuswahlZeileinZelle)
End If
weiter:
Next r
Next AnzahlEinträge
End Sub

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Umbrüche in Zelle zählen und trennen
17.03.2020 11:50:30
hary
Moin
Probier mal.
Sub UmbrücheAuflösen()
Dim i As Long, r As Long, c As Long
Dim x As Variant
Dim SourceColumn 'Spalte mit Quell-Information
SourceColumn = 1
c = 3
For r = 5 To 26
If Cells(r, SourceColumn)  "" Then
x = Split(Cells(r, SourceColumn), Chr(10))
For i = 0 To UBound(x)
Cells(r, c) = x(i)
c = c + 1
Next
End If
c = 3
Next r
End Sub

Fuer die Leerzeichen schau dir mal Trim an.
gruss hary
AW: Umbrüche in Zelle zählen und trennen
18.03.2020 13:51:59
Barnabas
Wow, so cool. Läuft wie ne eins!!!
Könntest du mir die for Schleife für i = 0 to UBound(x) erklären. Die habe ich nicht verstanden und das scheint ja das Puzzlestück zu sein dass mir gefehlt hat.
Auch würde mich nun dein Ansatz interessieren zu folgenden Unterscheidungen in den Zellen, dabei ist Spalte eins weiterhin und ausschließlich für die Quelldaten gedacht (copy Paste aus einem anderen File):
- Leere Zellen in Spalte 1 erkennen und entfernen (würde mir aber auch reichen wenn die Ergebnisspalten keine leeren mehr enthalten)
- Ergebnis, dass sich jetzt auf mehrere Spalten aufteilt in einer Spalte untereinander auflisten (Reihenfolge ist mir dabei egal).
- Formatierung aus Spalte 1 beibehalten (einige sind durchgestrichen, das kann auch pro Zelle sich unterscheiden - bspw Zeile 2 ist durchgestrichen, Zeile 1 aber nicht). Diese möchte ich dann als solche identifizieren und in eine eigene Spalte schreiben.
- gibt es die Möglichkeit die Dsten direkt aus dem Quelldokument zu ziehen? Dazu müsste es die Möglichkeit geben zu Beginn die Datei auszuwählen, da ich je nach Projekt unterschiedliche Files habe. Auch das Tabellenblatt und die Spalte müssten am besten in einem Eingabefeld anzugeben sein.
Ich habe gerade erst mit VBA begonnen und beginne das Potential zu entdecken, da ich viel mit Datenanalyse zu tun habe. Es wäre daher toll wenn ihr mir zu den Vorschlägen noch kurz dazu schreiben könntet welche Funktion der Befehl hat. Ich hoffe das ist nicht zu vielverlangt. Ich nehme was ich kriege 😉
Ich freue mich sehr darauf neues zu lernen. Ich denke ich habe den Einstieg ganz gut alleine hinbekommen, allerdings bin ich nun sehr auf euren Input gespannt wenn es um die obig genannten Spezialfälle geht.
Tausend Dank schon einmal, ich kann euch garnicht sagen wie sehr mich das gerade gefreut hat den Code von Hary zu testen.
Viele Grüße
B
Anzeige
AW: Umbrüche in Zelle zählen und trennen
19.03.2020 10:50:54
Barnabas
Hallo nochmal,
Irgendwelche Ansätze zu obig beschriebenem? Wäre über jeden Input sehr Dankbar.
Beste Grüße
B
AW: Umbrüche in Zelle zählen und trennen
21.03.2020 09:34:09
Matthias
Moin!
Hier mal ein paar Hinweise. Bezieht sich aber nur auf den Code von Harry, weiß nicht, ob du dir den von Daniel auch mal angeschaut hast.
Schleife durch die Zeilen von 5 bis 26
For r = 5 To 26
Wenn die Zelle leer ist, nix machen sonst mit dem Code darunter weiter
If Cells(r, SourceColumn) "" Then
Der Inhalt der Zelle wird mittels split und dem gewünschten Zeichen, bei dem getrennt werden soll, hier chr(10) = Zeilenvorschub, getrennt. Dabei entsteht ein array, welches beim index 0 beginnt. Dies wird an die Variable x übergeben.
x = Split(Cells(r, SourceColumn), Chr(10))
Mit der Schleife geht man jetzt durch das Array. Bei 0 ist der 1. Eintrag. Die Funktion Ubound gibt zurück, wieviele Einträge in dem Array sind. Das Gegenstück wäre LBound - nicht alle Array sind 0 basiert.
For i = 0 To UBound(x)
Eintrag der Zeile in eine neue Spalte und Zeile
Cells(r, c) = x(i)
hochzählen der Zeile, um dann in die nächste zu schreiben.
c = c + 1
Next
End If
c = 3
Next r
Zu deinen Fragen noch.
Leere Zeilen sollte eigentlich beide Codes überspringen, so dass sie in der Zielspalte nicht mehr da sind.
Mehrer Spalten: Weiß nicht, wie du das meinst - der Code nimmt ja nur eine Spalte. Wenn du den Code in einer Schleife mehrfach durchlaufen lässt, dann für die Variable c nicht die 3 vorgeben, sondern die letzte Zeile suchen. bspw. mit cells(rows.count,3).end(xlup).row +1 oder mal suchen, letzten Zeile finden.
Für die Formatierung müsstest du nur das format aus deiner Ausgangszelle nehmen und auf die Zielzelle übertragen. Da du ja in der Schleife bist, hast du ja die Ausgangszelle und kannst es da übernehmen. Beim Code von Daniel müsstest du es etwas anders machen (sprengt hier den Rahmen).
Datei direkt auswählen. Entweder den PFad fest vorgeben und dann mit workbooks.open arbeiten oder mit einem Dialog die Datei dynamisch auswählen (bzw. deren PFad) und sie dann öffnen. ISt zwar schon älter aber zum Anfang schau mal hier: https://www.vba-tutorial.de/applikation/dateidialog.htm Darauf aufbauend kannst du ja mal weiter nach den Dialogen suchen. Bzw. nutzen die intellisense im VBE oder die ms Seiten https://docs.microsoft.com/de-de/office/vba/api/excel.application.filedialog
VG
Anzeige
AW: Umbrüche in Zelle zählen und trennen
17.03.2020 11:59:46
Daniel
Hi
probier mal (ungetestet)
dim i as Long
dim txt as string
dim arr
for i = 5 to 25
with Cells(i, 1)
if .value  "" then txt = txt & vblf & .value
end with
Next
arr = split(mid(txt, 2), vblf)
arr = worksheetfunction.Transpose(arr)
Cells(5, 3).resize(ubound(arr, 1), 1) = arr
Gruß Daniel

306 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige