Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema CommandButton
BildScreenshot zu CommandButton CommandButton-Seite mit Beispielarbeitsmappe aufrufen

Aus Textdokument in Excel-Tabelle

Betrifft: Aus Textdokument in Excel-Tabelle von: Muehli
Geschrieben am: 23.10.2014 11:08:30

Guten Morgen,

ich habe folgendes Anliegen:

Ein Textdokument hat folgende Formatierung:

:A: 0001
:B: "Text1"
:C: "Text2"
:D: Text3

:A: 0002
:B: "Text4"
:C: "Text5"
:D: Text6

:A: 0003
:B: "Text7"
:C: "Text8"
:D: Text9

usw.

Ich möchte das Textdokument in eine Excel-Tabelle integrieren.
In der Excel-Tabelle sollte es folgendermaßen aussehen:

|Spalte A|Spalte B|Spalte C|Spalte D|
| 0001 | Text1 | Text2 | Text3 |
| 0002 | Text4 | Text5 | Text6 |
| 0003 | Text7 | Text8 | Text9 |

Das Ganze sollte per Button ausführbar sein.
Es fallen somit die "-Zeichen weg und die Auflistung :A: :B: etc.

Hat jemand eine Ahnung, wie man das mit VBA lösen kann?

Freundliche Grüße
Muehli

  

Betrifft: AW: Aus Textdokument in Excel-Tabelle von: MCO
Geschrieben am: 23.10.2014 11:31:12

Hallo!
Du hast nicht benannt, wo deine Datei liegt, daher hab ich mal einen Pfad angenommen, den du natürlich ändern mußt.

Probier das mal:

Sub einlesen()

Dim spalte As String, strZeile As String

Open "C:\temp\sss.txt" For Input As #1
Cells.Clear

Do While Not EOF(1)
    
    Line Input #1, strZeile
    spalte = Replace(Left(strZeile, 3), ":", "")
    strZeile = Replace(strZeile, """", "")
    
    If spalte = "A" Then lz = Cells(Rows.Count, "a").End(xlUp).Row + 1
    If spalte <> "" Then Cells(lz, spalte) = Trim(Mid(strZeile, 4, 99))
Loop

Close #1
End Sub
Gruß, MCO


  

Betrifft: AW: Aus Textdokument in Excel-Tabelle von: Muehli
Geschrieben am: 23.10.2014 11:48:35

Danke für deine schnelle Antwort!

Er bringt nun den Fehler (ab "Then [...]") mit der Meldung: "Anwendungs- oder objektdefinierter Fehler":

If spalte <> "" Then Cells(lz, spalte) = Trim(Mid(strZeile, 4, 99))

Gruß
Muehli


  

Betrifft: AW: Aus Textdokument in Excel-Tabelle von: MCO
Geschrieben am: 23.10.2014 12:09:03

Hallo!
Bei mir läuft alles...

Wenn du auf die Variablen gehst (beim debuggen), siehst du, welcher Wert dahintersteckt. Sind die alle in Ordnung?
Oder ist z.b. Spalte weder leer ("") noch ein Buchstabe?

Dann sind die Daten in deiner Ausgangsdatei nicht so homogen, wie du beschrieben hast u. die Behandlung des Textes muß daran angepasst werden...

Gruß, MCO


  

Betrifft: AW: Aus Textdokument in Excel-Tabelle von: Muehli
Geschrieben am: 23.10.2014 13:20:19

Also wenn ich das Textdokument auf auf :A:,:B:,:C:,:D: abgeändert habe funktioniert es fast wie gewünscht. War also von mir zu allgemein gefragt. Mein Fehler sry^^.

Jedoch müsste ich dann etwa 10000 Einträge ausbessern.

Die genaue Bezeichnung lautet daher wie folgt:


:N: 0001
:T: "Text1"
:I: "Text2"
:A: Text3

:N: 0002
:T: "Text4"
:I: "Text5"
:A: Text6

:N: 0003
:T: "Text7"
:I: "Text8"
:A: Text9

Soll werden:

|Spalte A|Spalte B|Spalte C|Spalte D|
| 0001 | Text1 | Text2 | Text3 |
| 0002 | Text4 | Text5 | Text6 |
| 0003 | Text7 | Text8 | Text9 |

Die "-Zeichen sind nicht dabei, soweit passt das.

Allerdings schreibt er den Text nicht so:

| 0001 | Text1 | Text2 | Text3 |

Sondern so:

|:N: 0001 | :T: Text1 |:I: Text2 |:A: Text3 |

Die Texte müssen auch nicht zwangsläufig in dieser Reihenfolge in die Spalten der Exceltabelle eingefügt werden. Es können auch Spalten dazwischen frei sein. Ich würde das ganze dann in der Exceltabelle per Makro so sortieren, wie ich es brauche.

Bsp.

|Spalte A|Spalte C|Spalte H|Spalte Z|
| 0001 | Text2 | Text1 | Text3 |
| 0002 | Text5 | Text6 | Text4 |
| 0003 | Text7 | Text8 | Text9 |

Es muss lediglich eine Gruppe (:N:,:T:,:I:,:A:) in einer Zeile sein.

Hoffe man kann das verstehen. =)

Danke für deine/eure Geduld.

Gruß
Muehli


  

Betrifft: AW: Aus Textdokument in Excel-Tabelle von: Muehli
Geschrieben am: 23.10.2014 13:26:03

Änderung zum Beispiel:

Bsp.

|Spalte A|Spalte C|Spalte H|Spalte Z|
| 0001 | Text2 | Text1 | Text3 |
| 0002 | Text5 | Text4 | Text6 |
| 0003 | Text8 | Text7 | Text9 |

Es muss immer der Text aus :N: unter :N: und :A: unter :A: usw.


  

Betrifft: AW: Aus Textdokument in Excel-Tabelle von: MCO
Geschrieben am: 24.10.2014 06:37:57

Guten Morgen!

Wie ist es damit?
Die Zahl am Anfang jeden Datensatzes wird automatisch umformatiert. Kann das so bleiben?

Gruß, MCO

Sub einlesen()

Dim spalte As Single, strZeile As String

Open "C:\temp\sss.txt" For Input As #1
Cells.Clear
spalte = 1
lz = Cells(Rows.Count, "a").End(xlUp).Row + 1

Do While Not EOF(1)
    Line Input #1, strZeile
    If strZeile <> "" Then 'nur schreiben, wenn ungleich leer
        strZeile = Replace(strZeile, """", "")
        Cells(lz, spalte) = Trim(Mid(strZeile, 4, 99))
        If spalte = 4 Then
            lz = Cells(Rows.Count, "a").End(xlUp).Row + 1
            spalte = 1
        Else
            spalte = spalte + 1
        End If
    End If
Loop

Close #1
End Sub



  

Betrifft: AW: Aus Textdokument in Excel-Tabelle von: Muehli
Geschrieben am: 24.10.2014 07:27:03

Guten Morgen MCO,

ich bin das Ganze jetzt so angegangen (Deine erste Variante minimal geändert):

Private Sub CommandButton1_Click()
Dim spalte As String, strZeile As String

Open Range("O1").Value For Input As #1
Cells.Clear

Do While Not EOF(1)
    
    Line Input #1, strZeile
    spalte = Replace(Left(strZeile, 3), ":", "")
    strZeile = Replace(strZeile, """", "")
    
    If spalte = "N" Then lz = Cells(Rows.Count, "n").End(xlUp).Row + 1
    
    If spalte <> "" Then Cells(lz, spalte) = Trim(Mid(strZeile, 1, 99))
    
Loop

'Sortieren

inhalt = Range("T" & i + 2).Value
start = InStr(1, inhalt, " ")
Range("C" & i + 2).Value = Right(inhalt, Len(inhalt) - start)

inhalt = Range("A" & i + 2).Value
start = InStr(1, inhalt, " ")
Range("D" & i + 2).Value = Right(inhalt, Len(inhalt) - start)

inhalt = Range("N" & i + 2).Value
start = InStr(1, inhalt, " ")
Range("A" & i + 2).Value = Right(inhalt, Len(inhalt) - start)

inhalt = Range("I" & i + 2).Value
start = InStr(1, inhalt, " ")
Range("N" & i + 2).Value = Right(inhalt, Len(inhalt) - start)

End Sub

Es funktioniert so, wie gewünscht =)

Vielen Dank für deine Bemühungen!!

Freundliche Grüße
Muehli


  

Betrifft: AW: Aus Textdokument in Excel-Tabelle von: Muehli
Geschrieben am: 24.10.2014 07:30:28

Habe etwas vergessen mit einzufügen:

Private Sub CommandButton1_Click()
Dim spalte As String, strZeile As String

Open Range("O1").Value For Input As #1
Cells.Clear

Do While Not EOF(1)
    
    Line Input #1, strZeile
    spalte = Replace(Left(strZeile, 3), ":", "")
    strZeile = Replace(strZeile, """", "")
    
    If spalte = "N" Then lz = Cells(Rows.Count, "n").End(xlUp).Row + 1
    
    If spalte <> "" Then Cells(lz, spalte) = Trim(Mid(strZeile, 1, 99))
    
Loop

'Sortieren

Dim inhalt
Dim start As Integer
Dim i As Long

For i = 0 To 9999

inhalt = Range("T" & i + 2).Value
start = InStr(1, inhalt, " ")
Range("C" & i + 2).Value = Right(inhalt, Len(inhalt) - start)

inhalt = Range("A" & i + 2).Value
start = InStr(1, inhalt, " ")
Range("D" & i + 2).Value = Right(inhalt, Len(inhalt) - start)

inhalt = Range("N" & i + 2).Value
start = InStr(1, inhalt, " ")
Range("A" & i + 2).Value = Right(inhalt, Len(inhalt) - start)

inhalt = Range("I" & i + 2).Value
start = InStr(1, inhalt, " ")
Range("N" & i + 2).Value = Right(inhalt, Len(inhalt) - start)

End Sub



 

Beiträge aus den Excel-Beispielen zum Thema "Aus Textdokument in Excel-Tabelle"