Anzeige
Archiv - Navigation
992to996
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
992to996
992to996
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Wie kann ich nur bestimmte Spalten exportieren?

Wie kann ich nur bestimmte Spalten exportieren?
21.07.2008 12:59:00
Volker
Mittels des folgenden Makros

Sub SaveCSVUnicode()
' Speichert den Inhalt eines Arbeitsblatts als CSV-Datei in Unicode-Codierung
' mit wählbarem Trennzeichen und Maskierung von Einträgen
Dim Bereich As Object, Zeile As Object, Zelle As Object
Dim strTemp As String
Dim strDateiname As String
Dim strTrennzeichen As String
Dim strMappenpfad As String
Dim objFSO, objTextStream
strMappenpfad = ActiveWorkbook.FullName
strMappenpfad = Replace(strMappenpfad, ".xls", ".csv")
strDateiname = InputBox("Wie soll die CSV-Datei heißen (inkl. Pfad)?", "CSV-Export",  _
strMappenpfad)
If strDateiname = "" Then Exit Sub
strTrennzeichen = InputBox("Welches Trennzeichen soll verwendet werden?", "CSV-Export", ",")
If strTrennzeichen = "" Then Exit Sub
Set Bereich = ActiveSheet.UsedRange
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objTextStream = objFSO.OpenTextFile(strDateiname, 2, True, -1)
For Each Zeile In Bereich.Rows
' Cells(2) entspricht der Spalte B, wenn die Spalte A die erste Spalte ist
If Zeile.Cells(2).Value = "e" Then
For Each Zelle In Zeile.Cells
If InStr(1, Zelle.Text, strTrennzeichen) > 0 Then
'Zellen, die ein Trennzeichen beinhalten in Anführungsstriche setzen
strTemp = strTemp & """" & CStr(Zelle.Value) & """" & strTrennzeichen
Else
strTemp = strTemp & CStr(Zelle.Value) & strTrennzeichen
End If
Next
If Right(strTemp, 1) = strTrennzeichen Then strTemp = Left(strTemp, Len(strTemp) - 1) &  _
Chr(10)
objTextStream.Write strTemp
strTemp = ""
End If
Next
objTextStream.Close
Set Bereich = Nothing
MsgBox "Datei wurde exportiert nach" & vbCrLf & strDateiname
End Sub


exportiere ich eine Excel- in eine TXT-Datei im Unicode-Format.
Das Problem: Die Excel-Datei hat zig unnütze Spalten, die meine TXT auf mehrere MB aufblähen - weswegen ich gerne nur die Spalten C bis AI exportieren würde.
Als VBA-Laie mit nur äußerst rudimentären Kenntnissen würde mir dazu jetzt einfallen, an Stelle des


For Each Zelle In Zeile.Cells


irgendwas in der Richtung


For Each Zelle In Zeile.Cells Aber Nur Wenn Spaltennummer von Cells zwischen 3 und 35 ist


versuchen einzubauen :-)
Gibt es denn da eine Möglichkeit, so eine Einschränkung mit einzubauen? Oder muss ich das irgendwie über so eine Range lösen?
Kurzum: Wie kann ich das machen?

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Wie kann ich nur bestimmte Spalten exportieren?
21.07.2008 14:36:38
Kawensmann
Hallo,
versuch es einfach so:
Anstatt:

Set Bereich = ActiveSheet.UsedRange


Schreibe:


Set Bereich = Intersect(ActiveSheet.UsedRange, ActiveSheet.Range("C:Ai"))


Gruß
Kawensmann

AW: Wie kann ich nur bestimmte Spalten exportieren?
21.07.2008 15:12:04
Volker
Scheint nicht ganz zu funktionieren: Die CSV-Datei ist anschließend komplett leer ...

AW: Wie kann ich nur bestimmte Spalten exportieren?
21.07.2008 17:18:56
Volker
OK ... ich weiß jetzt, woran's hing: Wenn man die Spalte B nach dem Vorhandensein eines e abfragen will, sollte man den Bereich natürlich nicht erst bei C anfangen lassen ;)
Das Makro sieht also jetzt so aus:

Sub SaveCSVUnicode()
Dim Bereich As Object, zeile As Object, Zelle As Object
Dim strTemp As String
Dim strDateiname As String
Dim strTrennzeichen As String
Dim strMappenpfad As String
Dim objFSO, objTextStream
strMappenpfad = ActiveWorkbook.FullName
strMappenpfad = Replace(strMappenpfad, ".xls", ".csv")
strDateiname = InputBox("Wie soll die CSV-Datei heißen (inkl. Pfad)?", "CSV-Export",  _
strMappenpfad)
If strDateiname = "" Then Exit Sub
strTrennzeichen = InputBox("Welches Trennzeichen soll verwendet werden?", "CSV-Export", ",")
If strTrennzeichen = "" Then Exit Sub
Set Bereich = Intersect(ActiveSheet.UsedRange, ActiveSheet.Range("B:AI"))
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objTextStream = objFSO.OpenTextFile(strDateiname, 2, True, -1)
For Each zeile In Bereich.Rows
' Cells(1) entspricht der Spalte B, wenn die Spalte B die erste Spalte ist
If zeile.Cells(1).Value = "e" Then
For Each Zelle In zeile.Cells
If InStr(1, Zelle.Text, strTrennzeichen) > 0 Then
'Zellen, die ein Trennzeichen beinhalten in Anführungsstriche setzen
strTemp = strTemp & """" & CStr(Zelle.Value) & """" & strTrennzeichen
Else
strTemp = strTemp & CStr(Zelle.Value) & strTrennzeichen
End If
Next
If Right(strTemp, 1) = strTrennzeichen Then strTemp = Left(strTemp, Len(strTemp) - 1) &  _
Chr(10)
objTextStream.Write strTemp
strTemp = ""
End If
Next
objTextStream.Close
Set Bereich = Nothing
MsgBox "Datei wurde exportiert nach" & vbCrLf & strDateiname
End Sub


Sollte jetzt funktionieren ... :)

Anzeige
Eine Frage dazu hätte ich noch ...
21.07.2008 18:17:50
Volker
Wie muss ich

Set Bereich = Intersect(ActiveSheet.UsedRange, ActiveSheet.Range("B:Ai"))


umschreiben, damit ich nicht alle, sondern nur eine Auswahl an bestimmten Spalten auswählen kann? Also z.B. nur B, E bis K und P bis Ai zusammen ...

AW: Wie kann ich nur bestimmte Spalten exportieren?
21.07.2008 14:53:08
Worti
Hallo Volker,
hier mal ein Code, der das macht:
'***********************************************************************************************
'  Autor: Worti                                                                                *
'  Datum 23.05.2007                                                                            *
'  Aufgabe: Exportiere vorgegebenen Bereich als CSV-Datei mit vorgebbarem Trennzeichen         *
'***********************************************************************************************
Sub Exportiere_Bereich_in_CSV()
    Dim bisZeile As Long, zeile As Long
    Dim bisSpalte As Integer, Spalte As Integer
    Dim Trennzeichen As String, ExportBereich As String, Ausgabe As String
    Dim NewFileName
    Close #1
    NewFileName = Application.GetSaveAsFilename(fileFilter:="CSV Files (*.csv), *.csv")
    If NewFileName <> False Then
       Open NewFileName For Output As #1
       ' Hier Trennzeichen eingeben
       Trennzeichen = InputBox("Bitte geben Sie das gewünschte Trennzeichen ein: ", "Trennzeichen", ";")
       If Trennzeichen = "" Then
          'Standard-Trennzeichen Semikolon
          Trennzeichen = ";"
       End If
       'Zu exportierender Bereich
       ExportBereich = InputBox("Bitte den zu exportierenden bereich eingeben: ", "Bereich", ActiveSheet.UsedRange.Address(FalseFalse))
       If ExportBereich = "" Then
          'Wenn leer, dann benutzten Bereich exportieren
          ExportBereich = ActiveSheet.UsedRange.Address
       End If
       bisZeile = ActiveSheet.Range(ExportBereich).Rows.Count + ActiveSheet.Range(ExportBereich).Row - 1
       bisSpalte = ActiveSheet.Range(ExportBereich).Columns.Count + ActiveSheet.Range(ExportBereich).Column - 1
       For zeile = ActiveSheet.Range(ExportBereich).Row To bisZeile
           Ausgabe = ""
           For Spalte = ActiveSheet.Range(ExportBereich).Column To bisSpalte
               Ausgabe = Ausgabe & ActiveSheet.Cells(zeile, Spalte).Value
               If Spalte <> bisSpalte Then
                   Ausgabe = Ausgabe & Trennzeichen
               End If
           Next Spalte
           Print #1, Ausgabe
       Next zeile
       Close #1
    End If
End Sub
Gruß
Worti

Anzeige
AW: Wie kann ich nur bestimmte Spalten exportieren?
21.07.2008 15:33:59
Volker
Hallo,
Habe das mal getestet.
Problem ist zunächst: Ich brauche die exportierte Datei im Unicode-Format! Ich habe deshalb in einem anderen Thread vor einigen Tagen den Tip mit dem objFSO.OpenTextFile bekommen. Habe das Ganze mal entsprechend angepasst:

Sub TXT_Export_im_Unicode_Format()
Dim bisZeile As Long, zeile As Long
Dim bisSpalte As Integer, Spalte As Integer
Dim Trennzeichen As String, ExportBereich As String, Ausgabe As String
Dim objFSO, objTextStream
Dim NewFileName
Close #1
NewFileName = Application.GetSaveAsFilename(fileFilter:="TXT Files (*.txt), *.txt")
If NewFileName  False Then
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objTextStream = objFSO.OpenTextFile(NewFileName, 2, True, -1)
' Hier Trennzeichen eingeben
Trennzeichen = InputBox("Bitte geben Sie das gewünschte Trennzeichen ein: ", " _
Trennzeichen", ";")
If Trennzeichen = "" Then
'Standard-Trennzeichen Semikolon
Trennzeichen = ";"
End If
'Zu exportierender Bereich
ExportBereich = InputBox("Bitte den zu exportierenden bereich eingeben: ", "Bereich",  _
ActiveSheet.UsedRange.Address(False, False))
If ExportBereich = "" Then
'Wenn leer, dann benutzten Bereich exportieren
ExportBereich = ActiveSheet.UsedRange.Address
End If
bisZeile = ActiveSheet.Range(ExportBereich).Rows.Count + ActiveSheet.Range(ExportBereich) _
.Row - 1
bisSpalte = ActiveSheet.Range(ExportBereich).Columns.Count + ActiveSheet.Range( _
ExportBereich).Column - 1
For zeile = ActiveSheet.Range(ExportBereich).Row To bisZeile
Ausgabe = ""
For Spalte = ActiveSheet.Range(ExportBereich).Column To bisSpalte
Ausgabe = Ausgabe & ActiveSheet.Cells(zeile, Spalte).Value
If Spalte  bisSpalte Then
Ausgabe = Ausgabe & Trennzeichen
End If
Next Spalte
objTextStream.Write Ausgabe
Next zeile
objTextStream.Close
End If
End Sub


Der Export an sich funktioniert ... nur wird eben alles exportiert - und eben nicht nur der bestimmte Bereich. Außerdem klatscht es mir alles in eine Zeile ... irgendwo muss da noch ein Chr(10) rein ...
Was müsste ich also hier noch anpassen?

Anzeige
AW: Wie kann ich nur bestimmte Spalten exportieren?
21.07.2008 15:43:00
Worti
Hallo Walter,
vielleicht hinter dem Befehl Next Spalte noch die Codezeile:
Ausgabe = Ausgabe & chr(10)
Versuch mal, hab es nicht getestet
Gruß Worti

AW: Wie kann ich nur bestimmte Spalten exportieren?
21.07.2008 16:01:01
Volker
Nix Walter ... Walter sitzt nebenan ;)
OK, im Ernst: Das mit dem Chr(10) klappt.
Nur das mit dem Speichern eben noch nicht ganz: Er speichert jetzt immer noch alles - auch wenn ich nen bestimmten Bereich eingebe. Liegt das an der OpenTextFile-Methode? Wobei ich halt wie gesagt im Unicode-Format speichern muss ...
Außerdem: In meinem anderen Makro konnte ich mit

If zeile.Cells(2).Value = "e" Then


Spalte B abfragen - und nur die Zeilen exportieren, die dort ein e haben. Wie könnte ich das hier einbauen?

Anzeige

315 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige