Microsoft Excel

Herbers Excel/VBA-Archiv

txt-import

    Betrifft: txt-import von: Stefan
    Geschrieben am: 29.09.2003 15:27:03

    hallo,

    Ich habe ein größeres txt-file. Nun gibt es ja feine makros die es mir ermöglichen diese beliebig zu importieren. Jetzt habe ich nur leider ein problem. In dieser text tabelle werden die informationen wie folgt dargestellt


    Nr_1 Text_1 Nr._2 Text_2 ert_1 Wert_2 Wert_3

    Ich benötige aus dem File eigentlich nur die Werte aus Nr_1, Nr_2 und Wert_3

    Das einzige Problem ist, das die Nr_1 und die Nr_2 erst eine einheitliche Zurodnung ermöglichen, die Werte der Nr_1 jedoch nicht durchgehend gelistet werden. Das sieht wie folgt aus:

    Nr_1 Text_1 Nr._2 Text_2 Wert_1 Wert_2 Wert_3
    10001 XY 555 XY 100 200 150
    XY 666 XY 100 200 150
    XY 777 XY 100 200 150
    10002 XY 555 XY 100 200 150
    XY 666 XY 100 200 150
    .....

    Das Problem ist nun, wie bekomme ich die Nr._1 durchgehend in den Spalten eingetragen, denn die Werte aus Nr_2 kommen häufiger vor und sind somit nicht direkt zuordnenbar.
    Es sollte dann wie folgt aussehen, mit solchen Daten ist der Import für mich im Rahmen meiner Fähigkeiten wieder möglich.

    Nr_1 Text_1 Nr._2 Text_2 Wert_1 Wert_2 Wert_3
    10001 XY 555 XY 100 200 150
    10001 XY 666 XY 100 200 150
    10001 XY 777 XY 100 200 150
    10002 XY 555 XY 100 200 150
    10002 XY 666 XY 100 200 150

    Vielen Dank


    Gruß

    Stefan

      


    Betrifft: AW: txt-import von: Reinhard
    Geschrieben am: 29.09.2003 21:01:55

    Hi Stefan,
    probier das mal aus.
    Gruß
    Reinhard

    Sub test()
    Dim Zeile As Integer
    Dim Textzeile As String
    Dim n As Integer
    Dim Prüf As Variant
    Zeile = 2
    Close
    Open "c:\temp\tesst.txt" For Output As #1
    Print #1, "10001 XY 555 XY 100 200 150"
    Print #1, "XY 666 XY 100 200 150"
    Print #1, "XY 777 XY 100 200 150"
    Print #1, "10002 XY 555 XY 100 200 150"
    Print #1, "XY 666 XY 100 200 150"
    Close #1
    Open "c:\temp\tesst.txt" For Input As #2
    Range("a1:g65536").ClearContents
    While Not EOF(2)
        Input #2, Textzeile
        Cells(Zeile, 1) = Textzeile
        Zeile = Zeile + 1
    Wend
    Close #2
    Range(Cells(2, 1), Cells(Zeile - 1, 1)).Select
        Selection.TextToColumns Destination:=Range("a2"), DataType:=xlDelimited, _
            TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=False, _
            Semicolon:=False, Comma:=False, Space:=True, Other:=False, FieldInfo _
            :=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), _
            Array(7, 1))
    'Prüf = Range("a2")
    For n = 2 To Zeile - 1
        If IsNumeric(Cells(n, 1)) Then
            Prüf = Cells(n, 1)
        Else
            
            Range(Cells(n, 1), Cells(n, 7)).Cut
            Cells(n, 2).Select
            ActiveSheet.Paste
            Cells(n, 1) = Prüf
        End If
    Next n
    Range("a1").Select
    End Sub
    



      


    Betrifft: AW: txt-import von: stefan
    Geschrieben am: 30.09.2003 10:22:28

    Hallo Reinhard, ich mache mich gleich mal ans ausprobieren....Vielen Dank schon mal !!!

    Gruß

    Stefan


      


    Betrifft: AW: txt-import...noch nicht ganz !! von: Stefan
    Geschrieben am: 30.09.2003 11:57:44

    Hallo Reinhard,

    ich habe dein Makro getestet. Da ich leider ein Anfänger in puncto Makro bin kann ich e snicht auf meine Anforderungen anpassen. Leider wird die angegebene Datei nicht entsprechend geöffnet und umgewandelt (es tauchen nur die Beispieldaten aus dem Makro auf).

    Vielleicht könntest du mir ja nochmal etwas unter die armew greifen.

    Vielen Dank

    Gruß

    Stefan


      


    Betrifft: AW: txt-import...noch nicht ganz !! von: Reinhard
    Geschrieben am: 30.09.2003 12:16:26

    Hallo Stefan,
    die folgenden Zeilen kannst du streichen, sie dienten nur zum Anlegen der Testdatei tesst.txt.

    Open "c:\temp\tesst.txt" For Output As #1
    Print #1, "10001 XY 555 XY 100 200 150"
    Print #1, "XY 666 XY 100 200 150"
    Print #1, "XY 777 XY 100 200 150"
    Print #1, "10002 XY 555 XY 100 200 150"
    Print #1, "XY 666 XY 100 200 150"
    Close #1


    Diese Zeile musst du umschreiben, also Pfad und Dateinamen deiner datei angeben:
    Open "c:\temp\tesst.txt" For Output As #1

    Gruß
    Reinhard







    Sub test()
    Dim Zeile As Integer
    Dim Textzeile As String
    Dim n As Integer
    Dim Prüf As Variant
    Zeile = 2
    Close
    Open "c:\temp\tesst.txt" For Output As #1
    Print #1, "10001 XY 555 XY 100 200 150"
    Print #1, "XY 666 XY 100 200 150"
    Print #1, "XY 777 XY 100 200 150"
    Print #1, "10002 XY 555 XY 100 200 150"
    Print #1, "XY 666 XY 100 200 150"
    Close #1
    Open "c:\temp\tesst.txt" For Input As #2
    Range("a1:g65536").ClearContents
    While Not EOF(2)
        Input #2, Textzeile
        Cells(Zeile, 1) = Textzeile
        Zeile = Zeile + 1
    Wend
    Close #2
    Range(Cells(2, 1), Cells(Zeile - 1, 1)).Select
        Selection.TextToColumns Destination:=Range("a2"), DataType:=xlDelimited, _
            TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=False, _
            Semicolon:=False, Comma:=False, Space:=True, Other:=False, FieldInfo _
            :=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), _
            Array(7, 1))
    For n = 2 To Zeile - 1
        If IsNumeric(Cells(n, 1)) Then
            Prüf = Cells(n, 1)
        Else
            
            Range(Cells(n, 1), Cells(n, 7)).Cut
            Cells(n, 2).Select
            ActiveSheet.Paste
            Cells(n, 1) = Prüf
        End If
    Next n
    Range("a1").Select
    End Sub
    



      


    Betrifft: AW: txt-import...noch nicht ganz !! die Zweite von: Stefan
    Geschrieben am: 30.09.2003 13:50:09

    Hallo Reinhard,

    fantastisch. Leider ist das format meiner tabelle nicht so geeignet für das makro.
    Dann habe ich leider noch eine verschiebung in meiner mail hier gehabt.
    ich versuche mich mal in dein makro einzuarbeiten....
    den vom prinzip her arbeitet es völlig korrekt, nur eben nicht so mit meiner tabelle (da kommen auch noch platzhalterzeichen etc. vor, die nicht benötigt werden.

    nochmal kurz (da ja die vorherige darstellung nicht ganzz korrekt war
    eine zeile enthält zahlreich informationen, wo die erste und dritte spalte momentan im mittelpunkt stehen.

    Wert_1 Wert_2 Wert_3...
    10001 XY 555
    XY 666
    XY 756

    10002 XY 555
    XY 666
    XY 756

    Die Werte in der Spalte 1 müssen durchgehend sein, da Ergebnis sieht dann so aus:
    10001 XY 555
    10001 XY 666
    10001 XY 756

    10002 XY 555
    10002 XY 666
    10002 XY 756

    Dennoich erstmal vielen, vielen dank...ich werde mal versuchen es irgendwie hinzubekommen !

    Gruß

    Stefan


      


    Betrifft: AW: txt-import...noch nicht ganz !! die Zweite von: Reinhard
    Geschrieben am: 30.09.2003 14:13:45

    Hi Stefan,
    dann schreib doch mal noch genauer wie das Format aussieht, wo da die Platzhalter oder sonstiges ist, am besten eine Beispieltabelle hochladen oder hier ein Muster wie
    Wert_1 Wert_2 Wert_3...
    10001 XY 555
    XY 666
    XY 756
    Und noch ein Tipp wennn du das so schreibst:
    <pre>   
    Wert_1 Wert_2 Wert_3...
    10001   XY     555
      XY    666
      XY    756
    </pre>
    
    erscheint es auch so:
    Wert_1 Wert_2 Wert_3...
    10001   XY     555
      XY    666
      XY    756
    

    Gruß
    Reinhard


      


    Betrifft: AW: txt-import...noch nicht ganz !! die Zweite von: Stefan
    Geschrieben am: 30.09.2003 17:13:01

    Hallo Reinhard,

    vielen Dank das du dir so viel Mühe gibst und Geduld mit mir hast :

    Anbei eine Darstellung des Berichtformates

    https://www.herber.de/bbs/user/1220.txt

    Im Prinzip benötigte ich die erste, dritte und letzte Spalte (Spaltengrösse ist durch die gestrichelten Linie markiert). Den Rest brauche ich nicht.
    Nur leider gibt dieser Bericht immer nur den ersten wert an (Spalte Wert_1) und listest dann in Spalte Wert_3 die entsprechenden Untergruppen auf. der nachteil besteht nun darin, dass die untergruppen gleiche nummern haben können und nur die verbindung von haupt und untergruppe (Spalte Wert_! und Wert_3) eine eindeutige Zuordnung zulassen. Folglich besteht mein Bemühen darin, eine Liste zu bekommen, die den Wert durchgehen wiedergibt.
    Kann man das verstehen ????


      


    Betrifft: AW: txt-import...noch nicht ganz !! die Zweite von: Reinhard
    Geschrieben am: 01.10.2003 18:36:34

    Hi Stefan,
    deute ich das richtig, in der einzulesenden Textdatei stehen erst
    ca. 10 Zeilen die nicht gebraucht werden??
    (123=Nummer xyz=Ziffernfolge)
    Danach folgen viele Blöcke, wobei jeder Block bzw. dessen Zeilen so aufgebaut sind:
    8 Eintragungen der Form:       123 abc 234 def ghi jkl mno  pqr
    mehrere Eintragungen der Form: 234 def ghi jkl mno  pqr
    Einen Eintrag der Form:        xyz def ghi jkl mno  pqr
    
    Nach dem Makro soll das dann so aussehen:?
    123 abc 234 def ghi jkl mno  pqr
    123 abc 234 def ghi jkl mno  pqr
    123 abc 234 def ghi jkl mno  pqr
    123 abc 234 def ghi jkl mno  pqr
    123 abc xyz def ghi jkl mno  pqr 
    
    Oder so:?
    123 234 pqr
    123 234 pqr
    123 234 pqr
    123 234 pqr
    123 xyz pqr
    

    Gruß
    Reinhard


      


    Betrifft: AW: txt-import...noch nicht ganz !! die Zweite von: stefan
    Geschrieben am: 01.10.2003 20:03:34

    Hallo Reinhard,

    fast...:-)
    Es kommen Blattbeschreibung usw. (alles ohne Nutzen für mich)mein Problem liegt darin
    x Eintragungen der Form: 123 abc 234 def ghi jkl mno pqr ....
    abc 235 def ghi jkl mno pqr ....

    die erste Spalte (hier 123) muesste einfach durchgehend angegeben werden, in dieser tabelle wird sie immer nur in der ersten zeile angegeben.
    ist irgendwie ein wenig knifflig, aber an der tabelle kann ich leider nix machen. naja, ich habe mich mal darin versucht über mnakro aufzeichnen das Problem zu lösen (funktioniert auch fast, denn leider gibt es noch alphanummerische zeichen die auch so problematisch sind...)
    Ich denke mal wir lassen es an dieser stelle. ich möchte deine zeit auch nicht überbeanspruchen. ich werde mich in der nächsten zeit ein wenig in VB einarbeiten, so kann ich dann auch mehr mitreden.

    tretzdem vielen dank und bis bald

    gruß

    stefan


      


    Betrifft: Okay, letzte Tipps von: Reinhard
    Geschrieben am: 02.10.2003 15:33:35

    Hi Stefan,
    ich würde als workaround, die Txt-Tabelle nach Excel kopieren.
    Dann in Excel, alles Markieren und über "Daten"-->"Text in Spalten"
    in Einzelzellen auflösen.
    Dann kleine Hilfsmakros erstellen, die etwa folgendes machen:
    In einem Markierten Bereich in Spalte A alle Zellen der Zeile um 2 nach rechts verschieben, dann
    den darüber stehenden Wert in A in die markierte A-spalte einfügen .
    D.h. kleine Hilfsmakros auf Commandbuttons legen, die dir erlauben schnell manuell Änderungen in der Tabelle durchzuführen auch wenn die tabelle groß sein mag.
    Gruß
    Reinhard