Supportnet Computer
Planet of Tech

Supportnet / Forum / Datenbanken

Feldinhalte trennen





Frage

Hallo Hallo Ich habe folgendes Problem. In eine Tabellenspalte habe ich in der Zellen bis zu 5 verschiedene Angaben, zahlen und Wörter, durch Komma getrennt. Die Zellen könnten auch leer sein. Wie könnte ich das schaffen diese Angaben zu trennen und in getrennte Spalten darstellen zu lassen. Also Spalte1- erste Angabe, Spalte2-zweite Angabe usw. Könnte mir von euch jemand helfen? Vielen dank in voraus. Gruss Matty

Antwort 1 von oliverV

Hallo Matty,

dein Problem musst du in mehreren Einzelschritten lösen:

Die erste Angabe bekommt du relativ einfach ausgelesen.
Erstelle eine Abfrage auf deiner Tabelle basierend und trage im Feld folgendes ein:
Links([Feldname];InStr([Feldname];“,“)-1)

Erklärung:

Links([Feldname];4)
Gibt von Links beginnend die ersten 4 Zeichen zurück
InStr([Feldname];“,“)
Gibt die Position von links beginnend an, an dem sich das gewünschte Zeichen befindet

Links([Feldname];InStr([Feldname];“,“)-1)
Durch „InStr“ wird abgefragt, an welcher Position sich das Komma befindet, dieser Wert abzüglich 1 wird von „Links“ verwendet um die entsprechenden Zeichen bis zum Komma zurückzugeben.

Schau dir das Ergebnis der Abfrage an, wenn du damit einverstanden bis, ändere die normale Auswahlabfrage in eine Anfügeabfrage um und gib dort das neue Feld für die Werte ein, anschließend ausführen.


Für die Angabe auf Position 2 wird es etwas schwieriger, da du nicht weißt, wo Position 2 anfängt (Durch unterschiedliche Längen von Position 1).

Erstelle wieder eine Abfrage und trage folgendes ein:
Teil([Feldname];InStr([Feldname],“,“)+2)
Du bekommt nun den „Rest“ geliefert (ab Pos. 2)

Erklärung:

Teil([Feldname];4)
Gibt den Feldinhalt ab Position 4 zurück

Teil([Feldname];InStr([Feldname],“,“)+2)
„InStr“ fragt wieder die Position des Kommas ab, „Teil“ verwendet diesen Wert +2 um den davon rechts stehenden Text zurückzugeben
(+2 wenn du „Komma“ und ein Leerzeichen verwendest, sonst nur +1)

Diese Abfrage speichere als normale Auswahlabfrage ab.

Nun wiederhole Schritt 1, mit dem Unterschied das du dich auf die soeben abgespeicherte Abfrage beziehst und nicht auf die Tabelle.

Für die Angaben auf Position 3, 4 und 5 musst du den ganzen Spaß wiederholen, indem du dich jeweils auf die vorhergehende Abfrage beziehst.

Bevor du mit der Fleißaufgabe beginnst, mache eine Sicherung von deiner alten Tabelle !!!

Poste mal ob es geklappt hat !

Gruß
oliver


Antwort 2 von Sir_Hilly

Probier mal das:


Sub trennen()
Dim dbs, rst, rst1
Dim werte() As String
Set dbs = CurrentDb
Set rst = dbs.openrecordset("Tabellen_name_der Ausgangstabelle")
Set rst1 = dbs.openrecordset("Zieltabelle")
    If Not rst.EOF Then
      
        rst.MoveFirst
        Do Until rst.EOF
            
            werte = split(rst("Name_des_feldes_mit_kommawerten").Value, ",", -1, 1)
            rst1.AddNew
            For x = LBound(werte()) To UBound(werte())
                rst1.Fields(x).Value = CStr(werte(x))
            Next
            rst1.Update
        rst.MoveNext
        Loop
        
    End If
    rst.Close
    rst1.Close
    Set dbs = Nothing
End Sub


Musst natürlich vorher in der Zieltabelle 5 Tabellen-Felder (typ:text) anlegen

Gruß

Antwort 3 von Matty

Hallo Oliver,

die erste Abfrage habe ich geschafft, die erste Angabe ausgelesen. Aber als ich die zweite erstellt habe kam eine Fehlermeldung "Undefinierte Funktion "Teil" in Ausdruck". Habe ich irgendwo einen Fehler gemacht? Ich komme einfach nicht nachvollziehen.
Muss noch dazu eine Funktion hinterlegt werden?
Könntest du mir weiterhelfen?

Gruss Matty


Antwort 4 von oliverV

Hallo Matty,

ich habe etwas gebastelt und dir eine Beispiel-DB gemailt.

Dabei bin ich auf zwei Probleme gestoßen, die ich bei Antwort 1 nicht berücksichtigt habe:

1.) Mit Instr habe ich die Position des Kommas ausgelesen, habe aber nicht bedacht, das der letzte Feldeintrag kein abschließendes Komma enthält.
Das Problem habe ich gelöst, indem ich die Funktionen in eine Wenn-Funktion integriert habe.

2.) Ich habe geschrieben, das du eine Anfügeabfrage erstellen mußt, das ist falsch, da mit einer Anfügeabfrage neue Datensätze an die vorhandene Tabellen angefügt werden, die alten also noch bestehen bleiben.
Du muß eine Tabellen-Erstellungsabfrage erstellen, mit der du die gewünschten Feldinhalte in eine neue Tabelle speichert.
Diese neue Tabelle kannst du nach Erstellung wieder in den alten Tabellennamen umbennen, um evtl. vorhanden Berichte oder Formulare weiterhin nutzen zu können.

Gruß
oliver

Antwort 5 von Armin

... Ehm, vielleicht liege ich ja falsch.

ich würde die Tabelle mit der Spalte (oder nur die Spalte über den Umweg Excel) Word Textformat exportieren (*.txt) , und dann wieder als Tabelle importieren (.. und im Importfilter Trennzeichen Space setzen etc,)

Vielleicht hilfreich "?

Armin

Antwort 6 von Armin

... unter der Annahme,das es hier um eine einmalige Übernahme von Daten geht, die offensichtlich nicht normalisiert vorliegen.

Armin

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: