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

Problem mit Val und Kommazahlen...

Forumthread: Problem mit Val und Kommazahlen...

Problem mit Val und Kommazahlen...
15.12.2003 07:30:21
Alexej
Guten Morgen allerseits,

Ich habe hier ein Stueckchen Code, der eine Berechnung durchfuehrt. Dabei ist es jedoch unangenehm aufgefallen, dass Excel nur Kommazahlen bearbeitet, die mit einem Punkt getrennt wurden (z.B. 123.44). Wenn die Zahl mit Komma getrennt wurde (z.B. 123,44), dann betrachtet er die Zahl als ganzes. Wie muss ich diesen Code aendern, sodass er sowohl mit Punkt, als auch mit Komma, als Trennzeichen arbeitet?

Viele Gruesse aus bitterkalten Moskau,
Alexej

PS: Meiner Meinung nach, liegt es an der "Val" Bezeichnung...


Sub CalcFootnote()
Dim sWsh As Worksheet
Dim i As Integer
Dim lSumL As Long
Dim rCell As Range
sumoffset = 57
ThisWorkbook.Worksheets("Èòîã").Range("$F$176").Value = 0 ' Z
lSumL = 0
For i = 1 To Range("Znumberofcontracts").Value
lSumL = lSumL + ThisWorkbook.Worksheets("Äîã. " + CStr(i) + " ëèñò 1").Range("AR249").Value
If Not IsError(ThisWorkbook.Worksheets("Äîã. " + CStr(i) + " ëèñò 1").Range("AN80").Value) Then
ThisWorkbook.Worksheets("Èòîã").Range("$F$176").Value = _
ThisWorkbook.Worksheets("Èòîã").Range("$F$176").Value + _
ThisWorkbook.Worksheets("Äîã. " + CStr(i) + " ëèñò 1").Range("AR249").Value * _
ThisWorkbook.Worksheets("Äîã. " + CStr(i) + " ëèñò 1").Range("AN80").Value
End If
Next
If lSumL <> 0 Then
ThisWorkbook.Worksheets("Èòîã").Range("$F$176").Value = _
ThisWorkbook.Worksheets("Èòîã").Range("$F$176").Value / lSumL
Else
ThisWorkbook.Worksheets("Èòîã").Range("$F$176").Value = 0
End If
For Each rCell In ThisWorkbook.Worksheets("Èòîã").Range("$D$168:$F$175") ' a-s, ñóììàðíûé
If rCell.Interior.ColorIndex = 37 Then
rCell.Value = 0
For i = 1 To Range("Znumberofcontracts").Value
If Not IsError(ThisWorkbook.Worksheets("Äîã. " + CStr(i) + " èòîã").Cells(rCell.Row + sumoffset, rCell.Column).Value) Then
rCell.Value = rCell.Value + Val(ThisWorkbook.Worksheets("Äîã. " + CStr(i) + " èòîã").Cells(rCell.Row + sumoffset, rCell.Column).Value)
End If
Next i
End If
Next
For Each rCell In ThisWorkbook.Worksheets("Èòîã").Range("$F$180:$L$185") ' a-s, ñóììàðíûé
rCell.Value = 0
For i = 1 To Range("Znumberofcontracts").Value
rCell.Value = rCell.Value + ThisWorkbook.Worksheets("Äîã. " + CStr(i) + " èòîã").Cells(rCell.Row + sumoffset - 1, rCell.Column).Value
Next i
Next
End Sub

Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Nachtrag...
15.12.2003 08:44:33
Alexej
Also, nachdem ich etwas rumgewerkelt habe, hat sich folgendes ergeben.

Wenn ich anstatt der Val Funktion die Cdbl Funktion benutze und in den Laendereinstellungen "." als Dezimaltrennzeichen benutze, dann funktioniert alles einwandfrei, Excel arbeitet mit beiden Trennzeichen "." und ",", er wandelt jedoch alle "," in "." um. Wenn ich jedoch "," in den Laendereinstellungen einstelle, dann funktioniert es nicht. Wie kann ich es so einstellen, dass er beides akzeptiert, als Haupttrennzeichen jedoch "," benutzt.

Gruesse,
Alexej
Anzeige
AW: Nachtrag...
15.12.2003 09:43:39
RAnton
Hallo Alexej,
da hast du wohl einen wunden Punkt von Excel getroffen.
Es ist immer abhängig von der Ländereinstellung, ob du Punkt oder Komma als Dezimaltrennzeichnung hast.
Wie du ja schon herausgefunden hast, kannst du die Val-Funktion verwenden. Diese verwende ich auch und habe bisher keine Probleme mehr.
Wo liegt dein Problem wenn du Val verwendest?

Gruß
RAnton
Anzeige
AW: Nachtrag...
15.12.2003 11:00:00
Alexej
Hallo RAnton,

Das Problem ist, dass wenn in den Laendereinstellungen "," als Trennzeichen eingestellt ist und ich die Daten mittels der Val Funktion auslese, so schneidet die Funktion bei Zahlen, die "." als Trennzeichen haben, alles ab, was sich nach dem Punkt befindet. Unmoeglich sowas aber auch :((

Ich versuche es z.Z. mit Zwischenloesungen zu klaeren, da es wohl den Anschein hat, das es ein Manko von Excel ist :(
Anzeige
;
Anzeige

Infobox / Tutorial

Umgang mit Kommazahlen in Excel: Val und VBA


Schritt-für-Schritt-Anleitung

Um in Excel mit Kommazahlen zu arbeiten, die sowohl mit Punkt als auch mit Komma getrennt sind, kannst Du folgende Schritte befolgen:

  1. Ländereinstellungen überprüfen:

    • Stelle sicher, dass die Ländereinstellungen Deines Excel-Dokuments korrekt sind. Dies kannst Du unter Datei > Optionen > Erweitert > Bearbeitungsoptionen finden.
    • Wähle das gewünschte Dezimaltrennzeichen. In vielen europäischen Ländern wird das Komma verwendet.
  2. Anpassen des VBA-Codes:

    • Wenn Du mit VBA arbeitest und die Val-Funktion verwendest, beachte, dass sie nur das Punkt-Zeichen korrekt interpretiert. Um dies zu umgehen, kannst Du die Cdbl-Funktion verwenden, die flexibler im Umgang mit Kommazahlen ist.
  3. Beispiel-Code anpassen:

    • Ersetze in Deinem VBA-Code die Zeile, die die Val-Funktion nutzt, durch Cdbl. Hier ein Beispiel:
      rCell.Value = rCell.Value + Cdbl(ThisWorkbook.Worksheets("Sheetname").Cells(rCell.Row + sumoffset, rCell.Column).Value)
    • Diese Änderung ermöglicht es Excel, sowohl Komma- als auch Punkt-Zeichen zu erkennen.

Häufige Fehler und Lösungen

  • Fehler: Val schneidet nach Punkt ab:

    • Wenn Du die Val-Funktion verwendest und dabei Kommazahlen mit Punkt trennst, wird alles nach dem Punkt abgeschnitten. Die Lösung ist, Cdbl zu verwenden, um die gesamte Zahl korrekt zu erfassen.
  • Fehler: Excel erkennt Kommazahlen nicht:

    • Überprüfe die Ländereinstellungen, um sicherzustellen, dass das richtige Dezimaltrennzeichen konfiguriert ist.

Alternative Methoden

  • Du kannst auch die Text-Funktion verwenden, um Excel-Textketten mit Komma in Zahlen umzuwandeln. Beispiel:
    Dim myNum As Double
    myNum = CDbl(Replace("123,45", ",", "."))

    Diese Methode ersetzt das Komma durch einen Punkt, bevor die Umwandlung stattfindet.


Praktische Beispiele

Hier ist ein einfaches Beispiel für den Einsatz von VBA Val:

Sub BeispielVal()
    Dim myValue As String
    myValue = "123,45"
    ' Umwandlung der Textkette mit Komma in eine Zahl
    MsgBox Cdbl(Replace(myValue, ",", "."))
End Sub

In diesem Beispiel wird die Excel-Textkette mit Komma erfolgreich in eine Zahl umgewandelt, die Excel verarbeiten kann.


Tipps für Profis

  • Wenn Du regelmäßig mit Excel Kommazahlen arbeitest, nutze die Application.DecimalSeparator-Eigenschaft, um das Dezimaltrennzeichen programmatisch zu ändern.
  • Halte Deine Ländereinstellungen konsistent, um unerwartete Probleme bei der Datenverarbeitung zu vermeiden.

FAQ: Häufige Fragen

1. Warum funktioniert die Val-Funktion nicht mit Kommazahlen?
Die Val-Funktion erkennt nur das Punkt-Zeichen als Dezimaltrennzeichen. Verwende stattdessen Cdbl, um sowohl Kommas als auch Punkte zu verarbeiten.

2. Wie kann ich sicherstellen, dass Excel beide Trennzeichen akzeptiert?
Stelle in den Ländereinstellungen sicher, dass das Komma als Haupttrennzeichen eingestellt ist. Nutze dann Cdbl oder Replace, um die Zahlen korrekt zu formatieren.

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