Supportnet Computer
Planet of Tech

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

Antwort 2 von Massaraksch

Mit diesem Beispiel solltest du weiterkommen:

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!

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?

Antwort 5 von Arno_Nym

Du müßtest einfach das Datenfeld (da sind ja ALLE Teilstrings drin) weiter auswerten:

Zitat:
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!

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

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: