Office - Word, Excel und Co. 9.738 Themen, 41.366 Beiträge

Hilfe!: Adressen aus Word in Excel übertragen...?!

peetyobi / 13 Antworten / Flachansicht Nickles

Hallo zusammen,


Ich habe ca. 4000 Anschreiben in Word-XP als .doc Datei. Am Anfang jedes Anschreiben steht eine postalische Adresse von Kunden: zB:


Peter Mustermann


Musterstr. 23


12345 Mustersatdt


Nun möchte ich diese Adressen in eine ExcelXP-Tabelle übertragen, die ungefähr so aussehen soll:


Peter; Mustermann; Musterstr.; 23; 12345; Musterstadt


(da wo das Semikolon steht soll eine neue Spalte bzw. Zelle beginnen)


Wie mache ich das am schnellsten mit so wenig Klicks wie möglich. Ich weiss das man mittels Transponieren die Zeilen aus Word in Spalten in Excel umwandeln kann. Das reicht mir aber nicht, da es zu lange dauert, und die Zeilen werden dabei auch nicht aufgeteil, dh. die Postleitzahl steht dann immer noch in der selben Zelle wie die Stadt. Man muss die dann wieder auseinanderfriemmeln. Ich habe es auch schon mit Makro-Aufzeichen versucht. Es erleichtert zwar bringt aber trotzdem nicht viel ein.


Hat jemand vielleicht ein VB-Script für mich?


Vielen Dank im Voraus!

bei Antwort benachrichtigen
Uli M peetyobi „Hi Uli, ich habe wohl doch etwas zu wenig Informationen über mich und vor allem...“
Optionen

Hallo PeeT,

Sofern du's nicht schon anderweitig erledigt hast:
Ich hab mich mal nach deinen Angaben versucht, wobei ich natürlich keine großartige Test-Umgebung aufgebaut hab. Das Routinchen ist für ein neues Modul in bel. *.do? gedacht. Es erwartet alle zu untersuchenden Dok's im Pfad "PFAD". Ich würde empfehlen, zum Test mal mit wenigen anzufangen.
Es wird dann also in jedem Dok nach dem 1. rein numerischen Wort gesucht (CH-12345 wäre also "ungültig"), darüber wird die Strasse vermutet (allenfalls leere Absätze dazwischen) und im 1. Absatz Anrede, Vorname(n) und Nachnamen. Das Ergebnis wird einstweilen Tab-getrennt in ein leeres Dok ausgegeben.
Es bleibt sicher viel Spielraum für Unwägbarkeiten, aber vielleicht kannst du deinen Job zumindest abkürzen.
Bei recht vielen mag Word schon mal in die Knie gehen.
Ich denke, du schaffst notwendige Anpassungen/ggf. Erweiterungen allein, wenn nicht ...

Option Explicit

Type ADRESSE
Index As Long
Dok As String
Anrede As String
Vorname As String
Nachname As String
Straße As String
Plz As String
Ort As String
Rest As String
' ggf. weitere wie Ansprechpartner, ...
End Type

Sub AdressenAusDoksAuslesen()
Const PFAD = "U:\Test\Adressen" ' Pfad, in dem alle fraglichen *.doc stehen sollten
Dim aAdr() As ADRESSE
Dim objDoc As Word.Document
Dim lTot As Long, L As Long, lP As Long, lOk As Long
Dim sP As String

On Error Resume Next
With Application.FileSearch
.NewSearch
.LookIn = PFAD
.SearchSubFolders = False
.FileName = "*.doc" ' ggf. weiter einschränken oder erweitern
.Execute
lTot = .FoundFiles.Count
If lTot > 0 Then
Application.ScreenUpdating = False
For L = 1 To lTot
lP = 1: sP = ""
Set objDoc = Documents.Open(.FoundFiles(L), False, True, False)
With objDoc
StatusBar = "Dokument " & L & " von " & lTot & " wird verarbeitet: " & .Name
' "Plz suchen" => Mindest-Kriterium
Do While Not IsNumeric(sP)
' davon ausgehend, dass es sich stets um Absätze handelt
sP = Trim(.Paragraphs(lP).Range.Words(1).Text)
lP = lP + 1
If lP = .Paragraphs.Count Then Exit Do
Loop

If IsNumeric(sP) And lP > 2 Then
lP = lP - 1
ReDim Preserve aAdr(lOk)
aAdr(lOk).Index = L
aAdr(lOk).Dok = .Name
aAdr(lOk).Plz = sP
If .Paragraphs(lP).Range.Words.Count > 1 Then
sP = Trim(Mid(.Paragraphs(lP).Range, Len(sP) + 1))
If Len(sP) > 0 Then sP = Left(sP, Len(sP) - 1)
aAdr(lOk).Ort = sP
' darüber Strasse, ggf. leere Absätze dazwischen
Do While lP > 1
lP = lP - 1
sP = Trim(.Paragraphs(lP).Range.Text)
If Len(sP) > 1 Then
aAdr(lOk).Straße = Left(sP, Len(sP) - 1)
Exit Do
End If
Loop
' alles zwischen hier und 1. Absatz mal in Rest packen (ggf. Probs in Excel wg. Umbrüchen)
If lP > 2 Then
sP = .Range(.Paragraphs(2).Range.Start, .Paragraphs(lP).Range.End - 1)
' ggf. replace auf chr(10) und chr(13)
aAdr(lOk).Rest = Trim(sP)
End If
' 1. Absatz => natürlich bes. vage so
aAdr(lOk).Anrede = Trim(.Paragraphs(1).Range.Words(1).Text)
aAdr(lOk).Nachname = Trim(.Paragraphs(1).Range.Words(.Paragraphs(1).Range.Words.Count - 1).Text)
sP = Trim(.Range(.Paragraphs(1).Range.Words(1).End, .Paragraphs(1).Range.Words.Last.Start))
sP = Left(sP, Len(sP) - Len(aAdr(lOk).Nachname))
aAdr(lOk).Vorname = Trim(sP)
End If
lOk = lOk + 1
End If

.Close 0
End With
Application.ScreenUpdating = True
Next L
End If
End With

Ausgabe:
sP = ""
For L = LBound(aAdr) To UBound(aAdr)
sP = sP & aAdr(L).Index & vbTab _
& aAdr(L).Dok & vbTab _
& aAdr(L).Anrede & vbTab _
& aAdr(L).Vorname & vbTab _
& aAdr(L).Nachname & vbTab _
& aAdr(L).Straße & vbTab _
& aAdr(L).Plz & vbTab _
& aAdr(L).Ort & vbTab _
& aAdr(L).Rest & vbCrLf
Next L
' zunächst mal in ein leeres Dok, wenn's so halbwegs passt, ist *.xls nicht mehr weit
Set objDoc = Documents.Add
objDoc.Range.InsertAfter sP
End Sub

Gruß
Uli

bei Antwort benachrichtigen