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

Format Werte als Zahl mit 2 Kommastellen

Format Werte als Zahl mit 2 Kommastellen
29.01.2014 10:36:13
Beat
Guten Tag
Der Helfer Franz (fcs) hat mir freundlicherweise geholfen mit einem Makro (siehe Archiv ID 1346513 - https://www.herber.de/forum/archiv/1344to1348/t1346513.htm).
Ich habe das dann noch etwas an meine Struktur anpassen müssen. Funktioniert alles super (Dank nochmals an Franz!), leider aber übernimmt das Makro im CSV-File die Werte nicht grundsätzlich mit 2 Kommastellen (die Werte sollten nach Löschen der Spalten A:R in Spalte I stehen; sie stehen vor dem Löschen in Spalte AA).
Mein Versuch, das Makro zu ergänzen scheitert...
'Format in Spalte Value auf Zahl mit 2 Kommastellen setzen
Range("I:I").Select
Selection.NumberFormat = "0.00"
Range("A1").Select
Habs auch versucht mit...
'Format in Spalte Value auf Zahl mit 2 Kommastellen setzen
With Range("I:I").Select
Selection.NumberFormat = "0.00"
End With
Range("A1").Select
die Werte mit xxx.00 werden im CSV nach wie vor nicht mit 2 Kommastellen angezeigt.
Hätte mir jemand die Lösung? Wäre super!
Viele Grüsse
Beat
Sub csv_196()
' csv_196 Makro
' Erstellt CSV-file mit Vorschlag Speicherort Desktop
Dim wks As Worksheet
Dim SrcRg As Range
Dim CurrRow As Range
Dim CurrCell As Range
Dim CurrTextStr As String
Dim ListSep As String
Dim FName As Variant, FPath As String
Dim FF As Integer
'Vorgabe-Verzeichnis der CSV-Datei
FPath = ActiveWorkbook.Path         'Verzeichnis der aktiven Arbeitsmappe
FPath = "C:\Users\" & VBA.Environ("Username") & "\Desktop" '"C:\Users\" ggf. anpassen
FPath = FPath & Application.PathSeparator
'Vorgabe-Dateiname aus Werten im Blatt uploadfile bilden
With Worksheets("Uploadfile")
.Range("A7").Calculate
FName = "Upload_DWH_" & .Range("N10").Text & "_P&L_" & .Range("N7").Text _
& .Range("N5").Text & "_" & Format(.Range("N13"), "yyyymmdd") & "-" & Format(.Range(" _
N13"), "hhmm") & ".csv"
End With
'Auswahldialog für Dateinahme anzeigen
FName = Application.GetSaveAsFilename(FPath & FName, "CSV File (*.csv), *.csv")
If FName = False Then Exit Sub
Set wks = ActiveWorkbook.Sheets("Uploadfile") 'Name ggf. anpassen
'Blatt in temproräres Blatt kopieren
wks.Copy after:=wks
Set wks = ActiveSheet
wks.Name = "UploadFile " & Format(Now, "YYYYMMDD hhmmss")
With wks
'Formeln durch Werte ersetzen
With .UsedRange
.Copy
.PasteSpecial Paste:=xlValues
Application.CutCopyMode = False
End With
'Spalten löschen
.Range("A:R").EntireColumn.Delete shift:=xlShiftToLeft
End With
Range("A1").Select
    'Format in Spalte Value auf Zahl mit 2 Kommastellen setzen
Range("I:I").Select
Selection.NumberFormat = "0.00"
Range("A1").Select
'CSV-File erstellen
ListSep = Application.International(xlListSeparator)
If Selection.Cells.Count > 1 Then
Set SrcRg = Selection
Else
Set SrcRg = ActiveSheet.UsedRange
End If
FF = FreeFile
Open FName For Output As #FF
For Each CurrRow In SrcRg.Rows
CurrTextStr = "" '   ìî
For Each CurrCell In CurrRow.Cells
CurrTextStr = CurrTextStr & CurrCell.Value & ListSep
Next
While Right(CurrTextStr, 1) = ListSep
CurrTextStr = Left(CurrTextStr, Len(CurrTextStr) - 1)
Wend
Print #FF, CurrTextStr
Next
Close #FF
'temporäre Blattkopie wieder löschen
Application.DisplayAlerts = False
wks.Delete
Application.DisplayAlerts = True
' zurück an den Ursprungsort
Sheets("Uploadfile").Select
Range("P14").Select
End Sub

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Format Werte als Zahl mit 2 Kommastellen
29.01.2014 11:21:33
fcs
Hallo Beat,
ändere die folgende Zeile
            CurrTextStr = CurrTextStr & CurrCell.Value & ListSep
in
CurrTextStr = CurrTextStr & CurrCell.Text & ListSep

Dann wird der Zellinhalt so in die CSV geschrieben, wie am Bildschirm angezeigt.
Gruß
Franz

AW: Format Werte als Zahl mit 2 Kommastellen
29.01.2014 12:58:51
Beat
Hallo Franz
Herzlichen Dank - funktioniert bestens!
Viele Grüsse Beat

AW: Format Werte als Zahl mit 2 Kommastellen
29.01.2014 13:25:00
Beat
Hallo Franz
ich habe mich zu früh gefreut - jetzt hab ich gar keine Werte mehr im CSV-File. komisch nur, dass der erste Text erfolgreich war...
Gruss Beat
Sub csv_196()
' csv_196 Makro
' Erstellt CSV-file mit Vorschlag Speicherort Desktop
Dim wks As Worksheet
Dim SrcRg As Range
Dim CurrRow As Range
Dim CurrCell As Range
Dim CurrTextStr As String
Dim ListSep As String
Dim FName As Variant, FPath As String
Dim FF As Integer
'Vorgabe-Verzeichnis der CSV-Datei
FPath = ActiveWorkbook.Path         'Verzeichnis der aktiven Arbeitsmappe
FPath = "C:\Users\" & VBA.Environ("Username") & "\Desktop" '"C:\Users\" ggf. anpassen
FPath = FPath & Application.PathSeparator
'Vorgabe-Dateiname aus Werten im Blatt uploadfile bilden
With Worksheets("Uploadfile")
.Range("A7").Calculate
FName = "Upload_DWH_" & .Range("N10").Text & "_P&L_" & .Range("N7").Text _
& .Range("N5").Text & "_" & Format(.Range("N13"), "yyyymmdd") & "-" & Format(.Range(" _
N13"), "hhmm") & ".csv"
End With
'Auswahldialog für Dateinahme anzeigen
FName = Application.GetSaveAsFilename(FPath & FName, "CSV File (*.csv), *.csv")
If FName = False Then Exit Sub
Set wks = ActiveWorkbook.Sheets("Uploadfile") 'Name ggf. anpassen
'Blatt in temproräres Blatt kopieren
wks.Copy after:=wks
Set wks = ActiveSheet
wks.Name = "UploadFile " & Format(Now, "YYYYMMDD hhmmss")
With wks
'Formeln durch Werte ersetzen
With .UsedRange
.Copy
.PasteSpecial Paste:=xlValues
Application.CutCopyMode = False
End With
'Spalten löschen
.Range("A:R").EntireColumn.Delete shift:=xlShiftToLeft
End With
Range("A1").Select
'CSV-File erstellen
ListSep = Application.International(xlListSeparator)
If Selection.Cells.Count > 1 Then
Set SrcRg = Selection
Else
Set SrcRg = ActiveSheet.UsedRange
End If
FF = FreeFile
Open FName For Output As #FF
For Each CurrRow In SrcRg.Rows
CurrTextStr = "" '   ìî
For Each CurrCell In CurrRow.Cells
CurrTextStr = CurrTextStr & CurrCell.Text & ListSep
Next
While Right(CurrTextStr, 1) = ListSep
CurrTextStr = Left(CurrTextStr, Len(CurrTextStr) - 1)
Wend
Print #FF, CurrTextStr
Next
Close #FF
'temporäre Blattkopie wieder löschen
Application.DisplayAlerts = False
wks.Delete
Application.DisplayAlerts = True
' zurück an den Ursprungsort
Sheets("Uploadfile").Select
Range("P14").Select
End Sub

Anzeige
AW: Format Werte als Zahl mit 2 Kommastellen
29.01.2014 13:25:43
Beat
... der erste Test (nicht Text) war erfolgreich, sorry ;-)

AW: Format Werte als Zahl mit 2 Kommastellen
29.01.2014 13:26:13
Beat
.

AW: Format Werte als Zahl mit 2 Kommastellen
29.01.2014 14:46:07
fcs
Hallo Beat,
das Problem kann ich jetzt nicht nachvollziehen.
Ich hab dein Makro jetzt mit Testdaten Probiert - funktioniert.
Werden im Tabellenblatt "Uploadfile" rechts von Spalte R, denn Daten angezeigt?
Gruß
Franz

AW: Format Werte als Zahl mit 2 Kommastellen
29.01.2014 14:56:41
Beat
Hallo Franz
Sorry, dass ich die da bemühe. Kurz zum Sheet 'Uploadfile'. Ich bereite in den Spalten A:L die für das Uploadfile notwendigen Daten auf (mittels Formeln, Mappings usw).
Spalten N:P beinahlten Daten für einen erweiterten Filter, damit alle Nullwerte resp. Werte aus nicht relevanten Perioden raus sind (diese habe ich in Spalte A:L noch drin). Das Resultat von dem lasse ich mir in die Spalten R:Z übertragen - mit den Bezeichnungen:
- Source System
- DataEntry Period
- Data-Description
- Scenario
- Period
- Entity
- ICP
- Position
- Value
Nach dem Löschen der Spalten A:Q sollten diese Spalten dann in A:I stehen. Mit '...Value' kommen die Werte auch sauber im CSV-File an, aber leider ohne die Formatierung (2 Kommastellen). Mit '...Text' klappt's bei mir momentan (noch) nicht.
Sodele, ich steh da gerade n'bisschen vor dem Berg, aber evtl. siehst du aus meinen Erklärungen eine Unstimmigkeit, die dazu führt.
Viele Grüsse
Beat

Anzeige
AW: Format Werte als Zahl mit 2 Kommastellen
29.01.2014 15:44:04
fcs
Hallo Beat,
wie schon geschrieben, nachvollziehen kann ich es nicht.
Wenn alle Zahlenwerte mit 2 Nachkommastellen ins CSV geschrieben werden sollen, dann ginge auch noch folgendes.
             CurrTextStr = CurrTextStr & Format(CurrCell.Value, "0.00") & ListSep

Aber wenn ich mir die Spaltentitel ansehen, dann gibt es auch Spalten mit Zahlen/Datum, die nicht mit Dezimalstellen angezeigt werden sollen. Bei 9 Spalten könnte man natürlich auch jede Spalte speziell einlesen, aber das wird dann immer aufwendeiger in der Programmierung.
Gruß
Franz

Anzeige
AW: Format Werte als Zahl mit 2 Kommastellen
29.01.2014 16:11:58
Beat
Hallo Franz
leider muss nur die Wert-Spalte mit 2 Kommastellen kommen ;-). ich hab jetzt mal das ganz File hochgeladen.
https://www.herber.de/bbs/user/89021.xlsm
Ich möchte dich dann nicht mehr allzu lange mit meinem Problem beschäftigen. Anosten müssen halt die User des CSV-File nochmals öffnen und das Format anpassen.
Gruss Beat

AW: Format Werte als Zahl mit 2 Kommastellen
29.01.2014 17:36:51
fcs
Hallo Beat,
ich glaube ich hab die Ursache gefunden.
Wenn die Spalten R bis AA ausgeblendet sind, wenn das Uploadfile kreiert wird, dann funktioniert die Text-Eigenschaft der Zellen mit Zahlenformaten nicht korrekt.
Ich hab das Makro ergänzt, so dass im kopierten Blatt imer alle Spalten eingeblendet werden, bevor weiter Aktionen ablaufen.
Gruß
Franz
Sub csv_196()
' csv_196 Makro
' Erstellt CSV-file mit Vorschlag Speicherort Desktop
Dim wks As Worksheet
Dim SrcRg As Range
Dim CurrRow As Range
Dim CurrCell As Range
Dim CurrTextStr As String
Dim ListSep As String
Dim FName As Variant, FPath As String
Dim FF As Integer
'Vorgabe-Verzeichnis der CSV-Datei
FPath = ActiveWorkbook.Path         'Verzeichnis der aktiven Arbeitsmappe
FPath = "C:\Users\" & VBA.Environ("Username") & "\Desktop" '"C:\Users\" ggf. anpassen
FPath = FPath & Application.PathSeparator
'Vorgabe-Dateiname aus Werten im Blatt uploadfile bilden
With Worksheets("Uploadfile")
.Range("A7").Calculate
FName = "Upload_DWH_" & .Range("N10").Text & "_P&L_" & .Range("N7").Text _
& .Range("N5").Text & "_" & Format(.Range("N13"), "yyyymmdd") & "-" & Format(.Range(" _
N13"), "hhmm") & ".csv"
End With
'Auswahldialog für Dateinahme anzeigen
FName = Application.GetSaveAsFilename(FPath & FName, "CSV File (*.csv), *.csv")
If FName = False Then Exit Sub
Set wks = ActiveWorkbook.Sheets("Uploadfile") 'Name ggf. anpassen
'Blatt in temproräres Blatt kopieren
wks.Copy after:=wks
Set wks = ActiveSheet
wks.Name = "UploadFile " & Format(Now, "YYYYMMDD hhmmss")
With wks
.Cells.EntireColumn.Hidden = False   'Alle Spalten einblenden - neue Zeile
'Formeln durch Werte ersetzen
With .UsedRange
.Copy
.PasteSpecial Paste:=xlValues
Application.CutCopyMode = False
End With
'Spalten löschen
.Range("A:R").EntireColumn.Delete shift:=xlShiftToLeft
End With
Range("A1").Select
'CSV-File erstellen
ListSep = Application.International(xlListSeparator)
If Selection.Cells.Count > 1 Then
Set SrcRg = Selection
Else
Set SrcRg = ActiveSheet.UsedRange
End If
FF = FreeFile
Open FName For Output As #FF
For Each CurrRow In SrcRg.Rows
CurrTextStr = "" '   ìî
For Each CurrCell In CurrRow.Cells
CurrTextStr = CurrTextStr & CurrCell.Text & ListSep
Next
While Right(CurrTextStr, 1) = ListSep
CurrTextStr = Left(CurrTextStr, Len(CurrTextStr) - 1)
Wend
Print #FF, CurrTextStr
Next
Close #FF
'temporäre Blattkopie wieder löschen
Application.DisplayAlerts = False
wks.Delete
Application.DisplayAlerts = True
' zurück an den Ursprungsort
Sheets("Uploadfile").Select
Range("P14").Select
End Sub

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige
Archiv - Verwandte Themen
Forumthread
Beiträge