Daten neu sortieren
#1
Photo 
Hallo Zusammen,

ich bin VBA Anfänger!

Ich möchte Roh-Daten von einer Tabelle in eine neue Tabelle strukturieren.

Meine Herausforderung  (Quelle_Tab1) ist folgende:
  • Alle Daten stehen in einer Spalte (A)
  • Ein Datensatz hat mal drei oder mal vier Zeilen (Letzte Teile beginnt immer mit "Tel:" in der Zelle
  • Bei 4 Zeilen gibt es zusätzlich eine Brancheninfo in der 2 Zeile
  • In einer Zeile stehen mehrere Datenfelder z.B. Str. PLZ und Ort oder Tel, E-Mail und Web
Die Daten sollen auf eine neue Tabelle (Ziel_Tab2) aufgeteilt werden.

Meine Fragen:
  • Wie finde ich die Zeilennummern Datensatzanfang und Datensatzende (Zelle mit Zeichenfolge "Tel:") für meine Schleife
  • Wie trenne ich die Felder (Trennzeichen = "|"
Die Feldtrennung könnte ich auch später mit Excel Bordmitteln (Daten-Text in Spalten) machen.

Ich freue mich auf eure Anregungen!

Schon jetzt vielen Dank für eure Unterstützung!

Stefan


Angehängte Dateien Thumbnail(s)
       
Top
#2
Hallo,

stelle doch bitte die Datei zur Verfügung, dann kann man mögliche Vorschläge testen.
Viele Grüße
Klaus-Dieter
Der Erfolg hat viele Väter, 
der Misserfolg ist ein Waisenkind
Richard Cobden
Top
#3
Moin Stefan!
Wenn Du statt der Screenshots die .xlsx hochladen würdest, könnte man leichter testen.
(eindeutig zu spät!  Blush)

Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
[-] Folgende(r) 1 Nutzer sagt Danke an RPP63 für diesen Beitrag:
  • stepcke
Top
#4
Die Zeile mit "Telefon" trennt eindeutig die Datensätze, das kann VBA gut erkennen.
Top
#5
Hier nun eine Beispiel-Datei!

Danke


Angehängte Dateien
.xlsx   DatenNeuSortieren.xlsx (Größe: 11,12 KB / Downloads: 5)
Top
#6
(14.01.2021, 13:53)Fennek schrieb: Die Zeile mit "Telefon" trennt eindeutig die Datensätze, das kann VBA gut erkennen.

Genau, mir fehlt nur das Wissen diese Zeile zu ermitteln  Huh

Top
#7
Dir hilft die Range.Find-Methode.
Im Link findest Du unten auch ein Beispiel, wie man per Schleife und .FindNext-Methode durch die Fundstellen hoppelt.

Ich schaue heute Abend wieder rein.
Dann dürfte ich auch Zeit finden, mal flugs einen Code zu schreiben.
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
[-] Folgende(r) 1 Nutzer sagt Danke an RPP63 für diesen Beitrag:
  • stepcke
Top
#8
Vielen Dank Ralf, dass hört sich gut an!
Top
#9
Hallo Ralf,

Leider scheitere ich an der Herausforderung das Satzende zu definieren.

Hier mein Ansatz/Versuch:

    Set Bereich = Tab_Basis.Range(Cells(i_Basis, 1), Cells(iBasis + 3, 1))

    SatzEnde = Bereich.Find(what:=sBegriff, LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows).Row

Was mache ich falsch?

Danke und Gruß
Top
#10
Hier ein copy/paste Lösung, zum Testen habe ich ein neues Sheets("Test") eingfügt:

Code:
Sub F_en()
Dim rng As Range, iAdr As Range, Anf As Range

such = "Tel:"
Set Anf = Cells(2, 1)
With Sheets("Quelle").Columns(1)
    Set rng = .Find(such, , xlValues, xlPart)
    adr = rng.Address
    Do
        rng.Interior.Color = vbYellow
        Set iAdr = Range(Anf, rng)
        Tx = Application.Transpose(iAdr)
        If UBound(Tx) = 3 Then Tx(1) = Tx(1) & "|"
        lr = lr + 1
        Sheets("Test").Cells(lr, 1) = Join(Tx, "|")
        Set Anf = rng.Offset(1)
        Set rng = .FindNext(rng)
    Loop Until rng.Address = adr
End With
End Sub

Danach fehlt noch ein "Text-in_Spalten".


Angehängte Dateien
.xlsm   DatenNeuSortieren.xlsm (Größe: 18,86 KB / Downloads: 2)
[-] Folgende(r) 1 Nutzer sagt Danke an Fennek für diesen Beitrag:
  • stepcke
Top


Gehe zu:


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