Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1796to1800
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

korrektes Zellformat in einer csv

korrektes Zellformat in einer csv
09.12.2020 14:14:34
EasyD
Hallo liebes Forum
ich scheitere gerade daran, eine csv zu erstellen, und dabei die einzelnen Felder im richtigen Format auszugeben.
1.Schritt SBS_import - eine csv auf Blatt1 importieren funktioniert
2.Schritt writeData - die importierten Daten ändern und auf Blatt 2 (navi) schreiben - hier muss dann das richtige Format erstellt werden
3.Schritt Export - Blatt2 als csv abspeichern
4.Schritt Emptydata - beide Blätter wieder leer machen
Zuerst wollte ich für jeden einzelnen Vorgang des Schreibens auf Blatt2 das Format festlegen und bin gescheitert.
Nun wollte ich nach Abschluss der Prozedur die ganze Spalte formatieren, klappt aber ebenfalls nicht.
Mein erster Versuch dabei war die erste Spalte, die ein Datum enthält. Das Ziel soll sein:
"TT.MM.JJ" - INKLUSIVE der Anführungszeichen - das Datum soll also ein Text sein!
Wie kriege ich das hin?
Mein bisheriger Code:
Sub SBS_import()
'.... wegrationalisiert, der Import funktioinert
Call writeData
Call Export
Call Emptydata
ActiveWorkbook.Close savechanges:=False
Application.Quit
End Sub

Function LetzterTag(inputdate As Date) As Date
'Funktion zur Ermittlung des Monatsletzten (Datumsspalte auf dem Blatt Navi)
LetzterTag = DateSerial(Year(inputdate), Month(inputdate) + 1, 0)
End Function

Sub writeData()
'Die Daten von dem Blatt1 umwandeln und auf das Blatt2 schreiben
Dim i As Integer
Dim letzte As Integer
letzte = Cells(1048576, 1).End(xlUp).Row
For i = 1 To letzte
Tabelle2.Cells(i, 1) = LetzterTag("1." & Tabelle1.Cells(i, 1).Value & "." & Tabelle1.Cells( _
i, 2).Value)
Tabelle2.Cells(i, 2) = 0
If Tabelle1.Cells(i, 8) = 186000 Then
Tabelle2.Cells(i, 3) = 186000
Tabelle2.Cells(i, 4) = ""
Else
Tabelle2.Cells(i, 3) = ""
Tabelle2.Cells(i, 4) = Tabelle1.Cells(i, 8).Value
End If
Tabelle2.Cells(i, 5) = Tabelle1.Cells(i, 9).Value
If Tabelle1.Cells(i, 4).Value = 0 Then
Tabelle2.Cells(i, 6) = Tabelle1.Cells(i, 12).Value 'Betrag im Haben
Tabelle2.Cells(i, 7) = 0 'Spalte 7 = SH Kennzeichnung, Haben
Else
Tabelle2.Cells(i, 6) = Tabelle1.Cells(i, 4).Value 'Betrag im Soll
Tabelle2.Cells(i, 7) = 1 'Spalte 7 = SH Kennzeichnung, Soll
End If
If Len(Tabelle1.Cells(i, 5)) = 5 Then
Tabelle2.Cells(i, 8) = Tabelle1.Cells(i, 5).Value
Tabelle2.Cells(i, 9) = ""
Else
Tabelle2.Cells(i, 8) = ""
Tabelle2.Cells(i, 9) = 0 & Tabelle1.Cells(i, 5).Value
End If
Tabelle2.Cells(i, 10) = Tabelle1.Cells(i, 9).Value
If Tabelle1.Cells(i, 5).Value = 955400 Then
Tabelle2.Cells(i, 11).Value = 16
Else
End If
Tabelle2.Cells(i, 12) = " " & Tabelle1.Cells(i, 11).Value
Next i
'Spaltenformate festlegen - Versuch für die erste Spalte
Tabelle2.Columns("A").NumberFormat = "dd.mm.yy"
End Sub

Sub Export()
'eine eigene csv-Datei erstellen zum Versand
Dim Bereich As Range, Zeile As Range, Zelle As Range
Dim strTemp As String
Dim strDateiname As String
Dim strTrennzeichen As String
Dim strMappenpfad As String
Dim blnAnfuehrungszeichen As Boolean
strMappenpfad = ActiveWorkbook.FullName
With Sheets("navi")
strDateiname = "exp_navi.csv"
strTrennzeichen = ";"
blnAnfuehrungszeichen = False
Set Bereich = Sheets("navi").UsedRange
Open strDateiname For Output As #1
For Each Zeile In Bereich.Rows
For Each Zelle In Zeile.Cells
If blnAnfuehrungszeichen = True Then
strTemp = strTemp & """" & CStr(Zelle.Text) & """" & strTrennzeichen
Else
strTemp = strTemp & CStr(Zelle.Text) & strTrennzeichen
End If
Next
If Right(strTemp, 1) = strTrennzeichen Then strTemp = Left(strTemp, Len(strTemp) - 1)
Print #1, strTemp
strTemp = ""
Next
End With
Close #1
Set Bereich = Nothing
MsgBox "Die csv-Datei wurde erstellt, sie liegt im gleichen Ordner wie die Originaldaten."
End Sub
Sub Emptydata()
'beide Blätter wieder leer machen
Tabelle1.UsedRange.ClearContents
Tabelle2.UsedRange.ClearContents
End Sub

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: korrektes Zellformat in einer csv
09.12.2020 19:20:53
Yal
Hallo EasyD,
fast tl;dr
Warum?
    Tabelle2.Cells(i, 1) = LetzterTag("1." & Tabelle1.Cells(i, 1).Value & "." & Tabelle1.Cells(  _
_
i, 2).Value)

und nicht direkt:
    Tabelle2.Cells(i, 1) = DateSerial(Tabelle1.Cells(i, 2), Tabelle1.Cells(i, 1) + 1, 0)
Was Du brauchst ist, von dem Export Zeile für Ziele weg zu
ActiveWorkbook.SaveAs Filename:=strDateiname, FileFormat:=xlCSV, CreateBackup:=False
Viel Erfolg
Yal
AW: korrektes Zellformat in einer csv
10.12.2020 07:51:29
EasyD
Hallo Yal
Tabelle2.Cells(i, 1) = DateSerial(Tabelle1.Cells(i, 2), Tabelle1.Cells(i, 1) + 1, 0)
habe ich angepasst... ist ja im Grunde nur eine "Abkürzung", aber nicht Teil des Problems oder?
und bezüglich:
ActiveWorkbook.SaveAs Filename:=strDateiname, FileFormat:=xlCSV, CreateBackup:=False
Was ändert es, wenn ich NICHT Zeile für Zeile exportiere?
Ich habe als Problem gerade ausgemacht:
blnAnfuehrungszeichen = False
geändert in:
blnAnfuehrungszeichen = True
Aber dann habe ich in ALLEN Feldern natürlich die Anführungszeichen. und das will ich ebenfalls nicht.
Das Problem ist, die zu erstellende csv ist für den Import in eine fremde Software gedacht, und die schreibt mir vor, das erste Feld mit Anführungszeichen, das zweite ohne, das dritte wieder mit usw...
kann ich mir irgendwie aussuchen, welche Felder ich mit und welche ich ohne die Anführungszeichen haben will?
Anzeige
AW: korrektes Zellformat in einer csv
10.12.2020 09:19:34
Yal
Hallo EasyD,
das ist eben der Punkt, dass der SaveAs xlCSV diese Fälle selber verwaltet. Es muss nur sichergestellt, dass die Spalten als Zahl oder Text formatiert sind.
VG
Yal
AW: korrektes Zellformat in einer csv
10.12.2020 08:07:16
EasyD
Ich ergänze mal was ich eben hier hinterlassen habe:
Wenn ich innerhalb der Schleife, dort wo ich abfrage ob Anführungszeichen oder nicht:
If blnAnfuehrungszeichen = True Then
strTemp = strTemp & """" & CStr(Zelle.Text) & """" & strTrennzeichen
Else
strTemp = strTemp & CStr(Zelle.Text) & strTrennzeichen
End If
vorher festlegen kann, dass ich in Spalte 1 die Anführungszeichen haben will, aber nicht in Spalte 2 usw.... dann hätte ich doch im Grunde die Lösung oder?
Ich habe eine Knoten im Kopf
Anzeige
AW: korrektes Zellformat in einer csv
10.12.2020 08:35:01
EasyD
Sorry, das wird hier gerade immer mehr.
muss mal kurz unterbrechen, will aber auch den letzten Stand hier posten, denn ich nähere mich gerade der Lösung - glaube ich zumindest.
das hier finde ich eigentlich einen recht logischen Ansatz, funktioniert aber leider auch nicht, denn ich habe immer noch ALLE Felder mit Anführungszeichen (ich brauche das nur in Spalte 1 3 8 und 12):
Auf die Deklarierung von blnAnfuehrungszeichen habe ich verzichtet und stattdessen:
........
For Each Zelle In Zeile.Cells
If Zelle.Column = 1 Or 3 Or 8 Or 12 Then
strTemp = strTemp & """" & CStr(Zelle.Text) & """" & strTrennzeichen
Else
strTemp = strTemp & CStr(Zelle.Text) & strTrennzeichen
End If
Next
........
Warum bekomme ich dann für die anderen Spalten (2 4 5 6 7 9 10 11) ebenfalls die Anführungszeichen?
Anzeige
AW: korrektes Zellformat in einer csv
10.12.2020 09:24:19
Yal
ändere
If Zelle.Column = 1 Or 3 Or 8 Or 12 Then
in
Select case Zelle.Column
Case 1,3, 8, 12
Case Else
End Select
oder
If Zelle.Column = 1 Or Zelle.Column = 3 Or Zelle.Column = 8 Or Zelle.Column = 12 Then
VG
Yal

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige