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

Forumthread: in VBA Null, "", und 0 richtig erkennen

in VBA Null, "", und 0 richtig erkennen
04.07.2008 19:45:00
Karsten
Hallo VBA Freaks,
in meiner Tipprundentabelle soll allen Mannschaften, die noch nicht gespielt haben, 0 Punkte zugewiesen werden. die Zellen sind als Zahl ohne Dezimalstellen formatiert. Nun versuche ich, genau diese Konstellation abzufragen (Erster teil der If Abfrage). Der zurückgegebene Wert ist aber immer 0. Somit wird dieser Teil der Abfrage immer übersprungen. Hat jemand eine Lösung?
Hier nun die Zeilen meines VBA-Codes (zum Verständnis etwas vereinfacht)
'Bei Spieltagen , die nur zum Teil gespielt sind (Freitag ein Spiel, Samstag 6 Spiele, Sonntag 2 Spiele)
'die Punkte der Mannschaften auf Null setzen, die noch nicht gespielt haben
If IsNull(Zelle1)) Then
Punkte1 = 0
Punkte2 = 0
Else
'Punkte berechnen
If TG1 > TG2 Then Punkte1 = 3
If TG1 If TG1 = TG2 Then
Punkte1 = 1
Punkte2 = 1
End If
End If
Vielen Dank für die Anregungen/Lösungen im Vorraus
Gruß Karsten

Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: in VBA Null, "", und 0 richtig erkennen
04.07.2008 20:04:23
Reinhard
Hi Karsten,

Punkte1 = (1 - 2 * (TG1 > TG2) - 2 * (TG2 > TG1)) * ((Range("A1") * 1  0) * -1)
Punkte2 = Punkte1


Gruß
Reinhard

AW: in VBA Null, "", und 0 richtig erkennen
04.07.2008 20:15:30
Karsten
Hallo Reihard,
ich verstehe diese Formel nicht. Kannst Du das mal inmeinen Code einbauen?
Gruß Karsten

Anzeige
AW: in VBA Null, "", und 0 richtig erkennen
04.07.2008 20:20:08
Reinhard
Hi Karsten,
in deinen Code einbauen geht nicht, der Zweizeiler ersetzt deinen Code
Gruß
Reinhard

AW: in VBA Null, "", und 0 richtig erkennen
04.07.2008 20:50:42
Karsten
Hallo Reinhard,
hier nun etwas ausführlicher.
Ich lese aus bestimmten Zellen die Ergebnisse des aktuellen Bundesligaspieltages aus und übergebe diese an ein Array. Beim Auslesen der Ergebnisse bekomme ich dann für diejenigen Begegnungen , die noch nicht gespielt wurden und ich auch keine Werte im Sheet eingetragen habe immer eine 0 zurück.
Wenn eine Spielpaarung noch nicht stattgefunden hat, dann soll meine VBA-Prozedur 0 Punkte für die Vereine x und Vereine y im Array speichern. Hier speichert mir die VBA-Prozedur aber immer die Ziffer 1. Weil diese beiden Nullen (0) ein Unentschieden vortäuschen, für ein Spiel, welches noch gar nicht stattgefunden hat. Somit wird für beide Vereine eine 1 als Punkt vergeben.
Das soll nicht sein, Ich erwarte hier eine 0 als Punkt für die beiden Vereine.
ich weiß nicht, ob der VBa-Code filfreich ist, aber ich stelle ihn mal zur Verfügung.

Public Function Spieltage_lesen(a, b, c, d, f)
'Spieltage 1 bis zum aktuellen Spieltag vom Sheet "Master" lesen
Debug.Print "k", "Spt", "TG", "TK", "TD", "Verein"
If Sheets("Master").Visible = False Then
Sheets("Master").Visible = True
Aktuelles_Sheet_ausblenden
'Sheets("Master").Select
End If
'Spiele vom Sheet Master einlesen
If a = 1 Then 'Spieltage 1-17 bzw. 18-34
a = 1
Else
a = 18
End If
k = 1 'Variablen innerhalb eines Spieltages auf eins setzen
For x = 4 To 220
With myErgebnis(a)
.Verein(k) = Cells(x, b)
.TG(k) = Cells(x, d)
.TK(k) = Cells(x, f)
.TD(k) = .TG(k) - .TK(k)
Debug.Print k, a, .TG(k), .TK(k), .TD(k), .Verein(k)
k = k + 1 'Variablen innerhalb eines Spieltages um eins erhöhen
.Verein(k) = Cells(x, c)
.TG(k) = Cells(x, f)
.TK(k) = Cells(x, d)
.TD(k) = .TG(k) - .TK(k)
Debug.Print k, a, .TG(k), .TK(k), .TD(k), .Verein(k)
'Nur bis zum aktuellen Spieltag einlesen
'fehlt noch
'Bei Spieltagen , die nur zum Teil gespielt sind (Fr/Sa/So)
'die Punkte auf Null setzen, bei den Mannschaften, die noch nicht gespielt haben
If IsNull(.TG(k - 1)) Then
.Punkte(k - 1) = 0
.Punkte(k) = 0
Else
'Punkte berechnen
If .TG(k - 1) > .TG(k) Then .Punkte(k - 1) = 3
If .TG(k - 1) 


Anzeige
AW: in VBA Null, "", und 0 richtig erkennen
08.07.2008 14:23:50
ede
hallo,
dann schau Dir mal die Funktion IsEmpty() an!
Aus der Hilfe:
IsEmpty-Funktion (Beispiel)
In diesem Beispiel wird die IsEmpty-Funktion verwendet, um zu bestimmen, ob eine Variable initialisiert wurde.
Dim Var1, Test1
Test1 = IsEmpty(Var1) ' Liefert True.
Var1 = Null ' Null zuweisen.
Test1 = IsEmpty(Var1) ' Liefert False.
Var1 = Empty ' Empty zuweisen.
Test1 = IsEmpty(Var1) ' Liefert True.
Gruss
FE
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Null, "", und 0 in VBA richtig erkennen


Schritt-für-Schritt-Anleitung

Um sicherzustellen, dass Du mit Null, "", und 0 in Excel VBA korrekt umgehst, befolge die nachstehenden Schritte:

  1. Variablen deklarieren: Stelle sicher, dass Du die Variablen in Deinem VBA-Code korrekt deklarierst. Verwende Dim für Variablen wie Punkte, TG, etc.

    Dim Punkte1 As Integer
    Dim Punkte2 As Integer
  2. Werte abfragen: Überprüfe, ob eine Zelle leer ist oder einen Nullwert enthält. Verwende dazu die Funktion IsNull() oder IsEmpty().

    If IsNull(Zelle1) Then
       Punkte1 = 0
       Punkte2 = 0
    End If
  3. Null-Werte behandeln: Achte darauf, dass Du bei der Verwendung von 0 und Null in VBA den Unterschied verstehst. 0 ist ein numerischer Wert, während Null ein Zustand ist.

  4. Bedingte Abfragen: Implementiere Bedingungen, um sicherzustellen, dass die richtigen Werte zugewiesen werden. Zum Beispiel:

    If TG1 > TG2 Then
       Punkte1 = 3
    ElseIf TG1 = TG2 Then
       Punkte1 = 1
       Punkte2 = 1
    End If
  5. Debugging: Verwende Debug.Print, um den Status Deiner Variablen während der Ausführung zu überwachen und mögliche Fehler zu erkennen.


Häufige Fehler und Lösungen

  • Fehler: Rückgabe von 0 statt Null
    Wenn Deine Abfrage immer 0 zurückgibt, überprüfe, ob die Zelle tatsächlich Null oder leer ist. Verwende IsEmpty() zusätzlich zu IsNull().

  • Lösung: Null zuweisen
    Wenn Du sicherstellen möchtest, dass 0 als Wert für nicht gespielte Spiele gesetzt wird, solltest Du den Code wie folgt anpassen:

    If IsNull(TG1) Then
       Punkte1 = 0
       Punkte2 = 0
    End If
  • Fehler: Falsche Zuweisung bei Unentschieden
    Achte darauf, dass Du die Bedingungen für Unentschieden korrekt überprüfst, um fälschlicherweise 1 Punkte zu vergeben.


Alternative Methoden

  1. Verwendung von IsEmpty(): Statt IsNull() kannst Du auch IsEmpty() verwenden, um festzustellen, ob eine Variable oder Zelle leer ist.

    If IsEmpty(Zelle1) Then
       Punkte1 = 0
    End If
  2. Direkte Zuweisung: Anstelle von bedingten Abfragen kannst Du Werte direkt zuweisen, wenn Du sicher bist, dass die Zelle leer ist.

    Punkte1 = IIf(IsNull(Zelle1), 0, Punkte1)

Praktische Beispiele

  • Beispiel für die Punktevergabe:

    If IsNull(.TG(k - 1)) Then
       .Punkte(k - 1) = 0
       .Punkte(k) = 0
    Else
       If .TG(k - 1) > .TG(k) Then .Punkte(k - 1) = 3
       If .TG(k - 1) < .TG(k) Then .Punkte(k) = 3
    End If
  • Unentschieden prüfen:

    If .TG(k - 1) = .TG(k) Then
       .Punkte(k - 1) = 1
       .Punkte(k) = 1
    End If

Tipps für Profis

  • Nutze die Visual Basic-Funktion IsNull() gezielt, um sicherzustellen, dass Du nur mit echten Nullwerten arbeitest.
  • Vermeide die Verwendung von 0# für die Überprüfung von Nullwerten; dies kann zu Verwirrung führen.
  • Halte Deinen Code sauber und gut dokumentiert, um zukünftige Fehler zu vermeiden.

FAQ: Häufige Fragen

1. Was ist der Unterschied zwischen Null und Empty in VBA?
Null repräsentiert einen Zustand, bei dem eine Variable keinen Wert hat, während Empty anzeigt, dass eine Variable noch nicht initialisiert wurde.

2. Wie kann ich überprüfen, ob eine Zelle in Excel VBA leer ist?
Verwende IsEmpty() oder IsNull() in Kombination mit If-Abfragen, um den Status der Zelle zu überprüfen.

3. Was mache ich, wenn mein Code immer 0 zurückgibt?
Überprüfe die Abfragen und stelle sicher, dass die Zellen, die Du überprüfst, tatsächlich den erwarteten Wert enthalten. Verwende Debugging-Methoden, um die Werte während der Ausführung zu beobachten.

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