Wörter ordnen
#1
Hallo,

da ich nur Grundkenntnisse in Excel besitze, habe ich ein Problem und hoffe, dass mir jemand helfen kann:
Und zwar möchte ich mehrere markierte Wörter, die durch Kommas getrennt sind, aus einem Dokument (meistens PDF) herauskopieren und anschließend in Excel hineinkopieren (so ca. 5 bis 15 Wörter). Diese Wörter sollen als Ziel alle in einer Zeile sein, wo jedes Wort in einer eigenen Zelle ist. Die Reihenfolge der Wörter sollte dabei eingehalten werden.
Das Reinkopieren in Excel mit Kommatrennung ist kein Problem, jedes Wort ist also schon in einer eigenen Zelle. Leider passiert es (aufgrund der Formatierung des kopierten Textes) fast immer, dass z.B. 3 Wörter in der ersten Zeile sind, 4 Wörter in der zweiten Zeile und 2 Wörter in der dritten Zeile. Außerdem sind immer mal wieder überflüssige Leerzeichen in den Zellen. Es ist also eigentlich nie nur eine einzelne Zeile, was aber das Ziel wäre. Das alles per Hand zu ordnen wäre zu aufwändig, da ich das geschätzt einige hundert Male machen muss.
Ich habe schon im Internet gesucht und nichts gefunden, was bei mir funktioniert. Wie kann ich dieses Problem in den Griff bekommen? Für jeden Tipp bin ich echt dankbar.

Gruß
Eric
Top
#2
Hi Eric,

füge deine kopierten Wörter in eine Zelle (z.B. A1) ein und gehe dann zu Daten==> Text in Spalten. Anklicken und "Getrennt" markieren. Mit "weiter" zur nächsten Maske schalten und als Trenner Komma und Leerzeichen anhaken. Dann "Fertigstelle" anklicken.

Nun hast du in jeder Zelle nur noch ein Wort.
Gruß Günter
Jeder Fehler erscheint unglaublich dumm, wenn andere ihn begehen.
angebl. von Georg Christoph Lichtenberg (1742-1799)
Top
#3
Hallo,

danke aber das hilft mir nicht, so habe ich das ja gleich am Anfang versucht.
Denn wie ich im ersten Post erwähnte werden schon beim Einfügen in Excel nicht alle Wörter nur in eine Zelle kopiert, sondern in mehrere Zellen, wie z.B.:
3 Wörter in der ersten Zeile, 4 Wörter in der zweiten Zeile und 2 Wörter in der dritten Zeile.
Den Textkonvertierungs-Assistent habe ich dafür schon genutzt, so dass die Wörter jeweils eine eigene Zelle haben, nur halt wie im oben genannten Beispiel 3 Zeilen und nicht eine.
Ich hoffe, ich habe das verständlich genug beschrieben.

MFG
Top
#4
Hi Eric,

kannst Du eine PDF aus der Du heraus kopierst zum Testen bereitstellen?
Ich hätte da einen Ansatz würde das aber gerne vorher testen bevor ich Dich darauf los lasse.

Gruß
Max
Top
#5
Hallo Eric,

das wird wahrscheinlich nur mit einem Makro gehen.

Hier ist mal ein erster Ansatz. Die Daten werden spaltenweise übertragen. Für eine festgelegte Reihenfolge müsste man das Makro noch ausbauen. DIe pdf-Daten ab Zeile 2 einfügen. Leerzeichenentfernung ist noch nicht dabei.

Code:
Option Explicit
Sub EineZeile()
'Variablendeklarationen
'Bereich
Dim txtCell As Range
'Long
Dim iCnt&
'Schlife ueber alle Textzellen
For Each txtCell In ActiveSheet.Cells.SpecialCells(xlTextValues)
  'Zaehler hochsetzen
  iCnt = iCnt + 1
  'naechste Zelle in Zeile 1 ausfuellen
  Cells(1, iCnt) = txtCell
'Ende Schlife ueber alle Textzellen
Next
End Sub
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Top
#6
Hallo Eric,

ebenfalls eine Makrovariante. Der Code kommt in das schon vorhandene VBA-Modul des entsprechenden Tabellenblattes.

Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
  Dim oData As New DataObject, varW As Variant
  On Error Resume Next
  oData.GetFromClipboard
  varW = Split(Application.WorksheetFunction.Clean(oData.GetText), " ")
  Target.Resize(1, UBound(varW) + 1).Value = varW
End Sub

Siehe dazu auch hier und beachte bitte den Hinweis mit der UserForm: http://www.online-excel.de/excel/singsel_vba.php?f=28

Per Doppelklick auf eine Zelle wird der Textinhalt der Zwischenablage in die angeklickte Zelle und die rechts folgenden Zellen eingefügt.
Du kopierst also Text in der PDF und fügst diesen per Doppelklick auf eine Excelzelle wieder ein.

Gruß Uwe
Top
#7
Hallo,

erst einmal danke an alle für die schnellen Antworten :)
Ich habe jetzt mal Uwes Code ausprobiert... nun bekomme ich eine Zeile, mit einem Wort pro Zelle.
Nun ist mir aber aufgefallen, dass ich etliche Wörter eh noch bearbeiten muss.
Ist es möglich, dass mir ein Makro den kopierten Inhalt als Spalte und nicht als Zeile widergibt (so wird es für mich übersichtlicher) und Kommas als Trennungszeichen erkennt und gleichzeitig alles nach einem Leerzeichen ignoriert (also das nicht in die Zelle mit einkopiert)?

Gruß
Eric
Top
#8
Hallo Eric,

so kommt es untereinander:

Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
  Dim oData As New DataObject, varW As Variant
  On Error Resume Next
  oData.GetFromClipboard
  varW = Split(Application.WorksheetFunction.Clean(oData.GetText), " ")
  Target.Resize(UBound(varW) + 1, 1).Value = Application.Transpose(varW)
  Target.EntireColumn.AutoFit
End Sub

Zitat:Ist es möglich, dass mir ein Makro den kopierten Inhalt als Spalte und nicht als Zeile widergibt (so wird es für mich übersichtlicher) und Kommas als Trennungszeichen erkennt und gleichzeitig alles nach einem Leerzeichen ignoriert (also das nicht in die Zelle mit einkopiert)?

Das erklärst Du besser mal mit einem Vorher-Nacher-Vergleich. Wink

Gruß Uwe
Top
#9
Hallo,

danke (das geht ja echt fix hier^^). Dann versuche ich mal eine Beschreibung:
wenn ich fogendes kopiere: "Wort1, Wort2 (Text1), Wort3 (Text2), Wort4, Wort5 (Text3), Wort6"

soll idealerweise das dabei herauskommen (keine Kommas, keine Leerzeichen und nichts in Klammern, also wirklich nur das erste Wort vor dem Komma):
Wort1
Wort2
Wort3
Wort4
Wort5
Wort6

falls es so aussieht ist es auch OK aber so habe ich halt viel per Hand zu ändern:
Wort1
Wort2 (Text1)
Wort3 (Text2)
Wort4
Wort5 (Text3)
Wort6

Ich hoffe das war verständlich :)

MFG
Top
#10
Hallo Eric,

Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
  Dim i As Long, oData As New DataObject, varW As Variant
  On Error Resume Next
  oData.GetFromClipboard
  varW = Split(Application.WorksheetFunction.Clean(oData.GetText), ", ")
  For i = 1 To UBound(varW)
    varW(i) = Left(varW(i), InStr(1, varW(i), " ") - 1)
  Next i
  Target.Resize(UBound(varW) + 1, 1).Value = Application.Transpose(varW)
  Target.EntireColumn.AutoFit
End Sub

Gruß Uwe
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste