Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1352to1356
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
Inhaltsverzeichnis

bestimmte Spalten als CSV schreiben

bestimmte Spalten als CSV schreiben
12.03.2014 10:10:59
Reinhard
Hallo werte Profi-User,
folgendes Problem habe ich. Ich habe in Excel Stücklisten erarbeitet. Daten hieraus sollen jetzt per als CSV geschrieben werden. Da sie von einem anderen Programm verarbeitet werden sollen.
Die Datei umfasst ca 10 Spalten, wovon jedoch nur Spalte A, C und D geschrieben werden sollen. Zusätzlich soll jedoch erst in Zeile 7 begonnen werden und erkannt werden wann die letzte gefüllte Zelle erreicht ist. Sprich der selektierte Range umfasst A7:Ax, C7:Dx wobei x bei allen Spalten die gleiche Zahl sein wird.
Ich hab schon einiges probiert, doch komme ich nicht darüber hinaus das immer das ganze Blatt als CSV geschrieben wird. Ich sehe zwar wenn ich einen Range vorgebe das dieser markiert wird, das war es aber auch schon.
Bin dankbar für jeden Ansatz und jede Hilfe
Reinhard

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: bestimmte Spalten als CSV schreiben
12.03.2014 10:41:03
Martin
Hallo Reinhard,
das ist überhaupt kein Problem. Sollen die Spalten A, C und D gleich in die ersten drei Spalten der CSV-Datei geschrieben werden? Also so:
SpalteA;SpalteC;SpalteD;;;;;;;;
Viele Grüße
Martin

AW: bestimmte Spalten als CSV schreiben
12.03.2014 10:53:54
Reinhard
Hallo Martin,
Ja, so in etwa.
Es sollen nur ausschließlich diese Spalten auch berücksichtigt werden. Sprich alle anderen Spalten sollen aussen vor bleiben.
Die Datei sieht in etwa so aus
Spalte A Spalte B Spalte C Spalte D
Zeile1
Zeile2
....
Zeile6 ArtNr Benennung Menge Material
Zeile7 111111 Träger 1 20 1
Zeile8 222222 Träger 2 35 1
Zeile9 333333 Winkel 1 150 1
....
Zeilex 998899 Schraube 300 0
Zeile 1 bis 6 haben nur beschreibenden Character und sind für den CSV Export unrelevant.
Erst ab Zeile 7 sollen die Daten in eine CSV geschrieben werden und dann nur Spalte A , C, D
CSV Datei muss dann so ausschauen
111111;20;1
222222;35;1
333333;150;1
.......
998899;300;0
Den Bezug zur ArtNr. holt sich das nachfolgende Programm dann durch eine CSV Import Funktion.
Es soll natürlich auch erkannt werden wo der letzte Eintrag ist, damit nicht auch noch leere Zeilen übertragen werden.
Vielen Dank
Reinhard

Anzeige
AW: bestimmte Spalten als CSV schreiben
12.03.2014 11:00:12
Martin
Hallo Reinhard,
ich hoffe, dass du es so meintest:
Sub CSV_Export()
Dim varFilePath As Variant
Dim i As Long, strRow As String
varFilePath = Application.GetSaveAsFilename("CSV-Export.csv", FileFilter:="CSV-Dateien (*. _
csv), *.csv)", Title:="CSV-Export")
If varFilePath = "Falsch" Then Exit Sub
Open varFilePath For Output As #1
For i = 7 To ActiveSheet.UsedRange.Rows.Count
With Cells(i, 1).EntireRow
strRow = .Range("A1").Text & ";" & _
.Range("C1").Text & ";" & _
.Range("D1").Text
End With
Print #1, strRow
Next i
Close #1
End Sub
Viele Grüße
Martin

Anzeige
@Martin
12.03.2014 11:13:45
Rudi
Hallo,
For i = 7 To ActiveSheet.UsedRange.Rows.Count
das geht schief, wenn nicht in jeder der Zeilen 1-6 irgendwo was steht.
Besser:
For i = 7 To Cells(Rows.Count, 1).End(xlUp).Row
Gruß
Rudi

...du bist knapp 60 Sekunden zu schnell gewesen
12.03.2014 11:17:59
Martin
Hallo Rudi,
danke für den Hinweis, ist mir selbst auch aufgefallen! Deine Lösung ist sogar codesparender als meine Lösung.
Viele Grüße
Martin

AW: bestimmte Spalten als CSV schreiben
12.03.2014 11:14:05
Reinhard
Hallo Martin,
das sieht schon recht vielversprechend aus. Leider komm ich nicht weit da er gleich beim Einstieg schon meckert mit Fehler beim Kompilieren.
Gruß
Reinhard

Anzeige
AW: bestimmte Spalten als CSV schreiben
12.03.2014 11:22:42
Martin
Hallo Reinhard,
am Makro liegt es bestimmt nicht. Prüfe mal bei dir im VBA-Editor die Verweise unter "Extras" und "Verweise".
Viele Grüße
Martin

AW: bestimmte Spalten als CSV schreiben
12.03.2014 11:14:37
Martin
Hallo Reinhard,
ich hoffe, dass es wie gewünscht klappt. Leider muss ich gleich weg und kann dein Feedback nicht abwarten. Mir ist bei meinem Makro aufgefallen, unter Umständen die letzte Zeile falsch erkannt wird. Deshalb habe ich den kleinen Bug noch behoben:
Sub CSV_Export()
Dim varFilePath As Variant
Dim i As Long, strRow As String, lLastRow As Long
varFilePath = Application.GetSaveAsFilename("CSV-Export.csv", FileFilter:="CSV-Dateien (*. _
csv), *.csv)", Title:="CSV-Export")
If varFilePath = "Falsch" Then Exit Sub
With ActiveSheet.UsedRange
lLastRow = .Row + .Rows.Count - 1
End With
Open varFilePath For Output As #1
For i = 7 To lLastRow
With Cells(i, 1).EntireRow
strRow = .Range("A1").Value & ";" & _
.Range("C1").Value & ";" & _
.Range("D1").Value
End With
Print #1, strRow
Next i
Close #1
End Sub
Ich bin in ca. 1 bis 2 Stunden wieder zurück.
Viele Grüße
Martin

Anzeige
AW: bestimmte Spalten als CSV schreiben
12.03.2014 11:21:23
Reinhard
Hallo Martin,
auch mit dieser Berichtigung kommt der Kompilierungsfehler noch.
Keine Hektik. Ich freu mich auf jede Antwort auch in 2 Stunden noch....
Gruß
Reinhard

AW: bestimmte Spalten als CSV schreiben
12.03.2014 11:30:52
Rudi
Hallo,
evtl liegt's an dem _ den die ForenSW eingefügt hat?
Sub CSV_Export()
Dim varFilePath As Variant
Dim i As Long, strRow As String, lLastRow As Long
varFilePath = Application.GetSaveAsFilename("CSV-Export.csv", _
FileFilter:="CSV-Dateien (*.csv), *.csv)", Title:="CSV-Export")
If varFilePath = "Falsch" Then Exit Sub
With ActiveSheet.UsedRange
lLastRow = .Row + .Rows.Count - 1
End With
Open varFilePath For Output As #1
For i = 7 To lLastRow
With Cells(i, 1).EntireRow
strRow = .Range("A1").Value & ";" & _
.Range("C1").Value & ";" & _
.Range("D1").Value
End With
Print #1, strRow
Next i
Close #1
End Sub

Anzeige
AW: bestimmte Spalten als CSV schreiben
12.03.2014 11:43:10
Reinhard
Hallo
es lag an dem Unterstrich, vielen Dank.
Ich hab nur eins vergessen zu sagen. Die Stückliste enthält in Spalte C auch 0 Werte. Diese werden, bevor die CSV Datei mit einem anderen Unterprogramm ausgeblendet. Natürlich, da ich das vergaß zu erwähnen ;-) werden diese jetzt mit ausgegeben. Kann man das auch noch rausfiltern?
Gruß und Ihr hant mir schon viel weiter geholfen.

AW: bestimmte Spalten als CSV schreiben
12.03.2014 12:01:40
Rudi
Hallo,
Sub CSV_Export()
Dim varFilePath As Variant
Dim i As Long, strRow As String, lLastRow As Long
varFilePath = Application.GetSaveAsFilename("CSV-Export.csv", _
FileFilter:="CSV-Dateien (*.csv), *.csv)", Title:="CSV-Export")
If varFilePath = "Falsch" Then Exit Sub
lLastRow = Cells(Rows.Count, 1).End(xlUp).Row
Open varFilePath For Output As #1
For i = 7 To lLastRow
If Cells(i, 3)  0 Then
strRow = _
Cells(i, 1) & ";" & _
Cells(i, 3) & ";" & _
Cells(1, 4)
Print #1, strRow
End If
Next i
Close #1
End Sub

Gruß
Rudi

Anzeige
AW: bestimmte Spalten als CSV schreiben
12.03.2014 12:23:40
Reinhard
Vielen vielen Dank....
War nur ein kleiner Tippfehler drin, aber den habe ich selbst gefunden.
Euch beiden echt danke für eure Mühe. Das ist genau das was ich brauchte.
Wie kann ich einem Fremden die genaue Funktionsweise und die Begrifflichkeiten in dem Makro mitteilen. Gibt's da gute Literatur zu?
Das ist jetzt nicht so eilig.
Gruß
Reinhard

@Martin: UsedRange
12.03.2014 12:09:10
Rudi
Hallo,
das
        With ActiveSheet.UsedRange
lLastRow = .Row + .Rows.Count - 1
End With

liefert ein falsches Ergebnis, wenn mehrere Tabellen auf einem Blatt sind.
z.B.
ABCDEFGHIJ
1          
2          
3Tab1     Tab2   
4xxxxxxxxxxxx  abcabcabcabc
5xxxxxxxxxxxx  abcabcabcabc
6xxxxxxxxxxxx  abcabcabcabc
7xxxxxxxxxxxx  abcabcabcabc
8xxxxxxxxxxxx  abcabcabcabc
9      abcabcabcabc
10      abcabcabcabc
11      abcabcabcabc

Außerdem berücksichtigt UsedRange auch Formatierungen. Was, wenn XFD1048576 gelb ist?
Oder wenn irgendwo was bearbeitet und wieder rückgängig gemacht wurde?
UsedRange hat wenig bis nichts mit dem Datenbereich zu tun.
Gruß
Rudi
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige