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

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

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

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

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.

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

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

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

179 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige