Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Excel VBA "Zahlen" aus Zellen auslesen und nutzen

Excel VBA "Zahlen" aus Zellen auslesen und nutzen
11.10.2018 16:56:35
SteinApfel
Hey ;)
Ich habe ein Problem mit der Verwendung von Zahlen aus Zellen.
Bsp:
Die Zelle B35 hat 2,5 und B38 0,6 drin stehen.
In VBA werden diese jetzt als String erkannt, eine Zeichenkette, aber nicht als Wert.
Ich würde gerne aus dem Komma ein Punkt machen und ebenso mit den Tatsächlich eingegebenen Werten rechnen. Es soll nach wie vor möglich sein die Zahlen mit dem Numbpad einzugeben, also auch mit Komma.
Mein Versuch:
Public Sub CalcEinfach()
'an anderer Stelle in einem Modul sind WindA und WindI als Public as String deklariert.
With Tabelle1
WindA = .range("WindA")
WindI = .range("WindI")
WindA = CDbl(WindA)
WindA = Replace(WindA, ",", ".")
'oder eben direkt kombiniert
WindI = Replace(CDbl(WindI), ",", ".")
End With
End Sub

Ich habe auch die Reihenfolge verändert, dass ich erst Replace gemacht habe und dann CDbl(WindA)
Aber egal wie herum oder in welcher Kombination, es kommt entweder ein ungültiger Wert heraus bzw immer noch ein String oder es wird umgewandelt in eine Zahl, dann aber nicht 2.5 sondern 25 und statt 0.6 wird 6 daraus.
Könnte mir da bitte jemand helfen? Ich komme mit meinen Fähigkeiten und Suchmaschinen nicht mehr weiter... -.-
Vielen Dank für die Bemühungen im Voraus! :)
Gruß
SteinApfel :D
Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Excel VBA "Zahlen" aus Zellen auslesen und nutzen
11.10.2018 17:11:06
ChrisL
Hi
Solange die Variable als String deklariert wurde, bleibt das Ergebnis ein String.
darum...
Dim WindA As Double
WindA = .range("WindA").Value

Ansonsten:
- Welches Dezimaltrennzeichen wurde in den Systemeinstellungen definiert?
- Steht in der Zelle eine Zahl oder Text der wie eine Zahl aussieht (z.B. mit Formel =ISTZAHL() prüfbar)?
- Gibt es Import-Themen aus Text-Datei z.B. von *.csv? (Lösung Local=True/False)
cu
Chris
Anzeige
AW: Excel VBA "Zahlen" aus Zellen auslesen und nutzen
11.10.2018 17:44:49
SteinApfel
Okay, mit WindI as Double sowie WindA und range("WindI oder WindA").value rechnet VBA jetzt immerhin vernünftig.
Die Eingabe sowie Ausgabe sind Kommadezimalzahlen, ebenso ist das im System eingestellt.
Also die Zellen habe ich als Zahl formatiert, somit sollte auch eine Zahl drin stehen.
Ich bin nur davon ausgegangen, da VBA an sich mit Punktdezimalzahlen rechnet, dass es in diesem Fall wieder so sei. Aber da habe ich mich wohl geirrt. Es wird alles mit Komma gerechnet.
Import gibt es nichts, ich öffne die Mappe, gehe auf die Tabelle und gebe jedes mal manuell die Zahlen ein. Es wird nichts eingelesen oder so.
Anzeige
AW: Excel VBA "Zahlen" aus Zellen auslesen und nutzen
11.10.2018 17:55:09
ChrisL
Hi
Du hast dich nicht geirrt. VBA rechnet intern mit Punkt z.B.
Dim x As Double
x = 1
x = x + 0.5
MsgBox x
Aber solange in der Zelle ein echter Zahlenwert steht, wird auch direkt ein Wert/Value übernommen, unabhängig von der Formatierung.
Etwas mehr Aufmerksamkeit braucht es bei Text-Datei Export/Import.
cu
Chris
Anzeige
AW: Excel VBA "Zahlen" aus Zellen auslesen und nutzen
11.10.2018 18:56:53
SteinApfel
Alles klar, danke für die Informationen. :)
Bin froh, dass VBA jetzt rechnet und das sogar richtig :D
Schönen Abend noch.

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Excel VBA: Zahlen aus Zellen auslesen und nutzen


Schritt-für-Schritt-Anleitung

  1. Variable deklarieren: Stelle sicher, dass du deine Variablen korrekt deklarierst. Wenn du mit Zahlen arbeiten möchtest, solltest du Double verwenden, nicht String. Beispiel:

    Dim WindA As Double
    Dim WindI As Double
  2. Wert aus Zelle auslesen: Um den Wert aus einer Zelle auszulesen, nutze die .Value-Eigenschaft. Beispiel:

    WindA = Tabelle1.Range("B35").Value
    WindI = Tabelle1.Range("B38").Value
  3. Dezimaltrennzeichen anpassen: Wenn die Zahlen als String erkannt werden, kannst du das Komma durch einen Punkt ersetzen. Verwende Replace:

    WindA = Replace(WindA, ",", ".")
    WindI = Replace(WindI, ",", ".")
  4. Umwandlung in Double: Führe die Umwandlung in Double durch:

    WindA = CDbl(WindA)
    WindI = CDbl(WindI)
  5. Berechnung durchführen: Jetzt kannst du mit WindA und WindI rechnen.


Häufige Fehler und Lösungen

  • Fehler: Wert als String: Wenn du einen Wert als String ausliest, wird die Berechnung fehlschlagen. Stelle sicher, dass du Double verwendest.

  • Fehler: Falsches Dezimaltrennzeichen: Überprüfe die Systemeinstellungen für das Dezimaltrennzeichen. VBA rechnet mit Punkt, aber die Eingabe kann mit Komma erfolgen.

  • Fehler: Zelleninhalt nicht als Zahl: Achte darauf, dass der Inhalt der Zelle tatsächlich eine Zahl und kein Text ist. Du kannst dies mit der Funktion ISTZAHL() überprüfen.


Alternative Methoden

  • Direktes Auslesen: Du kannst den Wert auch direkt als Double auslesen:

    WindA = Tabelle1.Range("B35").Value
  • VBA Makro zum Auslesen: Erstelle ein Makro, um den Wert aus einer Zelle auszulesen und in eine andere Zelle einzufügen:

    Sub WertAusZelleAuslesen()
        Dim Wert As Double
        Wert = Tabelle1.Range("B35").Value
        Tabelle1.Range("C35").Value = Wert
    End Sub

Praktische Beispiele

Hier ist ein einfaches Beispiel, wie du den Inhalt einer Zelle auslesen und berechnen kannst:

Public Sub Berechnung()
    Dim WindA As Double
    Dim WindI As Double

    WindA = CDbl(Replace(Tabelle1.Range("B35").Value, ",", "."))
    WindI = CDbl(Replace(Tabelle1.Range("B38").Value, ",", "."))

    MsgBox "Das Ergebnis ist: " & (WindA + WindI)
End Sub

Tipps für Profis

  • Eingaben validieren: Füge Validierungen ein, um sicherzustellen, dass nur Zahlen eingegeben werden. Dies kannst du mit IsNumeric() tun.

  • Fehlerbehandlung: Implementiere Fehlerbehandlung, um unerwartete Eingaben oder Berechnungsfehler abzufangen:

    On Error GoTo Fehlerbehandlung
    ' Dein Code hier
    Exit Sub
    
    Fehlerbehandlung:
        MsgBox "Ein Fehler ist aufgetreten."
  • Effiziente Nutzung von Arrays: Wenn du mit vielen Zellen arbeitest, überlege, ob du die Werte in ein Array laden und dann verarbeiten kannst, um die Performance zu verbessern.


FAQ: Häufige Fragen

1. Wie kann ich den Inhalt einer Zelle als Text auslesen?
Verwende die .Text-Eigenschaft, um den Textinhalt einer Zelle auszulesen:

Dim TextInhalt As String
TextInhalt = Tabelle1.Range("B35").Text

2. Was ist der Unterschied zwischen .Value und .Text?
.Value gibt den tatsächlichen Wert der Zelle zurück, während .Text den formatierten Text zurückgibt, wie er in der Zelle angezeigt wird.

3. Wie kann ich mehrere Zellen gleichzeitig auslesen?
Du kannst ein Array verwenden, um mehrere Zellen gleichzeitig auszulesen:

Dim Werte() As Variant
Werte = Tabelle1.Range("B35:B38").Value

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige