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

Nachkommastellen werden nicht korrekt ausgegeben

Forumthread: Nachkommastellen werden nicht korrekt ausgegeben

Nachkommastellen werden nicht korrekt ausgegeben
07.09.2015 15:16:58
srico
Hallo Foris,
ich habe ein Problem an dem ich total verzweifle. Leider kenne ich mich mit Makros garnicht aus, aber ich bin mir mitlerweile nicht sicher, ob das Problem überhaupt an dem Makro liegt, wenn nicht sogar an Excel selbst............................
Folgendes Szenario:
Es gibt zwei Tabellenblätter, eins ist das Zielblatt und das andere Blatt ist die Quelldatenbank.
Ich starte ein Makro und es schreibt aus der Quelldatenbank in das Zielblatt. Alle Zahlen die > 3 Nachkommastellen haben werden als 1000er Zahlen in das Zielblatt geschrieben (statt 2,213 wird falsch übertragen 2.213). Zahlen Habt ihr eine Idee woran das liegen könnte? -ob es nicht doch irgendwas Grundsätzliches ist?
Ich würde mich sehr über eine Antwort freuen.
Vielen Dank

Anzeige

19
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Nachkommastellen werden nicht korrekt ausgegeben
07.09.2015 15:24:23
UweD
Hallo
Die Ursache liegt in Zeile 4 deines Makros.
Gruß UweD
'PS auch eine Beispieldatei könnte hilfreich sein

AW: Nachkommastellen werden nicht korrekt ausgegeben
08.09.2015 08:39:51
srico
Guten Morgen,
hier ist der Code:

Sub HP_erstellen()
' liest die variablen Daten eines HP aus dem jeweiligen Register "HP_Datenbank" und
' überträgt sie in das Register "HP"
'Call aufraeumen
Application.ScreenUpdating = False
Dim hp_daten_pos(300) As String     ' enthält die Feldnamen
Dim hp_daten_hoehe(300) As Integer  ' 0: wenn hpdaten(i)="" dann Zeilenhöhe = 0, 1: keine  _
Aktion
Dim hp_daten(300) As String         ' enthält die Feldinhalte
Dim register As String
' Namen des aktiven Registers bestimmen
register = ActiveSheet.name
Call ZeileSpalteBestimmen(ze, sp)
If register = "HP_Datenbank" And ze >= 5 Then
For ii = 1 To 300
hp_daten_pos(ii) = Cells(3, ii)
hp_daten_hoehe(ii) = Cells(4, ii)
hp_daten(ii) = Cells(ze, ii)
Next ii
Sheets("HP").Select
For ii = 1 To 300
If hp_daten_pos(ii)  "" Then
Let Err = 0
On Error Resume Next
Range(hp_daten_pos(ii)).Select
If Err = 1004 Then MsgBox "Das Feld " & hp_daten_pos(ii) & " existiert nicht!"
On Error GoTo 0
Range(hp_daten_pos(ii)).Select
' wenn keine Daten und Höhe = 0, dann Zeilenhöhe auf 0 setzen
If hp_daten(ii) = "" And hp_daten_hoehe(ii) = 0 Then
ActiveCell.RowHeight = 0
' wenn , dann Zeilenhöhe auf 0 setzen
ElseIf hp_daten(ii) = "" Then
ActiveCell.RowHeight = 0
' Seitenumbruch einfügen:  = PageBreak
ElseIf hp_daten(ii) = "" Then
Call ZeileSpalteBestimmen(ze2, sp2)
Rows(ze2).Select
ActiveWindow.SelectedSheets.HPageBreaks.Add Before:=ActiveCell
Else
ActiveCell.Select
If Left(hp_daten(ii), 6) = "
" Then hp_daten(ii) = Right(hp_daten(ii), Len(hp_daten(ii)) - 6) ActiveCell.FormulaLocal = hp_daten(ii) Else ActiveCell.Value = hp_daten(ii) End If End If End If Next ii SendKeys "(^{home})", True Cells(3, 2).Select End If 'Call FormelnErsetzen Application.ScreenUpdating = True End Sub

Vielen Dank und viele Grüße

Anzeige
AW: Nachkommastellen werden nicht korrekt ausgegeben
08.09.2015 08:42:27
srico
Hallo nochmal,
warum das unten durchgestrichen ist verstehe ich nicht.
Leider kenne ich mich mit Makros überhaupt nicht aus.
Deswegen wäre es gut, wenn ihr mir das für absolute Anfänger erklärt.
Herzlichen Dank

Sprache VBA
07.09.2015 15:25:03
RPP63
Hallo!
Der Punkt ist für VBA das Komma und vice versa.
Zeige mal Dein Makro!
Gruß Ralf

Anzeige
AW: Sprache VBA
08.09.2015 08:46:23
srico
Hallo Ralf,
leider streicht er hier in der Ansicht einiges durch,
das ist natürlich keine Absicht.
Ich habe überhaupt keine Ahnung von Makros.
Und wie geschrieben, das Phänomen tritt nicht immer auf.
Erst ab 3 Nachkommastellen oder wenn eine Null vor dem Komma steht wird falsch umgewandelt.
---------------------------
hier ist der Code:

Sub HP_erstellen()
' liest die variablen Daten eines HP aus dem jeweiligen Register "HP_Datenbank" und
' überträgt sie in das Register "HP"
'Call aufraeumen
Application.ScreenUpdating = False
Dim hp_daten_pos(300) As String     ' enthält die Feldnamen
Dim hp_daten_hoehe(300) As Integer  ' 0: wenn hpdaten(i)="" dann Zeilenhöhe = 0, 1: keine  _
Aktion
Dim hp_daten(300) As String         ' enthält die Feldinhalte
Dim register As String
' Namen des aktiven Registers bestimmen
register = ActiveSheet.name
Call ZeileSpalteBestimmen(ze, sp)
If register = "HP_Datenbank" And ze >= 5 Then
For ii = 1 To 300
hp_daten_pos(ii) = Cells(3, ii)
hp_daten_hoehe(ii) = Cells(4, ii)
hp_daten(ii) = Cells(ze, ii)
Next ii
Sheets("HP").Select
For ii = 1 To 300
If hp_daten_pos(ii)  "" Then
Let Err = 0
On Error Resume Next
Range(hp_daten_pos(ii)).Select
If Err = 1004 Then MsgBox "Das Feld " & hp_daten_pos(ii) & " existiert nicht!"
On Error GoTo 0
Range(hp_daten_pos(ii)).Select
' wenn keine Daten und Höhe = 0, dann Zeilenhöhe auf 0 setzen
If hp_daten(ii) = "" And hp_daten_hoehe(ii) = 0 Then
ActiveCell.RowHeight = 0
' wenn , dann Zeilenhöhe auf 0 setzen
ElseIf hp_daten(ii) = "" Then
ActiveCell.RowHeight = 0
' Seitenumbruch einfügen:  = PageBreak
ElseIf hp_daten(ii) = "" Then
Call ZeileSpalteBestimmen(ze2, sp2)
Rows(ze2).Select
ActiveWindow.SelectedSheets.HPageBreaks.Add Before:=ActiveCell
Else
ActiveCell.Select
If Left(hp_daten(ii), 6) = "
" Then hp_daten(ii) = Right(hp_daten(ii), Len(hp_daten(ii)) - 6) ActiveCell.FormulaLocal = hp_daten(ii) Else ActiveCell.Value = hp_daten(ii) End If End If End If Next ii SendKeys "(^{home})", True Cells(3, 2).Select End If 'Call FormelnErsetzen Application.ScreenUpdating = True End Sub

Vielen Dank und viele Grüße

Anzeige
AW: Nachkommastellen werden nicht korrekt ausgegeben
07.09.2015 15:42:28
Daniel
Hi
wenn du einen beliebigen Zeichenfolge in eine Zelle schreibst, überprüft Excel, ob es sich bei diesem Text um eine Formel, eine Zahl oder ein Datum handeln könnte und wandelt ggf. die Eingabe in die entsprechende Form um.
für die Prüfung, ob eine Zeichenfolge eine Zahl sein könnte, wendet Excel
- das Landestypische (hier: deutsche) Zahlenformat an, wenn die Eingabe von Hand erfolgt
- das englische Zahlenformat, wenn die die Eingabe durch ein Makro erfolgt.
die möglichen Workarounds wären:
- vor dem Schreiben in die Zelle Punkt und Komma tauschen, um den Text in die englische Schreibweise zu bringen
- mit CDbl oder CLng den Text in eine Zahl wandeln und diese in die Zelle schreiben (diese Umwandlungsfunktionen wenden auch das landestypische Format an)
Gruß Daniel

Anzeige
AW: Nachkommastellen werden nicht korrekt ausgegeben
08.09.2015 09:53:00
srico
Hallo Daniel,
danke für deine ANtwort.
Leider kenne ich mich mit Makros überhaupt nicht aus :-((.
Ich wende dieses Makro nur an und es ist zu diesem Fehler gekommen.
Wenn das Problem an der Länderkennzeichnung liegt, warum wird dann nicht immer alles falsch umgewandelt, sondern nur wenn es sich um Nachkommastelleln größer 3 handelt, oder wenn eine Null vor dem Komma ist?
VIele Grüße

Anzeige
AW: Nachkommastellen werden nicht korrekt ausgegeben
08.09.2015 14:51:09
Daniel
Hi
da kenn ich mich auch nicht tief genug aus, um zu wissen was Excel da macht.
probier mal, was passiert wenn du das
 ActiveCell.Value = hp_daten(ii)

durch

ActiveCell.FormulaLocal = hp_daten(ii)

ersetzt. Denn mit dem FormulaLocal müsste Excel dann wieder die deuteschen Formate anwenden.
Gruß Daniel

Anzeige
AW: Nachkommastellen werden nicht korrekt ausgegeben
08.09.2015 15:36:36
srico
Hallo Daniel,
herzlichen Dank, das geht zwar, aber das "ActiveCell.FormulaLocal = hp_daten(ii)"
steht ja schon in der IF Bedingung zwei Zeilen drüber.
Da verstehe ich dann die Logik nicht ?
Geht dann ggf. woanders was kaputt?
VG und danke nochmal ! :-))

AW: Nachkommastellen werden nicht korrekt ausgegeben
08.09.2015 15:45:38
Daniel
Hi
naja, aber drunter nicht.
und wenn die IF-Bedingung nicht erfüllt ist, wir der untere Teil ausgeführt.
und wenn der Teil versucht, einen Text der wie eine Zahl aussieht in die Zellen einzutragen, wird das englische Format eingetragen.
mehr kann ich dir jetzt auch nicht sagen, denn ich kenne mich in deiner Datei und in der Aufgabenstellung noch weniger aus als du in VBA.
btw, wenn du selber kein VBA kannst, dann solltest du dich vielleicht erstmal an den wenden, der dir den Code geschrieben hat, das wäre sinnvoller.
Gruß Daniel

Anzeige
AW: Nachkommastellen werden nicht korrekt ausgegeben
08.09.2015 15:55:37
srico
Hallo Daniel,
das ist erstman sehr nett, dass du mir hilfst.
Ich würde mich gerne an den Menschen wenden, doch der ist nicht mehr greifbar...........
Deswegen muss ich ran und versuchen es hinzubekommen.
Wie gesagt, dein Tipp funzt, nur habe ich Angst, dass dadurch was anderes ungewolltes entsteht.
Denn die If Funktion ist dadurch eigentlich überflüssig? -hmmmmmm, vielleicht auch nicht, da wird ja noch mehr abgefragt...........
Ich werde es jetzt erstmal so nehmen ;-)).
Vielen Dank.

Anzeige
AW: Nachkommastellen werden nicht korrekt ausgegeben
08.09.2015 16:40:13
Daniel
Versuch macht kluch.
ist ja nur ne Exceldatei.
kannst ja erstmal ne Kopie anlegen und damit rumspielen.
wenn euer Programmierer nicht mehr greifbar ist, dann musst jetzt du das lernen.
denn Markos zu verwenden ohne sich mit der Makroprogrammierung auszukennen, ist immer so ein bisschen wie fahren ohne Führerschein.
Gruß Daniel

Anzeige
AW: Nachkommastellen werden nicht korrekt ausgegeben
08.09.2015 16:50:40
srico
Ja das stimmt, aber ich habe keine andere Möglichkeit..............
Vielleicht meldet sich noch jemand :-))

AW: Nachkommastellen werden nicht korrekt ausgegeben
08.09.2015 17:05:41
Daniel
wenns wichtig ist, solltest du dich vielleicht doch an einen Profi wenden (z.b. den Betreiber dieser Seite).
Foren sind eher für Menschen, die selber programmieren.
Gruß Daniel

Anzeige
Deine neue Nachfrage weiter oben kann ...
08.09.2015 23:06:50
Luc:-?
…nicht beantwortet wdn, srico,
weil du wohl irgendeinen Mist gebaut hast. Ansonsten geht aus deinem dort recht seltsam dargestellten Code nicht hervor, was nun wirklich in deiner „Quell-DB“ steht?! Es kann nämlich sein, dass auf Grund der dortigen Darstellung und der Weiterbehandlung per VBA <3 Dezimalen auch als solche erkannt wdn, bei >3 Dezimalen aber der DezimalTrenner als TausenderTrenner → US-Engl Komma, MS-Deutsch-Standard Pkt. Dazu kann wohl keiner eine verbindliche AW geben, weil die Original-Quell-Notation (Text- oder echte Zahl und in welcher Form) ebenso wie deine Xl-Einstellungen (auch für das Ergebnis!) allen unbekannt sind. Dein Code hilft da auch nicht viel weiter. Zu ersehen ist nur, dass du wohl TextZahlen erwartest (vorgeschaltete und deshalb eliminierte Blanks) und deshalb mittels TextFkt ggf aus einer Zahl Text machst, was zu Problemen bzgl der Unterscheidung von Dezimal- und TsderTrennZeichen führen dürfte.
Das zu checken ist dir aber hier schon empfohlen worden!
Gruß, Luc :-?

Anzeige
AW: Versuch
08.09.2015 23:41:55
Gerd
Hallo,
die Ländereinstellung(en) deines Excel solltest du auch prüfen.
Sub HP_erstellen()
' liest die variablen Daten eines HP aus dem jeweiligen Register "HP_Datenbank" und
' überträgt sie in das Register "HP"
'Call aufraeumen
Application.ScreenUpdating = False
Dim hp_daten_pos(300) As String     ' enthält die Feldnamen
Dim hp_daten_hoehe(300) As Integer  ' 0: wenn hpdaten(i)="" dann Zeilenhöhe = 0, 1: keine _
Aktion
Dim hp_daten(300) As Variant        ' enthält die Feldinhalte
Dim register As String
' Namen des aktiven Registers bestimmen
register = ActiveSheet.Name
Call ZeileSpalteBestimmen(ze, sp)
If register = "HP_Datenbank" And ze >= 5 Then
For ii = 1 To 300
hp_daten_pos(ii) = Cells(3, ii)
hp_daten_hoehe(ii) = Cells(4, ii)
hp_daten(ii) = CDbl(Cells(ze, ii).text)
Next ii
Sheets("HP").Select
For ii = 1 To 300
If hp_daten_pos(ii)  "" Then
Let Err = 0
On Error Resume Next
Range(hp_daten_pos(ii)).Select
If Err = 1004 Then MsgBox "Das Feld " & hp_daten_pos(ii) & " existiert nicht!"
On Error GoTo 0
Range(hp_daten_pos(ii)).Select
' wenn keine Daten und Höhe = 0, dann Zeilenhöhe auf 0 setzen
If hp_daten(ii) = "" And hp_daten_hoehe(ii) = 0 Then
ActiveCell.RowHeight = 0
' wenn , dann Zeilenhöhe auf 0 setzen
ElseIf hp_daten(ii) = "" Then
ActiveCell.RowHeight = 0
' Seitenumbruch einfügen:  = PageBreak
ElseIf hp_daten(ii) = "" Then
Call ZeileSpalteBestimmen(ze2, sp2)
Rows(ze2).Select
ActiveWindow.SelectedSheets.HPageBreaks.Add Before:=ActiveCell
Else
ActiveCell.Select
If Left(hp_daten(ii), 6) = "" Then
hp_daten(ii) = Right(hp_daten(ii), Len(hp_daten(ii)) - 6)
ActiveCell.FormulaLocal = hp_daten(ii)
Else
ActiveCell.Value = hp_daten(ii)
End If
End If
End If
Next ii
SendKeys "(^{home})", True
Cells(3, 2).Select
End If
'Call FormelnErsetzen
Application.ScreenUpdating = True
End Sub
Gruß Gerd

Anzeige
AW: Versuch
09.09.2015 08:23:12
srico
Hallo und danke.
Das Post von oben kann weg, wenn man es löschen kann.
Ja, stimmt, ich sollte mir Hilfe von einem Profi holen, das ist aber leider nicht möglich.........
Ich versuche mit Euren Tipps weiterzukommen.
Kann mir jemand sagen, wo ich die Ländereinstellungen im Excel finde? -oder wie ich die umstellen kann?
Danke und viele Grüße

Anzeige
AW: Versuch
09.09.2015 11:36:05
Gerd
Hallo
Excel-Optionen--Häufig verwendet---Spracheinstellungen.
Gruß Gerd

AW: Versuch
10.09.2015 09:13:37
srico
Hallo Gerd,
danke, aber da kann ich nur die BearbeitungsSprache umstellen, nicht die Länderkennzeichnung.
VG
;
Anzeige
Anzeige

Infobox / Tutorial

Nachkommastellen in Excel: Korrekte Anzeige und häufige Probleme


Schritt-für-Schritt-Anleitung

  1. Überprüfe die Ländereinstellungen in Excel:

    • Gehe zu Excel-Optionen -> Häufig verwendet -> Spracheinstellungen.
    • Stelle sicher, dass die richtigen Ländereinstellungen für deine Region aktiviert sind.
  2. Anpassung des VBA-Codes:

    • Ersetze die Zeile ActiveCell.Value = hp_daten(ii) durch ActiveCell.FormulaLocal = hp_daten(ii), um sicherzustellen, dass Excel die deutschen Formate anwendet.
  3. Verwendung von CDbl:

    • Ändere die Zuweisung in der Schleife, um sicherzustellen, dass die Werte als Zahlen interpretiert werden:
      hp_daten(ii) = CDbl(Cells(ze, ii).Text)
  4. Test des Makros:

    • Führe das Makro erneut aus und überprüfe, ob die Nachkommastellen nun korrekt angezeigt werden.

Häufige Fehler und Lösungen

  • Falsche Anzeige von Nachkommastellen:

    • Wenn Zahlen mit mehr als 3 Nachkommastellen falsch angezeigt werden, könnte das an den Ländereinstellungen oder der Formatierung innerhalb von Excel liegen. Stelle sicher, dass die Ländereinstellungen korrekt sind.
  • Fehlerhafte Zuweisung im VBA:

    • Achte darauf, dass die Zuweisung der Werte in den Zellen nicht durch falsche Formatierungen beeinflusst wird. Verwende CDbl zur korrekten Umwandlung von Text in Zahl.

Alternative Methoden

  • Direkte Eingabe von Werten:

    • Wenn Du Werte manuell eingibst, achte darauf, dass Du das richtige Zeichen für Dezimalstellen verwendest, je nach Deinen Ländereinstellungen (z.B. Punkt oder Komma).
  • Vorverarbeitung von Daten:

    • Erwäge, die Quelldaten vor der Übertragung in Excel zu bereinigen, um sicherzustellen, dass sie das richtige Format haben.

Praktische Beispiele

  1. Ein Beispiel für die Anpassung des Codes:

    Sub HP_erstellen()
       Application.ScreenUpdating = False
       Dim hp_daten(300) As Variant
       ...
       For ii = 1 To 300
           hp_daten(ii) = CDbl(Cells(ze, ii).Text) ' Umwandlung in Zahl
           ActiveCell.FormulaLocal = hp_daten(ii)  ' Übertragung im deutschen Format
       Next ii
       ...
       Application.ScreenUpdating = True
    End Sub
  2. Anpassung von Ländereinstellungen in Excel:

    • Gehe zu Datei -> Optionen -> Sprache und wähle die entsprechende Sprache und Region aus.

Tipps für Profis

  • Debugging im VBA:

    • Nutze Debug.Print in deinem VBA-Code, um den Wert der Variablen während der Ausführung zu überprüfen. So kannst Du feststellen, ob die Werte korrekt übergeben werden.
  • Erstellen von Backup-Kopien:

    • Bevor Du Änderungen an deinem VBA-Code vornimmst, erstelle eine Sicherungskopie der Datei, um unerwünschte Auswirkungen zu vermeiden.

FAQ: Häufige Fragen

1. Wie kann ich sicherstellen, dass meine Nachkommastellen korrekt angezeigt werden?
Stelle die Ländereinstellungen in Excel richtig ein und nutze die richtigen VBA-Funktionen wie CDbl und FormulaLocal.

2. Was tun, wenn die Änderungen im VBA keinen Effekt haben?
Überprüfe den gesamten Code auf mögliche Fehler oder Inkonsistenzen und teste die Änderungen schrittweise.

3. Wie kann ich die Ländereinstellungen in Excel ändern?
Gehe zu Datei -> Optionen -> Häufig verwendet und passe die Spracheinstellungen entsprechend an.

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