Clever-Excel-Forum

Normale Version: Tabelle aus Textdatei erstellen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo zusammen

Ich habe folgendes Problem:

Ich möchte anhand eines Textdokuments eine Tabelle erstellen, die mir Daten von Werkzeugen auflistet. Ein Werkzeug besteht aus der Werkzeuggruppe, einem Namen, Durchmesser, Schnittgeschwindigkeit usw...
Im Anhang befindet sich die Excelliste, die ich aus der Textdatei erstellt habe. [attachment=45970]

Nun habe ich zwei Spalten. Viele dieser Werte sind für mich nicht von Bedeutung, jedoch benötige ich die Daten die unterhalb einer Werkzeuggruppe aufgelistet sind. 
In meinem Fall sind das zum Beispiel die Zeilen ab dem Wert [WKZBOHR] (Zeile 38) und alle folgenden Zeilen, bis zur nächsten Leerzeile. Diese Zeilen definieren ein Werkzeug.
Diese Zeilengruppen wiederholen sich mit verschiedenen Gruppentitel (WKZBOHR, WKZAUFW4, WKZFRAES, usw)
Diese Werte möchte ich sortiert in eine horizontale Tabelle kopieren. Ich habe im Tabellenblatt "Sortiert" ein Soll-Muster erstellt.
Jede Werkzeuggruppe soll in einem eigenen Tabellenblatt stehen.

Kann man so etwas mit den herkömmlichen Excelformeln erstellen?

Ich freue mich auf eure Antworten.
Hallo,

habe eine Lösung gefunden.
Allerdings ist es nicht die eleganteste, da hier sehr viele Matrix-Formeln notwendig waren. Die Berechnung dauert daher ziemlich lange.
Das Endergebnis habe ich in einer separaten Datei gespeichert. Dann kannst du es dir erstmal anschauen und prüfen, ob es so ist, wie du es dir vorgestellt hast.
Du müsstest dann noch entsprechend filtern oder die Daten mittels Pivot aufbereiten.

Zu meiner Lösung:

Formel ab Zelle D2 im Blatt "Wkzschr1":
Code:
=WENN(A2<>"";ZÄHLENWENN(A$2:A2;"[*");"")

Einträge/Formeln im neuen Blatt "Sortiert2":
A1:A2: 1
ab A3: =WENN(MAX(Wkzschr1!$D:$D)=A1;"";A1+1)
ab B1: {=INDEX(Wkzschr1!$A:$B;VERGLEICH(Sortiert2!$A1;Wkzschr1!$D:$D;0);1)} --> Als Matrix-Formel abschließen
C1:W524: {=WENNFEHLER(INDEX(Wkzschr1!$A:$B;KKLEINSTE(WENN((Wkzschr1!$D:$D=$A1);ZEILE(Wkzschr1!$D:$D));SPALTE(B$1));WENN($B1<>"";1;2));"")} --> Als Matrix-Formel abschließen

Ich habe leider nur die Excel-Version 2016. Mit 365 ist sicher eine elegantere Lösung möglich.

Beste Grüße
Vielen Dank für die schnelle Antwort.
Wenn ich das richtig verstanden habe, hast du als erstes alle Zeilen nummeriert, die mit einem Wert "[" beginnen und die Zählung erhöht, sobald eine neue Zelle mit "[" beginnt. Alle leeren Werte hast du ausgeschlossen.
Das verstehe ich.

Was du anschliessend erstellt hast übersteigt meine Excel-Kenntnis.
 Die Daten in der Tabelle "Sortiert2" sind ohne die Werte. Huh
In der Finalen Version in der "Tabelle1" hast du die Werte wider eingesetzt. (Also Nr. 7, Zelle WKZID steht wider dem Wert "leer" gegenüber)
Kannst du mir erklären was du genau gemacht hast?

Die Tabelle1 der Finalen Version ist etwa das, was ich brauche.

Für die Sortierung wäre es jedoch sinnvoll, wenn ich die Bezeichnung z.B. [WKZBOHR] der Datenzeile hinzufügen könnte. Ist das auch möglich?
Hallo,

entschuldige bitte!
Für die finale Version habe ich einmal die Formel im Blatt "Sortiert2" ab Zelle B1 geändert.
Ändere diese in:
Code:
=WENN(A1=A2;INDEX(Wkzschr1!$A:$B;VERGLEICH(Sortiert2!$A1;Wkzschr1!$D:$D;0);1);"")
Dann werden auch die Werte beigestellt. 
Ich hatte die Formel bei der Erstellung der finalen Version geändert, um die Werte der Spalte B (alles mit "[...") für jede Zeile darzustellen.

Kombiniere in der finalen Version einfach "Tabelle1" und "Tabelle2" (Kopiere die Werte ab Spalte C:W aus dem Blatt "Tabelle1" in das Blatt "Tabelle2").

Beste Grüße
in VBA

Code:
Sub M_snb()
  For Each it In Sheet1.Columns(2).SpecialCells(2).Areas
      If it.Cells(1).Row > 1 Then If Left(it.Cells(1).Offset(-1, -1), 4) <> "[WKZ" Then it.Columns(1).Offset(-1).Resize(it.Cells.Count + 2) = "=1/0"
  Next
  Sheet1.Columns(2).SpecialCells(-4123, 16).EntireRow.Delete

  For Each it In Sheet1.Columns(2).SpecialCells(2).Areas
    If it.Cells(1).Row > 1 Then
        it.Cells(1).Offset(, 1).Resize(, it.Cells.Count) = Application.Transpose(it.Offset(, -1))
        it.Cells(1).Offset(1, 1).Resize(, it.Cells.Count) = Application.Transpose(it)
    End If
  Next
 
  Columns(1).Resize(, 2).Delete
  Columns(1).SpecialCells(4).EntireRow.Delete
End Sub