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

Forumthread: Zahlenformat VBA

Zahlenformat VBA
06.01.2015 15:49:57
andthen
Hallo Zusammen,
ich sitze nun seit längerer Zeit an einer kleinen Sache und finde die Lösung einfach nicht.
Ich kopiere mithilfe eines Makros 2 Spalten aus einer Quelldatei in eine Zieldatei.
Die Zahlen 1000 als Zahlen und mit einem Tausenderpunkt getrennt.
Kopiere ich nun mit meinem Makro werden alle Zahlen, die als Standard formatiert sind und Dezimalzahlen sind, als in Text gespeicherte Zahlen dargestellt.
Alle Zahlen, die als Standard formatiert und Alle Zahlen, die > 1000 und mit einem Tausendertrennzeichen versehen sind, werden in Dezimalzahlen umgewandelt (Bsp. 1.416 => 1,416). In der Zieldatei sind alle Daten als Standard formatiert.
Stelle ich nun in der Quelldatei die Zahlen mit Tausenderzeichen manuell von Zahl auf Standard um funktioniert das in diesem Fall. Daher war meine Idee in der geöffneten Quelldatei die benötigten Daten auf Standard umzustellen. Leider entstehen dabei wieder Dezimalzahlen und ich weiß nicht warum.
Nach ein Paar Versuchen ist mir nun aufgefallen, dass das Makro die Datei bereits falsch öffnet. Stoppe ich meinen Code nach dem Öffnen der Quelldatei werden die Zahlen bereits falsch dargestellt und sind als Standard formatiert. Wie kann ich dies verhindern? Wie öffnet mein Makro originalgetreu? Die Quelldatei ist ein 97 - 03 .xls Worksheet hängt es damit zusammen?
Mein Problem bezieht sich übrigens auf meinen Post 1399042 "Makro Einfügen Formatänderung" vom 19.12. Mit meinen Trennzeichen stimmt alles, das kann ignoriert werden.
Da ich Azubi bin konnte ich das Ganze über die Ferien nicht testen und weiß leider nicht wie ich diesen Thread wieder öffne.
Zu guter letzte noch meinen aktuellen Code

Option Explicit
Sub Import_mit_Dialog()
Dim Quelle As Object, Ziel As Object
Dim Datei As String
Dim lr As Long, i As Long
'Dim x As Double
'Dim letzteZeile As Integer
On Error GoTo Fehler
'Dialog "Datei öffnen" anzeigen
Datei = Application.GetOpenFilename("alle Excel-Dateien(*.xls),*xls")
'Abbrechen falls keine Datei ausgewählt
If Datei = "Falsch" Then
MsgBox "keine Datei ausgewählt", , "Abbruch"
Exit Sub
End If
'MsgBox "Ausgewählte Datei: " & Datei, , ""
Application.DisplayAlerts = False
'Ausgewählte Datei öffnen
Workbooks.Open Filename:=Datei
Set Quelle = ActiveWorkbook.Worksheets(1)
Set Ziel = ThisWorkbook.Worksheets("Basisdaten")
'letzteZeile = ActiveWorkbook.Worksheets(1).Cells.SpecialCells(xlLastCell).Row
'MsgBox letzteZeile
' With Worksheets(1)
'  For x = 4 To letzteZeile
'   .Cells(x, 18) = CDbl(.Cells(x, 6))
'  .Cells(x, 18).NumberFormat = "General"
'Next
' End With
'zu kopierende Daten auswählen und einfügen
Quelle.Range("D:D").Copy
Ziel.Cells(1, 1).PasteSpecial Paste:=xlPasteValuesAndNumberFormats
Quelle.Range("O:O").Copy
Ziel.Cells(1, 5).PasteSpecial Paste:=xlPasteValuesAndNumberFormats
Quelle.Range("S:S").Copy
Ziel.Cells(1, 6).PasteSpecial Paste:=xlPasteValuesAndNumberFormats
Ziel.Range("A2").Value = "Materialkurztext"
Ziel.Range("B2").Value = "Beschichtung"
Ziel.Range("C2").Value = "DN"
Ziel.Range("D2").Value = "Länge"
ActiveWorkbook.Close
Application.DisplayAlerts = True
Ziel.Select
'Zeile 1 löschen und Spaltenbreite festlegen
Rows("1").Delete
Columns("A").ColumnWidth = "40"
Columns("B:F").ColumnWidth = "15"
Calculate
'Leerzeilen löschen
Application.ScreenUpdating = False
lr = Cells(Rows.Count, 1).End(xlUp).Row
For i = lr To 1 Step -1
If WorksheetFunction.CountA(Cells(i, 1), Cells(i, 5)) = 0 Then Rows(i).Delete
Next i
Application.ScreenUpdating = True
'Speicher freigeben
Set Quelle = Nothing
Set Ziel = Nothing
ThisWorkbook.Worksheets("Datenverarbeitung").Select
'Call Hochkomma
'Call TestSummieren
Exit Sub
Fehler:
Set Quelle = Nothing
Set Ziel = Nothing
MsgBox "FehlerNr.: " & Err.Number & vbNewLine & vbNewLine _
& "Beschreibung: " & Err.Description _
, vbCritical, "Fehler"
End Sub

Ich hoffe ich konnte alles gut beschreiben und ihr könnt mir weiterhelfen.
Vielen Dank schon im Voraus!
Mit freundlichem Gruß
Robert

Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zahlenformat VBA
06.01.2015 15:56:29
Rudi
Hallo,
was ist denn, wenn du die Quelle von Hand öffnest?
Sind das wirklich Zahlen oder Texte, die wie Zahlen aussehen?
Gruß
Rudi

AW: Zahlenformat VBA
06.01.2015 16:02:52
andthen
Hallo Rudi,
danke für die erneut schnelle Rückmeldung !
In der Originaldatei von Hand geöffnet sind alle Zellen mit Werten 1000 als Zahlen mit Tausendertrennzeichen. Behandelt Excel eine Standardformatierung als Text? Das würde wahrscheinlich zumindest das entstehende Hochkomma nach dem Kopiervorgang erklären.
Gruß
Robert

Anzeige
AW: Zahlenformat VBA
06.01.2015 16:38:16
EtoPHG
Hallo Robert,
Teste mal ob du mit dem zusätzlichen Parameter beim Open der Quelle ein anderes Verhalten hast:
...
Workbooks.Open Filename:=Datei, Local:=True
...

Gruess Hansueli

AW: Zahlenformat VBA
07.01.2015 07:55:28
andthen
Hallo Hansueli,
es hat auf Anhieb funktioniert, ich danke dir !!
Könntest du mir vielleicht noch den Hintergrund dieses Zusatzes erläutern?
Ich weiß nun es geht um diese Abfrage der Vertrauenswürdigkeit beim Öffnen der Datei,
hab dies nicht im Zusammenhang gesehen. Wie behandelt Excel die unterschiedlichen Fälle?
Vielen vielen Dank nochmal !
Gruß
Robert

Anzeige
AW: Zahlenformat VBA
08.01.2015 08:35:45
EtoPHG
Hallo Robert,
Der Parameter Local:= hat nichts mit der Vertrauenswürdigkeits-Abfrage zu tun!
Er ist per Default (also wenn nicht explicit erwähnt) auf False gesetzt und öffnet Dateien im 'englisch/amerikanischen' Standard. D.h. VBA-Befehle für Zahlen erwarten eine Punkt als Dezimaltrennzeichen und ein Komma als Tausendertrennzeichen. In deinem Fall wird somit der Tausenderseparator zum Dezimalpunkt. Wird die Datei mit Local:=True geöffnet werden diese so behandelt, wie es in den Optionen (Trennzeichen) von Excel, bzw. wenn nicht anders gesetzt, wie in den Regional/Sprache-Einstellungen des Systems, festgelegt sind, d.h. in Deinem Fall wird nun das Komma als Dezimalseparator beim Kopieren behandelt.
Mehr findest du auch in der VBA-Hilfe zum Workbook.Open Befehl.
Gruess Hansueli
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Zahlenformat in VBA richtig handhaben


Schritt-für-Schritt-Anleitung

Um das Zahlenformat in VBA korrekt zu handhaben, kannst Du die folgenden Schritte befolgen:

  1. Öffnen der Quelldatei: Verwende den Workbooks.Open Befehl mit dem Zusatzparameter Local:=True, um die Datei im aktuellen regionalen Format zu öffnen.

    Workbooks.Open Filename:=Datei, Local:=True
  2. Kopieren der Daten: Wähle die zu kopierenden Bereiche aus und füge sie in die Zielarbeitsmappe ein. Achte darauf, PasteSpecial mit xlPasteValuesAndNumberFormats zu verwenden, um die Formate beizubehalten.

    Quelle.Range("D:D").Copy
    Ziel.Cells(1, 1).PasteSpecial Paste:=xlPasteValuesAndNumberFormats
  3. Zahlenformat anpassen: Falls notwendig, kannst Du nach dem Kopieren die Zahlenformate explizit festlegen. Zum Beispiel:

    Ziel.Cells(1, 1).NumberFormat = "#,##0.00" ' Tausendertrennzeichen
  4. Fehlerbehandlung einfügen: Implementiere eine Fehlerbehandlung, um Probleme beim Öffnen der Datei oder beim Kopieren der Daten zu vermeiden.

    On Error GoTo Fehler

Häufige Fehler und Lösungen

  • Zahlen werden als Text angezeigt: Dies kann passieren, wenn die Quelldatei nicht korrekt geöffnet wird. Stelle sicher, dass Du den Local:=True Parameter verwendest.

  • Tausendertrennzeichen wird als Dezimaltrennzeichen interpretiert: Achte darauf, dass die regionalen Einstellungen in Excel und Deinem Betriebssystem übereinstimmen. Der Zusatz Local:=True sorgt dafür, dass Excel die Zahlen entsprechend Deiner Ländereinstellungen interpretiert.

  • Fehler beim Kopieren: Wenn Du beim Kopieren der Daten auf Fehler stößt, überprüfe, ob die Quelldatei richtig geöffnet wurde und die gewünschten Bereiche korrekt ausgewählt sind.


Alternative Methoden

Eine weitere Möglichkeit, Zahlenformate in VBA zu handhaben, besteht darin, die Funktion TextToColumns zu verwenden. Diese Methode kann helfen, wenn Daten aus einer CSV-Datei importiert werden und Du sicherstellen möchtest, dass das vba zahlen formatieren korrekt durchgeführt wird.

Ziel.Range("A1:A100").TextToColumns Destination:=Ziel.Range("A1"), DataType:=xlDelimited, FieldInfo:=Array(1, 1)

Praktische Beispiele

Hier ist ein Beispiel, wie Du ein VBA-Makro schreiben kannst, um Daten mit korrektem Zahlenformat zu importieren:

Sub ImportData()
    Dim Quelle As Workbook
    Dim Ziel As Workbook
    Dim Datei As String

    Datei = Application.GetOpenFilename("Excel-Dateien (*.xls), *.xls")
    If Datei = "Falsch" Then Exit Sub

    Set Quelle = Workbooks.Open(Datei, Local:=True)
    Set Ziel = ThisWorkbook

    Quelle.Sheets(1).Range("A1:B10").Copy
    Ziel.Sheets(1).Range("A1").PasteSpecial Paste:=xlPasteValuesAndNumberFormats

    Quelle.Close SaveChanges:=False
End Sub

Tipps für Profis

  • Verwende xllastcell vba: Um die letzte verwendete Zelle zu finden, kannst Du die UsedRange-Eigenschaft verwenden, um sicherzustellen, dass Du nur die relevanten Daten kopierst.

    lr = Ziel.Cells(Ziel.Rows.Count, 1).End(xlUp).Row
  • Zahlenformat integer: Wenn Du sicherstellen möchtest, dass Deine Zahlen als Ganzzahlen behandelt werden, kannst Du die Werte vor dem Kopieren in Integer konvertieren.


FAQ: Häufige Fragen

1. Warum öffne ich die Datei nicht einfach ohne 'Local:=True'? Wenn Du die Datei ohne diesen Parameter öffnest, verwendet Excel standardmäßig den englischen Nummernformat, was zu falschen Interpretationen von Tausender- und Dezimaltrennzeichen führen kann.

2. Was passiert, wenn ich die Daten manuell formatiere? Manuelles Formatieren kann helfen, aber es ist nicht nachhaltig für automatisierte Prozesse. Verwende stattdessen VBA-Codes, um sicherzustellen, dass das Zahlenformat konsistent bleibt.

3. Wie kann ich sicherstellen, dass meine Daten korrekt kopiert werden? Verwende die PasteSpecial-Methode, um sowohl Werte als auch Formate zu kopieren, und teste regelmäßig, ob die Quelldatei korrekt geöffnet wurde.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige