Spalte in Excel per VBA formatieren

hanshans

Grünschnabel
Hallo an alle,

ich habe folgendes Excelproblem. Ich lese über ein Makro eine CSV ein, bearbeite die Daten und spucke eine bearbeitete CSV, die seperat gespeichert wird, wieder aus.
In einer Spalte stehen jede Menge IDs. Haben diese jedoch zu viele Ziffern, ändert Excel den Zellenwert in sowas 8,76E+11 um. Ich brauche die ID jedoch ausgeschrieben. Die formatierung ist auf standart gesetzt.

Wie kann ich eine ganze Spalte per VBA in Zahl ohne Nachkommastelle umformatieren


Danke im Vorraus.
 
Schau mal in der Excel Hilfe nach der STR-Funktion, damit werden numerische Werte in Strings umgewandelt.

Gruß Thomas
 
Danke für die schnelle Antwort, aber das hilft mir leider nicht. Wenn ich die CSV manuell formatiere, dann komm ich lediglich über 2 Formatierungswege zum richtigen ergebnis. Einmal wen ich die Zellen als Zahl mit 0 Nachkommastellen formatiere oder als Bruch. Wenn ich die Zelle als Text formatiere, dann wir die zelle trotzdem in der oben beschriebenen Form angezeigt.

Es kommt dazu, dass ich VBA vorher nie benutzt habe. Also frag ich einfach mal in den Raum ob ich mit diesem Code grundsätzlich richtig liege:

For i = 1 To Anzahl_Zeilen Step 1
Range(i, 6).Value = Format(Range(i, 6).Value, "0.#")
Next i

Hab ich mir aus dem schon vorhandenen code zusammen gereimt. leider fehlt mir die zeit mich richtig in die Materie reinzuarbeiten. Der VB-Code ansich ließt sich wie ein Buch, aber mit dem Excel-Zusatz komm ich nicht klar.
 
An sich ist der Code schon richtig.

Wenn du ein bisschen mehr zeigst, z.B. von der CSV Datei oder vom restlichen Code findet sich bestimmt eine Lösung.

Die ganze Spalte kannst du auch so formatieren:

Visual Basic:
Range("A:A").Select
Selection.NumberFormat = "0.#"

Thomas
 
Zuletzt bearbeitet:
Sub Create_Copy()
ActiveWorkbook.Worksheets(1).Cells.Copy 'kopiert aus Tabelle1 die Werte
With ThisWorkbook.ActiveSheet.Cells 'fügt in leeres Hauptblatt die Werte ein
.PasteSpecial Paste:=xlPasteValues
.PasteSpecial Paste:=xlFormats
End With

Application.CutCopyMode = False

ActiveWorkbook.Close 'schließt die Quelldatei

ThisWorkbook.ActiveSheet.Name = Asheet 'benennt Tabelle1 wie die Quelltabelle

Application.DisplayAlerts = False

For i = 1 To Anzahl_Zeilen Step 1
Range(i, 5).Value = Format(Range(i, 5).Value, "0.#")

Next i


ActiveWorkbook.SaveAs Filename:=NewDataName & ".xls" 'speichert das Workbook als "bereinigt"
Application.DisplayAlerts = True
End Sub

Funktioniert leider nicht wie gewünscht ;) hab wohl irgendwo ein Denkfehler. Anzahl_Zeilen ist eien Funktion mit Rückgabewert int.
 
Hab den letzten Post zu spät gelesen. Hier meine aktueller Ansatz, der aber leider, warum auch immer, nicht funktioniert.

Sub Create_Copy()
ActiveWorkbook.Worksheets(1).Cells.Copy 'kopiert aus Tabelle1 die Werte
With ThisWorkbook.ActiveSheet.Cells 'fügt in leeres Hauptblatt die Werte ein
.PasteSpecial Paste:=xlPasteValues
.PasteSpecial Paste:=xlFormats
End With

Application.CutCopyMode = False

ActiveWorkbook.Close 'schließt die Quelldatei

ThisWorkbook.ActiveSheet.Name = Asheet 'benennt Tabelle1 wie die Quelltabelle

ThisWorkbook.ActiveSheet.Range("E:E").Select
Selection.NumberFormat = "0.#"

Application.DisplayAlerts = False
ActiveWorkbook.SaveAs Filename:=NewDataName & ".xls" 'speichert das Workbook als "bereinigt"
Application.DisplayAlerts = True
End Sub
 
Also ich habe es eben so probiert und es klappt:

Visual Basic:
'For i = 1 To Anzahl_Zeilen Step 1
'Range(i, 5).Value = Format(Range(i, 5).Value, "0.#")

'Next i
'obige Zeilen auskommentiert das sie nicht funktionieren und dafür diesen Code eingegeben
Range("A:A").Select
Selection.NumberFormat = "000000"

Ok, falsche Spalte und falsche Formatierung aber von Prinzip her klappt es damit bei mir!!

Was geht bei dir nicht ?
 
Die so erzeugte CSV zeigt in der Spalte E flogende ID 902803576601 in dieser Form an 9,028E+11 usw. Die ID soll aber ausgeschrieben werden. Wenn ich nachträglich die CSV öffne und die Formatierung in der zeile anschaue, hat sich nichts geändert..
Ich verzweifel langsam. Kann mir jemand einen guten Link schicken, der mich zu einem Tutorial führt, bei dem ich das mit den Workbooks besser verstehen lerne? Ich kann mir eigentlich nur vorstellen, dass es noch daran liegt..
 
Excel hat damit ein generelles Problem. Es wird erkannt das der Inhalt der Zelle eine Zahl ist. Da sie für Excel aber zu groß ist um sie in der von dir gewünschten Form darzustellen wird sie umgewandelt.

Wenn du die Zellen manuell formatierst (Benutzderdefiniert) "###############" oder per Makro Selection.NumberFormat = "###############" werden sie richtig dargestellt.
Hier sind es jetzt 15 Zeichen, du kannst aber auch 20 nehmen wenn es noch längere IDs geben sollte.
 
Ich danke dir wirklich für deine Hilfe, aber ich bekomm das Problem einfach nicht in den Griff. Folgende Sachlage. Wenn ich an der formatierung garnichts mache, dann gehen in der veräünderten csv die letzten ziffern der betroffenen ids komplett verloren. ganz schlecht.

wenn ich die zellen manuell formatier in zahlen ohne nachkomma stelle und dann schliesse und wieder öffne, ist die zelle wieder wie vorher´. Wenn ich sie als text in der original csv formatiere ändert sich erst mal nichts. kopier ich dann aber den inhalt und füge ihn manuell in die zelle ein, klappt es auf einmal. Warum das denn bitte? NUR, obwohl ich, wie iben beschrieben, die formatierung ja mit kopiere, ändert sich das auf einmal wieder in der abgeänderten csv.. egal wie ich es mache, es geht schief.. Zu schade, dass das vertrauliche daten sind, sonst würde ich hier einfach mal alles posten ;)

das ist wie verhext....
 

Neue Beiträge

Zurück