Microsoft Excel

Herbers Excel/VBA-Archiv

Makro oder sub schreiben

Betrifft: Makro oder sub schreiben von: Andreas Meyer
Geschrieben am: 04.09.2014 12:28:59

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

  

Betrifft: AW: Makro oder sub schreiben von: yummi
Geschrieben am: 04.09.2014 12:37:56

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


  

Betrifft: AW: Makro oder sub schreiben von: Daniel
Geschrieben am: 04.09.2014 12:46:00

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


  

Betrifft: AW: Makro oder sub schreiben von: Andreas Meyer
Geschrieben am: 04.09.2014 14:29:58

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


  

Betrifft: AW: Makro oder sub schreiben von: Andreas Meyer
Geschrieben am: 04.09.2014 14:47:56

Daniel:
du hast recht. nächstes mal werde ich das markieren oder eben nur auf den html-link verweisen.


  

Betrifft: AW: Makro oder sub schreiben von: Daniel
Geschrieben am: 04.09.2014 15:24:48

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


  

Betrifft: AW: Makro oder sub schreiben von: Andreas Meyer
Geschrieben am: 04.09.2014 17:37:27

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


 

Beiträge aus den Excel-Beispielen zum Thema "Makro oder sub schreiben"