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

Forumthread: VBA Zahlen mit Nachkommastellen

VBA Zahlen mit Nachkommastellen
11.09.2017 10:42:37
Jens
Hallo zusammen,
ich habe folgendes Problem mit meinem Excel Makro.
Ich lese aus einem Tabellenblatt bestimmte Werte aus und möchte diese auf dem ersten Tabellenblatt gesammelt schreiben.
An sich funktioniert das ganze auch, jedoch werden Werte mit Nachkommastellen im ersten Blatt falsch (auf Engl.) geschrieben. D.h. mit Punkten.
VBA verarbeitet diese Werte jedoch korrekt. Die Ausgabe mit einer Msgbox z.b. ist korrekt. Erst beim Einfügen in eine Zelle wird es falsch. Wieso ist das so? Wie kann ich das verhindern?
In allen meinen anderen Makros hatte ich dieses Problem bisher nie. Obwohl alle ähnlich aufgebaut.
Kann jemand helfen?
Vielen Dank und grüße
Jens
Anzeige

18
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Beispielmappe bitte. o.w.T.
11.09.2017 10:49:06
Werner
AW: VBA Zahlen mit Nachkommastellen
11.09.2017 10:56:21
Daniel
Hi
kommt darauf an, was du wie genau einfügst.
Grundproblem ist, dass Excel und VBA in der Regel englisch miteinander reden.
Dh wenn ein Text wie "1,234" in eine Zelle geschrieben wird, versucht Excel in der Regel diesen Text in eine Zahl zu wandeln.
Schreibst du das manuell in die Zelle, geht Excel davon aus dass die Landestypische Zahlenschreibweise anzuwenden ist und das Komma das Dezimalzeichen ist.
Schreibt jedoch VBA das in die Zelle, dann geht Excel davon aus das die amerikanische Schreibweise anzuwenden ist und das Komma das Tausendertrennzeichen ist.
Gruß Daniel
Anzeige
AW: Bitte Beispielmappe mit Code m.r.T
11.09.2017 11:17:43
Gerd
Hallo Jens!
Es kommt stets darauf an, auf jenes u. anderes.
Deshalb ist hier eine hochgeladene Datei zielführender als Spekulation.
Gruß Gerd
AW: Bitte Beispielmappe mit Code m.r.T
11.09.2017 12:32:49
Jens
Warum es das Thema jetzt mehrere Male gibt weiß ich nicht. Habe lediglich nachgeschaut ob es bereits antworten gibt. Hatte dafür aber das Antwortformular die ganze Zeit im Hintergrund auf... kann es sein, dass das bei F5 neu einstellt?
So zurück zum Thema:
Wenn ich das Beispiel wie von Daniel erwähnt als einzelnes in einer neuen Arbeitsmappe ausführe, funktioniert es. Es wird tadellos das eingefügt was ich auch auslese.
In dem Makro, in dem ich z.Z. arbeite tut es das allerdings nicht.
Ich werde sofort eine Beispieldatei hochladen, macht glaube ich tatsächlich am meisten Sinn.
Anzeige
AW: VBA Zahlen mit Nachkommastellen
11.09.2017 12:43:14
Jens

Die Datei https://www.herber.de/bbs/user/116152.xlsm wurde aus Datenschutzgründen gelöscht


Anbei die Beispielmappe mit Code. Habe den Inhalt allerdings abgespeckt.
Bei Betätigen des Buttons sollen die Suchkenner rechts F4-10 auf den Seiten 1-4 gesucht werden und die passenden Werte auf der ersten Seite in Spalte C zurück gegeben werden.
Anzeige
AW: VBA Zahlen mit Nachkommastellen
11.09.2017 12:45:25
Jens
Ok, ich muss da glaub ich noch was checken. Bei der heruntergeladenen Datei funktioniert garnichts mehr.
AW: VBA Zahlen mit Nachkommastellen
11.09.2017 13:07:39
Gerd
Hallo Jens,
kaum macht man es richtig, schon funktionierts oder ? :-)
'Funktion gibt Wert der Suchvariable zurück
Function Get_Value(Value As String) As Double
Gruß Gerd
Anzeige
AW: VBA Zahlen mit Nachkommastellen
11.09.2017 13:10:18
Werner
Hall Jens,
mit Formel im Blatt GA_Values Zelle C4 und nach unten kopieren:
=WENN(ISTFEHLER(SVERWEIS(F4;INDIREKT("'"&INDEX({"1";"2";"3";"4"};VERGLEICH(1; (ZÄHLENWENN(INDIREKT("'"&{"1";"2";"3";"4"}&"'!A:A");F4)>0)+0;0))&"'!A:C");3;0));"";SVERWEIS(F4; INDIREKT("'"&INDEX({"1";"2";"3";"4"};VERGLEICH(1;(ZÄHLENWENN(INDIREKT("'"&{"1";"2";"3";"4"}&"'!A:A"); F4)>0)+0;0))&"'!A:C");3;0))
Die Zeilenumbrücke raus nehmen.
Gruß Werner
Anzeige
AW: VBA Zahlen mit Nachkommastellen
11.09.2017 13:17:17
Jens
Hallo Gerd,
danke für deine Antwort. In meiner Beispieldatei funktioniert es tatsächlich.
Ich hatte allerdings absichtlich String genommen, da nicht alle Zellen Zahlenwerte enthalten.
Wie kann ich nun double oder String zurück geben, je nach dem was in der Zelle steht... geht das überhaupt?
Anzeige
AW: VBA Zahlen mit Nachkommastellen
11.09.2017 13:18:43
Jens
Ok, geschafft. Variant funktioniert!
Danke!!! Dafür habe ich jetzt so lange gesucht.... :D
AW: VBA Zahlen mit Nachkommastellen
12.09.2017 09:32:13
Jens
Ich habe heute noch eine nachfolge-Frage:
Ich habe nun die Blätter "1-4" automatisch einlesen lassen. Diese sind jedoch als csv im englischen Format, also mit "." als Dezimaltrennzeichen. Soweit so gut.
Wenn ich dann die Routine von gestern durchlaufen lasse habe ich zwei Probleme.
1. Zeiten in hh:mm werden auf einmal dezimal dargestellt
2. wie kann ich die Werte wieder mit Komma darstellen. Mit replace funktioniert es leider nicht, dann habe ich alle 3 Stellen ein Komma, wo keins hingehört.
Zusätzlich habe ich noch eine andere Frage:
Beim einlesen der Daten aus den anderen Dateien dauert das schließen der zuvor geöffneten Dateien sehr lange. Ist das normal? Kann man das ggf. beschleunigen?
Anzeige
AW: VBA Zahlen mit Nachkommastellen
12.09.2017 10:05:40
Daniel
Hi
wenn du CSV-Datei über die Import-Funktion in eine Exceltabelle einliest (Daten - externe Daten - aus Text) kannst du detailliert einstellen, wie die Daten vorliegen, dh Trennzeichen, Dezimalzeichen, Uhrzeitformat.
Dies geschieht über einens Assistenten.
Wenn du hier die passenden Einstellungen machst, sollte deine Datei korrekt importiert werden und das unabhängig von der Länderversion, mit der du gerade arbeitest.
um den Import dann per VBA ausführen zu lassen, importiere einmal manuell und zeichne mit dem Recorder auf.
Gruß Daniel
Anzeige
AW: VBA Zahlen mit Nachkommastellen
12.09.2017 10:09:44
Jens
Die Idee mit dem Recorder ist nicht schlecht. Werde ich testen.
Über den Assistenten geht's klar. Über das Script bisher auch, nur die Einstellungen kann ich vorgeben wie ich will und es kommt nie das dabei raus, wie es der Assistent ausgibt.
AW: VBA Zahlen mit Nachkommastellen
12.09.2017 10:24:16
Jens
Jetzt spinnt mein System komplett.
Es klappt nicht mal mehr wenn ich es per Hand mache, kommt nur noch Mist bei raus. Kann man das System über Excel(VBA) überhaupt so verwirren?
Anzeige
AW: VBA Zahlen mit Nachkommastellen
12.09.2017 10:58:04
Jens
So System ist wieder i.o.
Scheinbar merkt sich Excel per VBA verstellte Einstellungen, auch über Schließen und sogar Neustart hinaus.
Habe das Makro nun mit einem Recorder aufgezeichnet, habe nun aber das Problem, dass der Pfad fix ist, da ich mehrere und verschiedene Dateien einlesen muss ich hier eine Variable angeben. Das bekomme ich jedoch nicht hin. Bekomme immer einen Error.
With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;" & f, _
Destination:=Range("$A$1"))
f beinhaltet den kompletten Pfad inkl. Dateiendung... warum klappt das nicht?
Anzeige
AW: VBA Zahlen mit Nachkommastellen
12.09.2017 11:22:32
Jens
Das Problem hat sich nun erledigt. Mein Fehler. Hab es im WS abgelegt und nicht im Modul.
Bleibt mein letztes Problem:
Zeiten in hh:mm werden nach kopieren als Dezimalstellen dargestellt... Ideen?
Vielen Dank für den Tipp mit dem Recorder!
AW: VBA Zahlen mit Nachkommastellen
12.09.2017 11:32:03
Jens
erledigt
;
Anzeige
Anzeige

Infobox / Tutorial

VBA Zahlen mit Nachkommastellen korrekt verarbeiten


Schritt-für-Schritt-Anleitung

  1. VBA Editor öffnen: Drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Modul hinzufügen: Klicke mit der rechten Maustaste auf dein Projekt im Projektfenster und wähle Einfügen > Modul.

  3. Code einfügen: Füge den folgenden Code ein, um sicherzustellen, dass Zahlen korrekt mit Nachkommastellen in Zellen eingefügt werden:

    Function Get_Value(Value As String) As Variant
       If IsNumeric(Value) Then
           Get_Value = CDbl(Value) ' Konvertiert in Double für Dezimalstellen
       Else
           Get_Value = Value ' Gibt den String zurück, wenn nicht numerisch
       End If
    End Function
  4. Zahlenformat anpassen: Stelle sicher, dass du das richtige Zahlenformat in Excel verwendest. Du kannst das Format anpassen, indem du die Zelle auswählst und dann über Start > Zahlenformat das gewünschte Format auswählst.

  5. Testen: Führe dein Makro aus und überprüfe, ob die Zahlen nun korrekt mit Komma anstelle von Punkt in die Zellen eingefügt werden.


Häufige Fehler und Lösungen

  • Problem: Zahlen werden mit Punkten statt mit Kommas angezeigt.

    • Lösung: Verwende die Funktion CDbl() im VBA-Code, um sicherzustellen, dass die Werte im richtigen Dezimalformat konvertiert werden.
  • Problem: Excel interpretiert Zeitwerte als Dezimalzahlen.

    • Lösung: Stelle sicher, dass du die korrekten Formate für Zeitwerte verwendest. Überprüfe die Formatierung der Zellen in Excel.

Alternative Methoden

  • Import von CSV-Dateien: Wenn du CSV-Dateien importierst, nutze die Importfunktion von Excel (Daten > Externe Daten > Aus Text). Hier kannst du die Trennzeichen und Dezimalzeichen festlegen und sicherstellen, dass die Werte korrekt importiert werden.

  • Manuelle Konvertierung: Eine weitere Möglichkeit besteht darin, Strings mit Replace zu bearbeiten, um Punkte in Kommas umzuwandeln. Achte darauf, nur die Dezimalstellen zu ändern:

    Value = Replace(Value, ".", ",")

Praktische Beispiele

  1. Einfügen von Werten: Verwende den folgenden Code, um Werte in eine Zelle einzufügen:

    Sub InsertValue()
       Dim ws As Worksheet
       Set ws = ThisWorkbook.Sheets("Tabelle1")
       ws.Range("A1").Value = Get_Value("1,234") ' Gibt 1,234 als Zahl ein
    End Sub
  2. Summe nur der Nachkommastellen: Wenn du nur die Nachkommastellen addieren möchtest, kannst du dies mit einer Formel in Excel tun:

    =SUMME(WENN(ISTZAHL(A1:A10);A1:A10-GANZZAHL(A1:A10);0))

    Diese Formel addiert nur die Nachkommastellen der Zellen A1 bis A10.


Tipps für Profis

  • Verwende Variant für flexible Rückgabewerte: Wenn du sowohl Zahlen als auch Strings zurückgeben möchtest, ist Variant eine gute Wahl.
  • Debugging: Setze Haltepunkte im VBA-Editor, um den Code Schritt für Schritt zu durchlaufen und Variablenwerte zu überprüfen.
  • Excel-Optionen: Überprüfe die regionalen Einstellungen deines Excel, um sicherzustellen, dass die richtigen Dezimal- und Tausendertrennzeichen verwendet werden.

FAQ: Häufige Fragen

1. Wie kann ich sicherstellen, dass VBA Kommazahlen korrekt verarbeitet?
Verwende die CDbl()-Funktion, um sicherzustellen, dass die Werte als Double interpretiert werden und die korrekten Dezimalstellen aufweisen.

2. Was ist der Unterschied zwischen String und Double in VBA?
String speichert Text, während Double für Zahlen mit Dezimalstellen verwendet wird. Wenn du unterschiedliche Datentypen zurückgeben möchtest, nutze Variant.

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