Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Makro oder sub schreiben

Makro oder sub schreiben
04.09.2014 12:28:59
Andreas
Hallo,
ich möchte ein Makro oder eine sub schreiben, die über die Tabelle läuft und in jedem Feld alles bis einschliesslich des ersten Leerzeichen greift und dieses in eine Spalte davor stellt.
Der Text in jeder Zeile ist leider in einer einzigen Spalte, weil ich aus einem .pdf kopiert habe. Die Tabelle im .pdf hatte zwei Spalten. Der Inhalt der ersten Spalte ist in Excel alles bis zum Ende des ersten Leerzeichens.
Könnt ihr mir auf die Sprünge helfen. Ich muss den enthaltenen String greifen bis zum ersten Leerzeichen und das raus kopieren und in eine Spalte davor setzen. Das für jede Zeile.
Danke für Hinweise. Euren Code werde ich schon verstehen, da ich vorgeprägt bin, nur zu lange raus.
Danke
Andreas

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makro oder sub schreiben
04.09.2014 12:37:56
yummi
Hallo Andreas,
mit pos = Instr(1, deinSuchtext, " ") findest Du die Position des 1. Leerzeichens
Dann kannst Du mit left, right und Len die Strings auseinanderschneiden und so verteilen wie du willst
Gruß
yummi

AW: Makro oder sub schreiben
04.09.2014 12:46:00
Daniel
HI
warum Makro?
wenn der Text in Spalte A steht, dann kommt in Spalte B folgende Formel für den ersten Teil:
=Links(A1;Finden(" ";A1))
und in Spalte C dann für den zweiten Teil:
=Teil(A1;Finden(" ";A1)+1;Länge(A1)
beide Formeln dann nach unten ziehen soweit wie in A Texte stehen.
als Makro so (werte stehen in Spalte A, Ergbnis wird nach A und B geschrieben)
Sub xxx()
dim arr
dim z as long
dim Pos as long
With Range("A1:B" & Cells(Rows.count, 1).end(xlup).row)
arr = .value
for z = 1 to ubound(arr)
Pos = instr(arr(z, 1), " ")
If Pos > 0 then
arr(z, 2) = mid(arr(z, 1), Pos + 1)
arr(z, 1) = left(arr(z, 1), Pos)
end if
Next
end with
End sub

Gruß Daniel

Anzeige
AW: Makro oder sub schreiben
04.09.2014 14:29:58
Andreas
Hallo,
Danke, kann euren Input nachvollziehen.
Daniel: du hast den Code vergessen, wie der Inhalt der nun in arr(z,2) und arr(z,1) drin ist wieder zurück in die Spalten geschrieben wird. Kannst du das noch nachholen?
Ich bin einfach zu lange raus.
Gruß
Andreas

AW: Makro oder sub schreiben
04.09.2014 14:47:56
Andreas
Daniel:
du hast recht. nächstes mal werde ich das markieren oder eben nur auf den html-link verweisen.

AW: Makro oder sub schreiben
04.09.2014 15:24:48
Daniel
könnte ich, will ich aber nicht mehr.
Es kann nicht sein, dass du die Frage in einem zweiten Forum nochmal stellst, obwohl sie hier schon beantwortet wurde.
ausserdem ist das nicht so schwer.
das Rückschreiben ist ja nur die Umkehrung vom Einlesen.
Gruß Daniel

Anzeige
AW: Makro oder sub schreiben
04.09.2014 17:37:27
Andreas
Hi Daniel,
ja - hast Recht. Hat mich zwar etwas Zeit gekostet, aber sicher habe ich dabei mehr gelernt, weil es mich zwang genau zu sein. Hat mich auch gleich wieder in VBA rein gebracht.
OK, falls noch mal jemand so etwas hat, oder nähere Erläuterungen braucht (wovon ich ein Fan bin), here you go.
Sub trennSpalteBeiErstemLeerzeichen()
'Aufgabe: In mein Worksheet habe ich den Inhalt einer Tabelle aus einer .pdf-Datei einkopiert,  _
die zwei Spalten enthielt
'In Excel ist der ganze Text in eine Spalte gekommen.
'Nun will ich das in zwei Spalten trennen, um es dann in Word als Tabelle zu übernehmen.
Dim arr
Dim z As Long
Dim Pos As Long
'Die Zahl, die beim Range nach B noch fehlt wird mit & drangehängt.
'Alles nach dem & ermittelt genau diese fehlende Angabe.
'Cells(Rows.Count,1) // ermittelt die Anzahl der Zellen, egal ob beschrieben oder nicht
'Die 1 verweist auf die erste Spalte, also "A"
'.End   // geht auf die letzte Zeile, die aller Wahrscheinlichkeit unbeschrieben ist, in Excel  _
2007 ist das 1048576
'(xlUp) // geht wieder hoch, auf die letzte Zeile, die einen Eintrag in der Spalte enthält
'.Row   // ermittelt die Zahl dieser Zeile
With Range("A1:B" & Cells(Rows.Count, 1).End(xlUp).Row)
' innerhalb von With wird mit dem Punkt-Operator auf Eigenschaften - hier von Range -  _
zugegriffen, ohne
' Range (oder was auch immer) wiederholen zu müssen
arr = .Value
'Schreibt man einen Range in ein Array, so ist es
' a) immer zwei-dimensional und
' b) immer 1-basiert auch wenn Arrays normalerweise 0-basiert sind (da war ich doch arg stutzig  _
geworden).
'Das bedeutet (arr(0,1) würde einen out-of-bound-Fehler werfen
' Das Array enthält die einzelnen gefundenen Zeilen als z
' UBound --> UpperBound, daher höchstes Array-Element
For z = 1 To UBound(arr)
' Die Zeilen werden über z systematisch durchlaufen
' Die Position des ersten Leerzeichens wird ermittelt
Pos = InStr(arr(z, 1), " ")
' wenn es ein Leerzeichen gibt, ist die Pos auch größer 0
If Pos > 0 Then
' Das zweite Array-Element wird zuerst beschrieben, da es eh noch leer ist, weil nur die erste  _
Spalte Text enthielt
arr(z, 2) = Mid(arr(z, 1), Pos + 1)
' Das erste Array-Element wird nun ÜBERschrieben, mit dem Text bis zum ersten Leerzeichen
arr(z, 1) = Left(arr(z, 1), Pos)
' Ok, jetzt muss der Inhalt der Array-Elemente in das Worksheet noch zurückgeschrieben werden
' Zunächst war ich vorsichtig und habe den Inhalt belassen und einfach in Spalte 3 und 4 zurü _
ckgeschrieben
' und dann unten Spalte A und B wieder gelöscht.
' Ist aber unnötig, funktioniert so wunderbar.
'           Cells(z, 3) = arr(z, 1)
'           Cells(z, 4) = arr(z, 1)
Cells(z, 1) = arr(z, 1)
Cells(z, 2) = arr(z, 2)
End If
Next
End With
'Range("A:B").Delete
End Sub
Danke noch mal
schöne Grüße
Anzeige

304 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige