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

Forumthread: Fehlermeldung durch 0-Division in VBA vermeiden?

Fehlermeldung durch 0-Division in VBA vermeiden?
21.03.2006 21:17:52
Matthias
Hallo,
wie kann ich bei der folgenden Formel in VBA die Fehlermeldung der 0-Division vermeiden?
"=VAR!RC" & intZaehler & "/VAR!RC" & intNenner & " -1"
Ich dachte an eine Fehlervermeidung mit ISTFEHLER; aber irgendwie haut das nicht so hin?!?
Gruß Matthias
Anzeige

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

Betreff
Datum
Anwender
Anzeige
Zusätzliche Info
21.03.2006 22:18:17
Matthias
Hallo,
was ich noch anmerken wollte:
ich möchte die Fehlermeldung "#DIV/0!" vermeiden die erscheint, wenn die Zahl in "VAR!RC" & intZaehler" eine Null ist, die ich durch "VAR!RC" & intNenner" teile! Durch welchen Befehl kann ich dies in VBA verhindern?
Gruß Matthias
AW: Zusätzliche Info
21.03.2006 22:27:02
Sigi
Hallo Matthias,
da reicht doch ein ´"If ... then ... else ..."
If VAR!RC = 0 OR intZaehler = 0 then
'dies
else
'deine Formel
endif
Gruß
Sigi
Anzeige
Klappt nicht!
21.03.2006 22:40:49
Matthias
hallo,
ich habs so umgebaut, aber irgendwie wills nicht klappen:
For i = 0 To UBound(Arr)
If "VAR!RC" & intZaehler = 0 Or "VAR!RC" & intNenner = 0 Then
shVARCOL.Cells(Arr(i), intSpalteVARCOL).FormulaR1C1 = 0
Else
shVARCOL.Cells(Arr(i), intSpalteVARCOL).FormulaR1C1 = _
"=VAR!RC" & intZaehler & "/VAR!RC" & intNenner & " -1"
End If
Next i
wo liegt da der Fehler?
Anzeige
AW: Klappt nicht! Und das ist auch kein Wunder...
22.03.2006 03:53:20
Luc:-?
..., Matthias!
Was soll denn bei If "VAR!RC" & intZaehler = 0 Or "VAR!RC" & intNenner = 0 Then herauskommen? Wenn die Variablen intZaehler und intNenner beide bspw den Wert 0 haben, würde der If-VglBefehl so lauten:
If "VAR!RC0" = 0 Or "VAR!RC0" = 0 Then
Man sieht wohl sehr deutlich, dass du fragst, ob 2 Zeichenketten jeweils den Wert 0 haben! Egal, was in deinen Variablen steht, dieser Vgl ist immer True oder führt zu einem Datentypfehler.
Des weiteren entnehme ich deinem VBA-Versuch, dass es offensichtlich nicht unbedingt erforderlich ist, eine Formel in die Zellen einzutragen, sonst könntest du auch im Falle von 0 nicht auf eine verzichten. Wenn du nicht auf die Formel verzichten willst, muss das Prüfen des Nenners nicht des Zählers (der kann wie allgemein bekannt jeden Wert haben - 0/0 ist genauso verboten wie 1/0, aber 0/1=0) in der in die Zellen einzutragenden Formel erfolgen. Ansonsten kannst du ganz auf den Formelkram verzichten, alles in VBA ausrechnen und nur das Ergebnis eintragen. Du solltest dich mal etwas intensiver mit der VBA-Online-Hilfe befassen ({F1} im Editor), bevor du dich mit so etwas befasst (Referenzierung von Zellen). Übrigens ist die Verwendung der Z1S1(=R1C1)-Schreibweise nur sinnvoll, wenn dein xl auch darauf eingestellt ist. Du musst hier den Recorder nicht kopieren. Deutsche Formeln weist man ...FormulaLocal, englische ...Formula zu. Um Zellen zu referenzieren, verwendet man entweder Cells(...) mit Zeilen- und/oder Spaltenindex oder Range("...") mit Bereichsangabe als Text.
Wenn du dir dann überlegt hast, was du eigentlich machen willst, kannst du dich ja wieder melden. Dein Problem ist auch für einen VBA-Anfänger eine ziemlich leichte Übung. Allerdings sollte der dann auch schon ein gewisses Programmierverständnis haben.
Alternativ kannst du dir ja auch, da du ja wenigstens in xl GUT sein willst, eine fkt xlFormel zusammenbauen, die #DIV/0! berücksichtigt (z.B. mit WENN) und die dann als Text der entsprechenden Zelleneigenschaft zuweisen (Verdopplung "" interner " beachten!).
Gruß Luc :-?
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Fehlermeldung durch 0-Division in VBA vermeiden


Schritt-für-Schritt-Anleitung

Um die Fehlermeldung "#DIV/0!" in VBA zu vermeiden, kannst du eine einfache Fehlerbehandlung implementieren. Hier ist eine Schritt-für-Schritt-Anleitung:

  1. Überprüfe die Werte: Stelle sicher, dass der Nenner nicht null ist, bevor du die Division durchführst.
  2. Nutze die If-Anweisung: Implementiere eine If-Bedingung, um die Division nur durchzuführen, wenn der Nenner ungleich null ist.

Hier ist ein Beispielcode:

For i = 0 To UBound(Arr)
    If shVARCOL.Cells(Arr(i), intSpalteVARCOL).Value = 0 Or intNenner = 0 Then
        shVARCOL.Cells(Arr(i), intSpalteVARCOL).Value = 0 ' oder eine andere Standardwertsetzung
    Else
        shVARCOL.Cells(Arr(i), intSpalteVARCOL).FormulaR1C1 = "=VAR!RC" & intZaehler & "/VAR!RC" & intNenner & " - 1"
    End If
Next i

Durch diese Überprüfung wird die Division durch null umgangen und die Fehlermeldung "#DIV/0!" nicht angezeigt.


Häufige Fehler und Lösungen

  1. Fehlerhafte Zellreferenzen: Achte darauf, dass die Zellreferenzen korrekt angegeben sind. Ansonsten wird der Code immer einen Fehler ausgeben.
  2. Datentypfehler: Stelle sicher, dass die verwendeten Variablen den richtigen Datentyp haben. Zum Beispiel sollten die Zähler und Nenner als Zahlen definiert sein.
  3. Verwendung von Strings: Wenn du "VAR!RC" mit Variablen kombinierst, stelle sicher, dass du sie korrekt referenzierst. Verwende beispielsweise shVARCOL.Cells(Arr(i), intSpalteVARCOL).Value, um den Wert zu prüfen.

Alternative Methoden

  • Verwendung von WENN-Funktionen: Du kannst in Excel selbst die WENN-Funktion verwenden, um Fehler durch Division durch null zu vermeiden. Zum Beispiel:
=WENN(VAR!RC[intZaehler]=0; 0; VAR!RC[intZaehler]/VAR!RC[intNenner])
  • Fehlerabfang in VBA: Du kannst auch die On Error-Anweisung verwenden, um alle Arten von Fehlern abzufangen, aber das ist weniger spezifisch für die Division durch null.

Praktische Beispiele

  1. Division mit Rest: Wenn du eine Division mit Rest durchführen möchtest, kannst du die Modulo-Funktion verwenden:
Dim rest As Integer
rest = intZaehler Mod intNenner ' gibt den Rest der Division zurück
  1. Anwendung auf Arbeitsblatt: Wenn du die Division auf ein Arbeitsblatt anwenden möchtest, kannst du den Wert direkt so setzen:
shVARCOL.Cells(Arr(i), intSpalteVARCOL).Value = shVARCOL.Cells(Arr(i), intSpalteVARCOL).Value / intNenner

Das sorgt dafür, dass du die Division durch null abfängst, bevor du den Wert aktualisierst.


Tipps für Profis

  • Debugging: Nutze die Debugging-Funktion in VBA, um den Code Schritt für Schritt zu durchlaufen und die Werte der Variablen zu überprüfen.
  • Modularer Code: Erstelle separate Funktionen für häufige Berechnungen, um deinen Code modular und leichter wartbar zu halten.
  • Fehlerprotokollierung: Implementiere ein einfaches Protokoll, um Fehler zu erfassen, die in deinem VBA-Code auftreten können, um diese später zu analysieren.

FAQ: Häufige Fragen

1. Wie kann ich sicherstellen, dass ich keine Division durch null habe?
Verwende eine If-Bedingung, um den Nenner auf null zu überprüfen, bevor du die Division durchführst.

2. Gibt es eine Möglichkeit, die Fehlermeldung "#DIV/0!" in Excel zu verhindern?
Ja, du kannst die WENN-Funktion verwenden oder die Division in VBA abfangen, um die Fehlermeldung zu vermeiden.

3. Was passiert, wenn ich 0 durch 0 teile?
Das führt immer zur Fehlermeldung "#DIV/0!" in Excel. Daher ist es wichtig, die Berechnung vorher zu überprüfen.

4. Wie kann ich in VBA Divisionen mit Rest durchführen?
Verwende die Modulo-Funktion, um den Rest einer Division zu ermitteln.

5. Welche Excel-Version benötige ich für VBA?
VBA ist in den meisten modernen Versionen von Excel verfügbar, einschließlich Excel 2010 und neuer.

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