42 Aufrufe
Gefragt in Textverarbeitung von robbi58 Experte (1k Punkte)
Bearbeitet vor von robbi58

Guten Morgen allerseits!

Ich habe ein Word-Dokument, dass folgende Informationen ,aufgeteilt auf 3 Spalten, enthält (ca. 1 600 Namen):

Diesen möchte ich wie folgt in Spalten darstellen (auslesen):

Achmiller/Anton/I 22
Achmiller/Georg/A 91

Das Problem dabei ist, dass der Familiennamen bei diesem Beispiel nur einmal vorkommt, die zugeordneten Vornamen aber mehrmals. Im Endeffekt möchte ich die Namen nach den zugeordneten Nummern ordnen (A 1, A 2, A 3,..., Z 1, Z 2,...).

Mit der TEXTTEILEN-Funktion habe ich das Problem der mehrfachen Zuordnung nicht lösen können.
Vielleicht hat jemand eine Idee, wie man dies lösen könnte.

Ich bedanke mich im Voraus, Robert

3 Antworten

0 Punkte
Beantwortet vor von xlking Experte (1.9k Punkte)

Hallo Robert,

mit einem VBA-Makro sollte das kein Problem sein. Du brauchst aber 4 Spalten, wenn du nach Nummer sortieren willst, sonst würde nach Text sortiert werden. also A 1, A 10, A2. Das willst du sicher nicht.

Ein Bild ist natürlich herzlich wenig. Ein Beispieldokument mit anonymen Daten wäre besser zum Testen. Aber ich denke, ich kann dir hier einen Code anbieten.

Führe mal in dem Word-Dokument in einem allgemeinen Modul mit F5 den folgenden Code aus und berichte ob der fehlerfrei durchläuft und die gewünschten Ergebnisse erzeugt.

Sub NachExcel()
  
  Dim xlApp As Object, wb As Object, sh As Object, i As Long, S2S3, S3S4
  Dim Nachname As String, Vorname As String, Code As String, Bst As String, Nummer As Long
  
  Set xlApp = CreateObject("Excel.Application")
  Set wb = xlApp.Workbooks.Add
  Set sh = wb.sheets(1)
  xlApp.Visible = True
  
  Dim p As Paragraph
  
  sh.Cells(1, 1) = "Nachname"
  sh.Cells(1, 2) = "Vorname"
  sh.Cells(1, 3) = "Buchstabe"
  sh.Cells(1, 4) = "Nummer"
  
  i = 1
  
  For Each p In ActiveDocument.Paragraphs
    If p.Range.Font.Underline = wdUnderlineSingle Then
        Nachname = p.Range.Text
    ElseIf Replace(p.Range.Text, Chr(13), "") <> "" Then
        i = i + 1
        S2S3 = Split(p.Range.Text, " _ ")
        Vorname = S2S3(0)
        S3S4 = Split(S2S3(1), " ")
        Bst = S3S4(0)
        Nummer = CLng(S3S4(1))
    
        sh.Cells(i, 1) = Nachname
        sh.Cells(i, 2) = Vorname
        sh.Cells(i, 3) = Bst
        sh.Cells(i, 4) = Nummer
    End If
  Next p

  With sh.Sort
    .SortFields.Clear
    .SortFields.Add2 Key:=sh.Range("C1:C" & i), SortOn:=0, Order:=1, DataOption:=0
    .SortFields.Add2 Key:=sh.Range("D1:D" & i), SortOn:=0, Order:=1, DataOption:=0
    .SortFields.Add2 Key:=sh.Range("A1:A" & i), SortOn:=0, Order:=1, DataOption:=0
    .SortFields.Add2 Key:=sh.Range("B1:B" & i), SortOn:=0, Order:=1, DataOption:=0
    .SetRange sh.Range("A1:D" & i)
    .Header = 1
    .MatchCase = False
    .Orientation = 1
    .SortMethod = 1
    .Apply
  End With

End Sub

Gruß Mr. K.

0 Punkte
Beantwortet vor von robbi58 Experte (1k Punkte)
Hallo, Mr. K!

Danke für den vba-Code, der soweit perfekt funktioniert. Allerdings bekomme ich nur die ersten 75 Ergebnisse geliefert mit einem Laufzeitfehler und der Meldung: Index außerhalb des gültigen Bereichs. Wie muss ich den Code abändern, damit das gesamte Dokument auf Excel übertragen wird? Meine Kenntnisse reichen leider nicht aus.

LG Robert
0 Punkte
Beantwortet vor von xlking Experte (1.9k Punkte)
OK, das klingt doch schon mal gut. Nun müsstest du mal bitte selbst schauen, was beim 76. Ergebnis anders ist. Das mit dem Index bedeutet quasi, dass kein Split gefunden wurde. Heißt vielleicht, steht die Zahl direkt hinter dem Buchstaben (ohne Leerzeichen) oder der Unterstrich fehlt, oder es gibt ein Problem beim Nachnamen, welcher nicht unterstrichen ist. Vielleicht sind ja auch manuelle Seitenwechsel oder anderer Schnickschnack enthalten? Kann man halt nur direkt im Dokument prüfen.

Gruß Mr. K.
...