Lexikon-struktur in Tabelle?

  • #1
M

mario_mellone

Guest
Hallo,
ich hab folgendes problem, vielleicht kennt sich hier ja jemand damit aus:

ich habe eine Tabelle (word) und möchte diese so darstellen, dass einträge (aus spalte1), die zweimal und öfter vorhanden sind nur einmal angezeigt werden. in Spalte 2 steht der nächste eintrag, also wie im telefonbuch, blöd zu erklären....

kleines beispiel:

momentan sieht meine tabelle so aus:

1.spalte  2.spalte

müller       bernd
müller       bruno
müller       marion

schmidt    andrea
schmidt     ivonne
schmidt    markus

und so soll es aussehen:

müller
    bernd
    bruno
    marion

schmidt
     andrea
     ivonne
     markus

hat irgend jemand hier eine idee, wie man das einfach anstellen könnte (sind so ca 3000 datenbankeinträge und ich hab keine lust, die alle abzuschreiben)

bin schon seit stunden am rumsuchen, das muss doch irgendwie gehen....

schon mal vielen dank!!
 
  • #2
Hallo,

ich hab das mal in Word 2000 getestet, geht.

Du hast die Einträge in einer Tabelle, dann markier die Spalte die ersetzt haben willst und sortiere die Einträge alphabetisch.

Dann markierst (Doppelklick) du den ersten Namen aus der Liste der zu löschenden (Müller) und klickst im Menü Bearbeiten - Ersetzen

Im Feld Suchen nach steht jetzt dein Müller
Klicke auf Erweitert
Wähle Suchrichtung nach unten
Setze ein Häckchen bei Mit Mustervergleich
Klicke auf Ersetzen

Jetzt bleibt der erste Müller stehen und du wirst für jeden weiteren Müller gefragt ob du löschen willst.

Wenn die Müllers durch sind, fragt er dich ob er nochmal oben anfangen soll, da würde er den ersten Müller auch löschen.

So kannst du alle Namen durchgehen.

lummo
 
  • #3
Ups was vergessen,

Das Feld Ersetzen durch lässt du leer,

lummo
 
  • #4
Viel einfacher (bevor du 1000 verschiedene Namen suchst und ersetzt):
Du kopierst die Tabelle in ein Excel-Blatt (wo Tabellen naturgemäß wohnen!)
In Zeile 1 sind die Spaltenköpfe: Name, Vorname, Name1, Vorname1.
Ich gehe davon aus, daß entsprechend deinem Beispiel die 2. Zeile leer ist und nach jedem Namensblock eine Leerzeile. Demzufolge steht in der 3. Zeile der Müller Bernd.
In die 2.Zeile der 3.Spalte schreibst du: =WENN(A2=;A3;)
In die 2. Zeile der 4. Spalte schreibst du: =WENN(B2=;;B2)
Beide Formeln ziehst du bis ans Ende deiner Liste runter.
Dann markierst du Spalte 3 und 4 --> Strg+C --> Bearbeiten > Inhalte einfügen > Werte > OK
Die Ergebnistabelle kopierst du dann wieder nach Word zurück. Feddisch.
 
  • #5
Oder so ... ;)
 
  • #6
Hei das ging ja flott!! :D :D
danke toll! und funktionieren tuts auch noch!

hab mich leider noch nie mit exel richtig beschäftigt, ausser für summe und mwst berechnen habe ich das glaub noch nicht gebraucht, aber jetzt...

*freu*

das einzige wehrmutströpfchen:  :'( mein ergebnis sieht jetzt so aus:

müller
              bernd
              bruno
              marion

was mir aus platzgründen aber wichtig wäre:

müller
    bernd
    bruno
    marion

also müsste man irgendwie spalte 2 als funktion von spalte 1 laufen lassen, geht sowas?

aber in jedem fall schon mal:
vielen herzlichen dank!
 
  • #7
Hallo mario.mellone,

hab dir das mal als Word-Makro geschrieben.

Gruß Matjes  :)

Code:
'******************************************************************************
Public Sub NamenTabelle2SpaltigIn1Spaltig()
'  1.spalte  2.spalte
'
'müller bernd
'müller bruno
'müller marion
'
'schmidt andrea
'schmidt ivonne
'schmidt markus
'
'und so soll es aussehen:
'
'müller
'    bernd
'    bruno
'    marion
'
'schmidt
'     andrea
'     ivonne
'     markus
'Output:
'   In einem neuen Document wird eine einspaltige Tabelle angelegt
'   Namen, Vornamen werden nach obigem Muster ausgerichtet
'******************************************************************************
 ->Spaltendefinition
  Const c_SPName = 1
  Const c_SPVorname = 2
 ->Formatangaben der Ausgabe-Tabelle
  Const c_Tab2_Width = 5->Breite in cm
  Const c_Tab2_Einzug = 0.5->Einzug bei Vornamen
  
  Dim doc1 As Document, tab1 As Table, doc2 As Document, tab2 As Table
  Dim s_Name As String, s_lastName As String, s_Vorname As String
  Dim z1 As Long, z2 As Long, l_EinzugPoints As Long
 
  l_EinzugPoints = CentimetersToPoints(c_Tab2_Einzug)
 
  Set doc1 = ActiveDocument
  
 ->1. schauen, ob Selection in einer Tabelle steht
  If Not PruefenEineTabelleSelektiert Then GoTo Aufraeumen
  Set tab1 = Selection.Tables(1)

 ->2. Spaltenanzahl 2 prüfen
  If Not PruefenTabelleSpaltenAnzahl(tab1, 2) Then GoTo Aufraeumen
  
 ->3. neues Document anlegen
  Documents.Add
  Set doc2 = ActiveDocument
  
 ->4. Tabelle einfügen
  doc2.Tables.Add Range:=Selection.Range, NumRows:=1, NumColumns:=1
  Set tab2 = doc2.Tables(1)
  
 ->5. Tabelle formatieren
  With tab2.Columns(1)
    .SetWidth _
      ColumnWidth:=CentimetersToPoints(c_Tab2_Width), _
      RulerStyle:=wdAdjustFirstColumn
  End With
  With tab2.Rows
    .Alignment = wdAlignRowLeft:
    .AllowBreakAcrossPages = True
  End With

 ->Tabelle abarbeiten
  s_lastName = xxxxxxxxxxxxxxxxxxxx
  z2 = 0
  For z1 = 1 To tab1.Rows.Count
   ->aktuelle Zeile Ziel-Tabelle hochzählen
    z2 = z2 + 1
   ->Zeile in Zieltabelle einfügen
    tab2.Rows(z2).Select
    Selection.InsertRows 1
   ->Namen aus Quell-Tabelle
    s_Name = tab1.Cell(Row:=z1, Column:=c_SPName).Range.Text
   ->ggf. anhängende Leerzeichen und Steuerzeichen abschneiden
    Call AnhaengendeSteuerUndLeerzeichenAbschneiden(s_Name)
   ->Vorname aus Quell-Tabelle
    s_Vorname = tab1.Cell(Row:=z1, Column:=c_SPVorname).Range.Text
   ->ggf. anhängende Leerzeichen und Steuerzeichen abschneiden
    Call AnhaengendeSteuerUndLeerzeichenAbschneiden(s_Vorname)
    
    If s_Name =  Then
     ->Leerzeile -> nur Einzug
      tab2.Rows(z2).SetLeftIndent _
            LeftIndent:=l_EinzugPoints, _
            RulerStyle:=wdAdjustFirstColumn
    ElseIf s_Name = s_lastName Then
     ->Name wie Vorgänger -> Einzug und Vornamen eintragen
      tab2.Rows(z2).SetLeftIndent _
            LeftIndent:=l_EinzugPoints, _
            RulerStyle:=wdAdjustFirstColumn
      tab2.Cell(Row:=z2, Column:=1).Range.Text = s_Vorname
    Else
     ->neuer Name
     ->kein Einzug, Namen eintragen
      tab2.Rows(z2).SetLeftIndent _
            LeftIndent:=0, _
            RulerStyle:=wdAdjustFirstColumn
      tab2.Cell(Row:=z2, Column:=1).Range.Text = s_Name
     ->Namen für nächste Vergleiche merken
      s_lastName = s_Name
     ->weitere Zeile mit Einzug und Vornamen eintragen
      z2 = z2 + 1
      tab2.Rows(z2).Select
      Selection.InsertRows 1
      tab2.Rows(z2).SetLeftIndent _
            LeftIndent:=l_EinzugPoints, _
            RulerStyle:=wdAdjustFirstColumn
      tab2.Cell(Row:=z2, Column:=1).Range.Text = s_Vorname
    End If
  Next z1
 ->letzte Zeile löschen
  tab2.Rows(tab2.Rows.Count).Delete
 ->Cursor in erste Tabellen-Spalte setzen
  tab2.Rows(1).Select
  Selection.Collapse
Aufraeumen:
  Set doc1 = Nothing: Set doc2 = Nothing: Set tab1 = Nothing: Set tab2 = Nothing
End Sub
'******************************************************************************
Private Function PruefenTabelleSpaltenAnzahl( _
                              mytab As Table, _
                              l_anzCol As Long) As Boolean
 ->Spaltenanzahl der Tabelle prüfen
  If mytab.Columns.Count <> l_anzCol Then
    MsgBox ( _
      Die Tabelle hat  & mytab.Columns.Count &  Spalten. & vbCrLf & _
      Erwartet wird eine Tabelle mit  & l_anzCol &  Spalten.)
    PruefenTabelleSpaltenAnzahl = False
  Else
    PruefenTabelleSpaltenAnzahl = True
  End If
End Function
'******************************************************************************
Private Function AnhaengendeSteuerUndLeerzeichenAbschneiden(s_Str As String)
 ->ggf. anhängende Leerzeichen und Steuerzeichen abschneiden
  Dim s As String
  Do
    s = Right(s_Str, 1)
    Select Case s
      Case Chr(0) To Chr(32): s_Str = Left(s_Str, Len(s_Str) - 1)
      Case Else: Exit Do
    End Select
  Loop
End Function
'******************************************************************************
Private Function PruefenEineTabelleSelektiert() As Boolean
 ->1. schauen, ob Selection in einer Tabelle steht
  If Selection.Tables.Count <> 1 Then
    If Selection.Tables.Count = 0 Then
      MsgBox ( _
        Der Cursor steht nicht in einer Tabelle. & vbCrLf & _
        Bitte setzen Sie den Cursor in die Namen-Tabelle.)
    Else
      MsgBox ( _
        In der Selection sind  & Selection.Tables.Count & _
         Tabellen selektiert. & vbCrLf & _
        Bitte setzen Sie den Cursor in eine Namen-Tabelle.)
    End If
    PruefenEineTabelleSelektiert = False
  Else
    PruefenEineTabelleSelektiert = True
  End If
End Function
 
  • #8
Für das Platzproblem gibt es eine Variante:
Zeile 2, Spalte 3: =WENN(A2=;A3;WENN(B2=;;     &B2))
Die Formel in der 4. Spalte entfällt. Ansonsten alles identisch.
Die Anzahl der Leerzeichen in den Anführungszeichen vor dem kaufmännische und (&) kannst du je nach Platzangebot variieren.

Nicht so bomforzionös wie ein Makro, aber immerhinque, wie der Lateiner sagt.
 
  • #9
na jungs....ich bin sprachlos!

bin leider bis heute nicht dazugekommen, werd aber gleich nacher mal eure vorschläge ausprobieren.

vielen dank schonmal!!!
 
Thema:

Lexikon-struktur in Tabelle?

ANGEBOTE & SPONSOREN

Statistik des Forums

Themen
113.840
Beiträge
707.963
Mitglieder
51.494
Neuestes Mitglied
Flensburg45
Oben