Supportnet / Forum / Skripte(PHP,ASP,Perl...)
VBA-Excel-Makro, um Teile des Zelleninhaltes auszulesen
Frage
Ich suche nach einer Lösung für folgende Aufgabe:
Ich möchte aus einer Zelle die erste Zeile (bis zum Umbruch) auslesen und diese in eine neue Zelle schreiben lassen. Der Rest des Zelleninhaltes (nach dem Zeilenumbruch) soll als Kommentar in die neu entstandene Zelle geschrieben werden.
Der Kommentar ist kein Problem, aber die Trennung des Zelleninhaltes bereitet mir noch Kopfzerbrechen.
Hat jemand eine Ahnung und kann mir weiterhelfen?
Besten Dank im Voraus!
Antwort 1 von wadspit
Hi
such mal nach CHR(13) (Zeilenumbruch)... danach trennen. soweit ich mich erinnere :)
Grüße
such mal nach CHR(13) (Zeilenumbruch)... danach trennen. soweit ich mich erinnere :)
Grüße
Antwort 2 von Massaraksch
Mit diesem Beispiel solltest du weiterkommen:
Split(...) liefert ein nullbasiertes Datenfeld mit den getrennten Teilzeichenfolgen.
Trennzeichen hier der Zeilenvorschub, also Chr(10).
X(0) ist Teilstring 1 und X(1) ist Teilstring 2 aus A1.
Massaraksch
Sub Splitter()
Dim X As Variant
On Error Resume Next
X = Split(Range("A1"), Chr(10))
MsgBox "Teil 1: " & X(0) & vbCrLf & "Teil 2: " & X(1)
End Sub
Split(...) liefert ein nullbasiertes Datenfeld mit den getrennten Teilzeichenfolgen.
Trennzeichen hier der Zeilenvorschub, also Chr(10).
X(0) ist Teilstring 1 und X(1) ist Teilstring 2 aus A1.
Massaraksch
Antwort 3 von cancer77
Es funktioniert!
Vielen herzlichen Dank Euch beiden!
Vielen herzlichen Dank Euch beiden!
Antwort 4 von cancer77
Hallo zusammen!
Vielleicht könnt Ihr mir nochmals helfen?!
Kann man eigentlich auch mehrere durch Zeilenumbrüche getrennte Strings in einer Zelle einzeln auslesen und in andere Zellen schreiben bzw. löschen lassen?
Vielleicht könnt Ihr mir nochmals helfen?!
Kann man eigentlich auch mehrere durch Zeilenumbrüche getrennte Strings in einer Zelle einzeln auslesen und in andere Zellen schreiben bzw. löschen lassen?
Antwort 5 von Arno_Nym
Du müßtest einfach das Datenfeld (da sind ja ALLE Teilstrings drin) weiter auswerten:
Also sind X(2), X(3) usw. die nächsten Teile (in diesem Fall halt Zeilen) des Zellinhalts.
Um einen Teil (Zeile) zu löschen, müßtest du wohl die Einzelteile unter Weglassung des zu löschenden Teils wieder zusammensetzen und der Zelle selbst (oder einer anderen) zuweisen, z.B.
X = Split(Range("A1"), Chr(10))
Range("A1") = X(0) & Chr(10) & X(2)
schreibt nur Zeile 1 und 3 in die Zelle A1 zurück (Zeile 2 wird weggelassen).
Mußt immer beachten, daß die Zählung bei 0 (Null) losgeht.
Noch ein evtl. nützlicher Hinweis:
Den höchsten Index des Datenfelds/Array (die Nr. des letzten Teils -> letzte Zeile) bekommst du mit
UBound(X)
also wäre der letzte Teilstring (Zeile)
X(UBound(X))
Arno
Zitat:
X(0) ist Teilstring 1 und X(1) ist Teilstring 2 aus A1
X(0) ist Teilstring 1 und X(1) ist Teilstring 2 aus A1
Also sind X(2), X(3) usw. die nächsten Teile (in diesem Fall halt Zeilen) des Zellinhalts.
Um einen Teil (Zeile) zu löschen, müßtest du wohl die Einzelteile unter Weglassung des zu löschenden Teils wieder zusammensetzen und der Zelle selbst (oder einer anderen) zuweisen, z.B.
X = Split(Range("A1"), Chr(10))
Range("A1") = X(0) & Chr(10) & X(2)
schreibt nur Zeile 1 und 3 in die Zelle A1 zurück (Zeile 2 wird weggelassen).
Mußt immer beachten, daß die Zählung bei 0 (Null) losgeht.
Noch ein evtl. nützlicher Hinweis:
Den höchsten Index des Datenfelds/Array (die Nr. des letzten Teils -> letzte Zeile) bekommst du mit
UBound(X)
also wäre der letzte Teilstring (Zeile)
X(UBound(X))
Arno
Antwort 6 von cancer77
Für mich beginnt jetzt eben ein Berg zu wachsen...
Ich möchte nun nicht nur eine Zeile, sondern eine ganze Tabelle nach diesem Muster bearbeiten. Wie schaffe ich es also, dass ich beides (also die String-(Zeilen-)Nummerierung und die Zielzelle) zuweisen kann?
Mein bisherig funktionierender Schleifencode hat für den ersten Fall (nur die 1.Zeile in eine Zelle schreiben und den Rest als Kommentar einfügen) ausgereicht.
[...]
For j = 2 To letzteZeile
FeatureText = Range("C" & j)
FListHeadline = Split(FeatureText, Chr(10))
' in Spalte H schreiben
Cells(j, i + 8) = FListHeadline(i)
Next j
[...]
Kommentar dazu:
[...]
For zaehler = 2 To letzteZeile
' Fehler abfangen, wenn bereits ein Kommentar vorhanden
If Cells(zaehler, 8).Comment Is Nothing Then
Cells(zaehler, 8).AddComment Cells(zaehler, 4).Text
Else
Cells(zaehler, 8).Comment.Text Cells(zaehler, 4).Text
End If
Next
[...]
Nun muss ich aber die erste Zeile löschen, die zweite Zeile in die neue Zelle Schreiben und mit den restlichen Strings wie oben verfahren (Kommentar)
Wie kann ich also zeilenweises Lesen und Schreiben in der Zelle UND in der Tabelle umsetzen?
Kann mir auch jemand bei diesem Thema weiterhelfen??
Besten Dank im Voraus!
Ich möchte nun nicht nur eine Zeile, sondern eine ganze Tabelle nach diesem Muster bearbeiten. Wie schaffe ich es also, dass ich beides (also die String-(Zeilen-)Nummerierung und die Zielzelle) zuweisen kann?
Mein bisherig funktionierender Schleifencode hat für den ersten Fall (nur die 1.Zeile in eine Zelle schreiben und den Rest als Kommentar einfügen) ausgereicht.
[...]
For j = 2 To letzteZeile
FeatureText = Range("C" & j)
FListHeadline = Split(FeatureText, Chr(10))
' in Spalte H schreiben
Cells(j, i + 8) = FListHeadline(i)
Next j
[...]
Kommentar dazu:
[...]
For zaehler = 2 To letzteZeile
' Fehler abfangen, wenn bereits ein Kommentar vorhanden
If Cells(zaehler, 8).Comment Is Nothing Then
Cells(zaehler, 8).AddComment Cells(zaehler, 4).Text
Else
Cells(zaehler, 8).Comment.Text Cells(zaehler, 4).Text
End If
Next
[...]
Nun muss ich aber die erste Zeile löschen, die zweite Zeile in die neue Zelle Schreiben und mit den restlichen Strings wie oben verfahren (Kommentar)
Wie kann ich also zeilenweises Lesen und Schreiben in der Zelle UND in der Tabelle umsetzen?
Kann mir auch jemand bei diesem Thema weiterhelfen??
Besten Dank im Voraus!
Antwort 7 von cancer77
An alle, die mich vielleicht nicht verstanden haben und an alle, denen ich damit weiterhelfen kann:
Mein Code sieht nun folgendermaßen aus und funktioniert: (Der Zellentext wird dabei in max. drei Teile zerlegt)
Private Sub CommandButton1_Click()
Dim ZellenText As String
Dim ZellenTextZeile As String
Dim j As Long
Dim letzteZeile As Long
letzteZeile = ActiveSheet.Range("D2000").End(xlUp).Row
For j = 2 To letzteZeile
On Error Resume Next
If Cells(j, 4).Text = "" Then
Cells(j, 8) = Cells(j, 2).Text
Else
ZellenText = Range("D" & j)
ZellenTextZeile = Split(ZellenText, Chr(10), 3)
Cells(j, 8) = ZellenTextZeile(1)
Cells(j, 8).AddComment ZellenTextZeile(2)
End If
Next j
End Sub
Mein Code sieht nun folgendermaßen aus und funktioniert: (Der Zellentext wird dabei in max. drei Teile zerlegt)
Private Sub CommandButton1_Click()
Dim ZellenText As String
Dim ZellenTextZeile As String
Dim j As Long
Dim letzteZeile As Long
letzteZeile = ActiveSheet.Range("D2000").End(xlUp).Row
For j = 2 To letzteZeile
On Error Resume Next
If Cells(j, 4).Text = "" Then
Cells(j, 8) = Cells(j, 2).Text
Else
ZellenText = Range("D" & j)
ZellenTextZeile = Split(ZellenText, Chr(10), 3)
Cells(j, 8) = ZellenTextZeile(1)
Cells(j, 8).AddComment ZellenTextZeile(2)
End If
Next j
End Sub