Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

txt Dateien mit fester Breite je Spalte export.

Forumthread: txt Dateien mit fester Breite je Spalte export.

txt Dateien mit fester Breite je Spalte export.
15.08.2003 15:29:19
Daniel Bingenheimer
Hallo,
vielleicht kann mir hier ja jemand helfen, denn ich habe in den letzten Tagen, in den ich mit vba rumspiele schon eine Menge Hilfen hier gefunden.
Ich habe eine Excel-Tablle mit mehreren Spalten. Alle Spalten sind als Text formatiert. Jetzt möchte ich diese Excel-Tabelle als txt-Datei exportieren, möchte aber die Daten in eine festzulegende Spaltenbreite schreiben.
Beispiel :
A(6) B(8) C(1) D(3)
1 230603 0009 AB
==> Die txt-Datei sollte dann wie folgt aussehen :
2306030009 AB
Die in Klammern stehende Zahl soll jeweils die Länge der Zelle bestimmen, wenn keine Daten in der Zelle stehen, soll die Zelle mit der entsprechenden Anzahl Leerzeichen aufgefüllt werden.
Das Ergebnis soll also keine Trennzeichen oder Leerzeichen als Trennzeichen enthalten, sondern fortlaufend die Spalten in der entsprechenden Zeichenlänge hintereinander wegschreiben.
Ist so etwas mit vba unter Excel möglich ?
Bisher bin ich immer den umständlichen Weg gegangen, die Daten im csv-Format zu speichern, die Datei ins Access zu importieren und dann aus dem Access in eine txt-Datei zu exportieren mit fester Spaltenbreite.
Für Vorschläge und Ideen danke ich schon mal im voraus.
Mit freundlichen Grüßen
Daniel Bingenheimer
MCP Win2K
Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: txt Dateien mit fester Breite je Spalte export.
15.08.2003 16:37:19
ChrisL
Hi Daniel
Kannst du dein Beispiel nochmals genauer erläutern...
A(6) - 230603 OK
B(8) - 0009 soll daraus 00000009 werden? Oder _ _ _ _0009?
C(1) - ?
D(3) - AB ?
Etwa so stelle ich mir die Umsetzung vor...
Option Explicit

Sub speichern()
Dim fName As Variant, iZeile As Long
On Error GoTo ErrorHandler
fName = Workbooks.Application.GetSaveAsFilename("TestfName.txt", "Text (*.txt), *.txt")
If fName = False Then Exit Sub
Application.ScreenUpdating = False
Workbooks.Add
With ThisWorkbook
For iZeile = 1 To .Range("A65536").End(xlUp).Row
' hier fehlt noch was
Next iZeile
End With
ActiveWorkbook.SaveAs FileName:=fName, FileFormat:=xlText, CreateBackup:=False
ActiveWorkbook.Close
ErrorHandler:
Application.ScreenUpdating = True
End Sub

Gruss
Chris

Anzeige
AW: txt Dateien mit fester Breite je Spalte export.
15.08.2003 21:55:00
Daniel Bingenheimer
Hallo,
aus der Spalte B sollte also 0009_ _ _ _ werden, wenn diese 8-stellig ist. Es könnte zum Beispiel sich um ein Feld Hausnummer handeln, welches vierstellig ist, wenn ich dort eine 12 reinschreibe, sollte in der Textdatei dann die 12 gefolgt von zwei _ _ Leerzeichen erscheinen.
Vielen Dank schon mal für den Ansatz.
Gruß
Daniel B

Anzeige
AW: txt Dateien mit fester Breite je Spalte export.
16.08.2003 11:16:23
Jürgen
Hallo Daniel,
nur mal so als Ansatz:
Wenn bekannt ist, dass die Hausnummer immer nur zweistellig ist und das Feld 8 Stellen hat, dann wie folgt (Hausnummer steht in Zelle C2):
strHausnummer = CStr(ActiveSheet.Range("C2")) 'Umwandlung in String
strHausnummer = strHausnummer & String(6, " ") '6 Leerzeichen anhängen
Kann die Hausnummer einstellig oder mehrstellig sein, dann vielleicht eher über eine Schleife gehen:
strHausnummer = CStr(ActiveSheet.Range("C2"))
Do While Len(strHausnummer) < 8
strHausnummer = strHausnummer & " "
Loop
Den String strHausnummer würde ich dann an die Variable strDatensatz anhängen, der sich z.B. schon aus dem Namen, Vornamen, Wohnort u.a. gebildet hat.
strDatensatz = strDatensatz & strHausnummer
Die weiteren Daten mit ihrer Feldlänge würde ich dann ebenfalls anhängen.
Zum Schluß in eine Datei schreiben:
DateiNr = FreeFile 'Variable vorher als Integer deklarieren
Open strDateiname For Output As #DateiNr Len = 512 'Datensatzlänge hier 512 Stellen
Print #DateiNr, strDatensatz
Close
Ist alles ungetestet, aber ungefähr so müßte es gehen.
Gruß
Jürgen

Anzeige
AW: txt Dateien mit fester Breite je Spalte export.
18.08.2003 11:34:58
ChrisL
Hi Daniel
Verstehe zwar immer noch nicht, welche Spalte wieviele Stellen haben soll, aber etwa so...
Option Explicit

Sub speichern()
Dim fName As Variant, iZeile As Long, Inhalt(2) As Variant
On Error GoTo ErrorHandler
fName = Workbooks.Application.GetSaveAsFilename("TestfName.txt", "Text (*.txt), *.txt")
If fName = False Then Exit Sub
Application.ScreenUpdating = False
Workbooks.Add
With ThisWorkbook.Worksheets(1)
For iZeile = 1 To .Range("A65536").End(xlUp).Row
Inhalt(0) = CStr(.Cells(iZeile, 1))
Do While Len(Inhalt(0)) < 6
Inhalt(0) = Inhalt(0) & " "
Loop
Inhalt(1) = CStr(.Cells(iZeile, 2))
Do While Len(Inhalt(1)) < 8
Inhalt(1) = Inhalt(1) & " "
Loop
Inhalt(2) = CStr(.Cells(iZeile, 3))
Do While Len(Inhalt(2)) < 4
Inhalt(2) = Inhalt(2) & " "
Loop
ActiveWorkbook.Worksheets(1).Cells(iZeile, 1) = Inhalt(0) & Inhalt(1) & Inhalt(2)
Next iZeile
End With
ActiveWorkbook.SaveAs FileName:=fName, FileFormat:=xlText, CreateBackup:=False
ActiveWorkbook.Close
ErrorHandler:
Application.ScreenUpdating = True
End Sub

Gruss
Chris

Anzeige
AW: txt Dateien mit fester Breite je Spalte export.
19.08.2003 09:17:36
Andy B.
Hallo Daniel!
So gehts auch! Ist zwar noch etwas verbesserungswürdig und umständlich, aber getestet und lauffähig!

Sub Textdatei_erstellen()
Dim strBasis As String
Dim strDaten As String
Dim intAnzahl As Integer
Dim i As Integer
Dim j As Integer
Dim fso As Object
Dim txt As Object
Dim c As Range
Range("A1:A" & Cells(Rows.Count, 1).End(xlUp).Row).Select
intAnzahl = Selection.Cells.Count - 1
Sheets.Add
Worksheets(1).Activate
For i = 1 To intAnzahl Step 1
j = i - 1
Range("A1").Select
ActiveCell.Offset(j, 0).Select
ActiveCell.FormulaR1C1 = "=CONCATENATE('VQ-VKUNNR'!R[1]C,""  "")"
ActiveCell.Select
Selection.Copy
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
ActiveSheet.Paste
Application.CutCopyMode = False
strBasis = ActiveCell.Value
strDaten = Left(strBasis, 2)
ActiveCell.Value = strDaten
Next i
Range("A1").Select
Set fso = CreateObject("scripting.filesystemobject")
Set txt = fso.createtextfile("s:\msoffice\excel\test\test.txt", True)
For Each c In Range("A:A")
If c.Value <> "" Then
txt.writeline c & c.Offset(0, 1).Value & c.Offset(0, 2).Value & _
c.Offset(0, 3).Value & c.Offset(0, 4).Value & c.Offset(0, 5).Value & _
c.Offset(0, 6).Value & c.Offset(0, 7).Value & c.Offset(0, 8).Value & _
c.Offset(0, 9).Value & c.Offset(0, 10).Value & c.Offset(0, 11).Value & _
c.Offset(0, 12).Value & c.Offset(0, 13).Value & c.Offset(0, 14).Value & _
c.Offset(0, 15).Value & c.Offset(0, 16).Value & c.Offset(0, 17).Value & _
c.Offset(0, 18).Value & c.Offset(0, 19).Value
Else
Exit Sub
End If
Next c
Set fso = Nothing
Set txt = Nothing
End Sub

Den Passus mit der Formel müßte man für jede Spalte anpassen. Wenn Du willst, schicke ich Dir die fertige Datei gern per Mail.
Viel Spaß noch und Haltung annehmen.
Gruß
Andy aus DD

Anzeige
;
Anzeige

Infobox / Tutorial

txt-Dateien mit fester Breite je Spalte exportieren in Excel


Schritt-für-Schritt-Anleitung

Um eine Excel-Tabelle als txt-Datei mit fester Breite je Spalte zu exportieren, kannst du den folgenden VBA-Code verwenden. Dieser Code stellt sicher, dass die Daten in der gewünschten Spaltenbreite formatiert werden:

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Klicke auf Einfügen und dann auf Modul, um ein neues Modul zu erstellen.
  3. Füge den folgenden Code in das Modul ein:
Sub speichern()
    Dim fName As Variant, iZeile As Long, Inhalt(2) As Variant
    On Error GoTo ErrorHandler
    fName = Application.GetSaveAsFilename("TestfName.txt", "Text (*.txt), *.txt")
    If fName = False Then Exit Sub
    Application.ScreenUpdating = False
    Workbooks.Add
    With ThisWorkbook.Worksheets(1)
        For iZeile = 1 To .Range("A65536").End(xlUp).Row
            Inhalt(0) = CStr(.Cells(iZeile, 1))
            Do While Len(Inhalt(0)) < 6
                Inhalt(0) = Inhalt(0) & " "
            Loop
            Inhalt(1) = CStr(.Cells(iZeile, 2))
            Do While Len(Inhalt(1)) < 8
                Inhalt(1) = Inhalt(1) & " "
            Loop
            Inhalt(2) = CStr(.Cells(iZeile, 3))
            Do While Len(Inhalt(2)) < 4
                Inhalt(2) = Inhalt(2) & " "
            Loop
            ActiveWorkbook.Worksheets(1).Cells(iZeile, 1) = Inhalt(0) & Inhalt(1) & Inhalt(2)
        Next iZeile
    End With
    ActiveWorkbook.SaveAs FileName:=fName, FileFormat:=xlText, CreateBackup:=False
    ActiveWorkbook.Close
ErrorHandler:
    Application.ScreenUpdating = True
End Sub
  1. Passe die Werte in den Do While-Schleifen an, um die gewünschte Spaltenbreite zu definieren.
  2. Schließe den VBA-Editor und führe das Makro aus.

Häufige Fehler und Lösungen

Fehler 1: Die txt-Datei wird nicht korrekt formatiert.

Lösung: Überprüfe die Längen der Spalten in der Do While-Schleife. Achte darauf, dass die Werte den gewünschten Längen entsprechen.

Fehler 2: Die Datei wird nicht erstellt oder gespeichert.

Lösung: Stelle sicher, dass du das richtige Verzeichnis und Dateiformat im GetSaveAsFilename-Dialog ausgewählt hast.


Alternative Methoden

Neben der Verwendung von VBA kannst du auch manuell Daten in eine txt-Datei exportieren:

  1. Wähle die Daten in Excel aus.
  2. Kopiere die Daten (STRG + C).
  3. Öffne einen Texteditor (z.B. Notepad).
  4. Füge die Daten ein (STRG + V).
  5. Speichere die Datei und achte darauf, die Dateiendung als .txt zu verwenden.

Diese Methode ist jedoch weniger flexibel, wenn es um die Formatierung der Spaltenbreite geht.


Praktische Beispiele

Angenommen, du hast folgende Excel-Daten:

A B C
230603 0009 AB
123456 7890 CD

Beim Export mit dem obigen VBA-Skript wird die txt-Datei wie folgt aussehen:

2306030009   AB
1234567890   CD

Die Leerzeichen werden automatisch hinzugefügt, um die festgelegte Breite einzuhalten.


Tipps für Profis

  • Überlege dir, die Spaltenbreiten dynamisch zu gestalten, indem du die Breite aus einer benutzerdefinierten Tabelle liest.
  • Teste dein Skript immer zuerst mit einer Kopie deiner Daten, um unerwartete Ergebnisse zu vermeiden.
  • Nutze die Debug.Print-Anweisung, um den Wert von Variablen während der Ausführung des Codes zu überprüfen.

FAQ: Häufige Fragen

1. Wie kann ich die Spaltenbreite anpassen? Du kannst die Werte in den Do While-Schleifen im VBA-Code ändern, um die Spaltenbreite anzupassen.

2. Ist dieser Prozess in allen Excel-Versionen verfügbar? Ja, das VBA-Skript funktioniert in den meisten modernen Excel-Versionen, einschließlich Excel 2010, 2013, 2016 und 2019.

3. Was ist der Unterschied zwischen txt- und csv-Dateien? Eine txt-Datei kann beliebige Datenformate enthalten, während csv-Dateien speziell für die Speicherung von tabellarischen Daten mit durch Kommas getrennten Werten optimiert sind.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige