Wie kann ich in Excel’s VBA einen NULL-Wert (#NV, d.h. „Nothing“) zuweisen?

  • Excel

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von Andreas_500.

    Wie kann ich in Excel’s VBA einen NULL-Wert (#NV, d.h. „Nothing“) zuweisen?

    Hallo Community,

    in einer Excel-VBA-Schnittstelle für eine externe DLL habe ich das Ergebnis in einer Matrix:
    Zeilenzahl: variabel
    Spaltenzahl: 4

    Hier ist ein Auszug aus meiner Ergebnis-Matrix, wie sie im Moment in Excel erscheint: s. Teil der Ergebnis-Matrix.jpg

    Die Zahlenkolonnen in Spalten 1 und 2 sind immer länger als in den Spalten 3 und 4. Im obigen Beispiel enthalten die ersten beiden Spalten 30 Elemente, wogegen in den Spalten 3 und 4 lediglich 15 Werte vorhanden sind.

    Für mich ist der jeweilige Abschluß der einzelnen Spalten wichtig: Excel signalisiert ab Zeile 31 durch die automatisch ausgegebenen Null-Werte #NV („No value“), daß ab da keine Zahlen mehr vorhanden sind (= fehlende Werte).
    In den beiden letzten Spalten steht bei mir allerdings ab Zeile 16 jeweils eine 0, was falsch ist, denn dort sollte kein Wert stehen.

    Wie kann ich anstelle dieser 0 den No-value-Wert #NV bekommen?

    Es geht nicht darum, daß ich selber den String "#NV" hinschreibe, sondern, daß dort wirklich KEIN Wert steht.

    Der Bedarf nach "#NV" am Ende der Zahlenkolonnen kommt daher, daß alle vier Spalten in einem Diagramm dargestellt werden. Weil die Anzahl der Rückgabewerte (= Zeilenzahl) von den konkreten Eingabe-Werten der Berechnung abhängt, markiere ich den kompletten grün hinterlegten Bereich, wobei Excel davon nur die Zellen verwendet, die wirklich Werte enthalten.

    Wenn ich selber "#NV" hinschreibe, kommt Excel’s Diagramm durcheinander.

    Ich habe bereits die Beispiele in:

    [url]https://learn.microsoft.com/de-de/dotnet/api/system.nullable-1?view=net-7.0
    [/url]
    learn.microsoft.com/de-de/dotn…ypes/nullable-value-types
    learn.microsoft.com/de-de/dotn…anguage-reference/nothing

    ausprobiert, um

    Wert = Nothing

    zuzuweisen, jedoch ohne Erfolg.

    Weiß jemand einen Rat?

    Vielen Dank im Voraus!

    Grüße Andreas
    Bilder
    • Teil der Ergebnis-Matrix.jpg

      96,69 kB, 848×720, 46 mal angesehen
    Wenn man seinem Nächsten einen steilen Berg hinaufhilft, kommt man selbst dem Gipfel näher.
    John C. Cornelius
    Hallo Andreas

    Vielleicht könntest du einfach Cells(16,3) = "" verwenden. Ich habe es kurz bei mir getestet. "" wird dan beim Diagramm nicht mehr angezeigt. Je nach Ablauf könntest Du ja am Schluss alle Zeilen durchlaufen und wenn eben in Spalte 1 und 2 einen Wert ist und Spalten 4 + 5 eine 0 enthalten diese mit dem leeren String ersetzen.

    LG Panter
    Hallo,
    danke für Deinen Tipp :) , aber es funktioniert leider nicht korrekt: Die Werte der 3. und 4. Spalte werden nur dann dargestellt, wenn der für das Diagramm markierte Bereich nur Zahlen enthält. Ist ein ungültiges Zeichen (Leerzeichen etc.) vorhanden, wird kein einziger Punkt der Spalten mehr dargestellt und alle Punkte verschwinden ganz.

    Grüße, Andreas

    PS(1):
    Wenn ich in einem separaten Diagramm lediglich die 3. und 4. Spalten darstelle, funktioniert Dein Tipp. Allerdings nicht in meinem Diagramm, denn die letzten beiden Spalten sind bei mir nur die Markierungspunkte, die zusätzlich zu anderen Kurven dargestellt werden sollten.
    In meinem etwas komplexeren Diagramm verschwinden alle Markierungen aus der 3. und 4. Spalte beim Vorhandensein von Leerzeichen oder sonstigem Text... :(

    PS(2):
    Habe noch ein kleines Experiment gemacht:

    Wenn ich in einem separaten Punkt(xy)-Diagramm die Wertepaare OHNE Leerzeichen darstelle, sieht es so aus, was korrekt wäre: s. Diagramm -1.JPG

    Markiere ich jedoch noch eine weitere Zeile mit Leerzeichen "", entsteht ein "Phantasie-Diagramm", mit vollkommen sinnlosem Inhalt: s. Diagramm -2.JPG

    Grüße, Andreas

    [Edit]
    Sorry :( , ich habe mich mißverständlich ausgedrückt als ich mehrfach vom Leerzeichen gesprochen habe: Gemeint war stets ein LeerString ""; Beide hatten in meinem Fall allerdings dieselbe Auswirkung.
    Bilder
    • Diagramm -1.JPG

      135,27 kB, 1.280×720, 41 mal angesehen
    • Diagramm -2.JPG

      123,97 kB, 1.280×720, 40 mal angesehen
    Wenn man seinem Nächsten einen steilen Berg hinaufhilft, kommt man selbst dem Gipfel näher.
    John C. Cornelius

    Dieser Beitrag wurde bereits 9 mal editiert, zuletzt von „Andreas_500“ ()

    Eine mögliche Lösung für mein Problem wäre, wenn ich eine Matrix mit unterschiedlichen Spaltenlängen erzeugen könnte: s. Wunsch-Matrix.jpg
    In Delphi ist das kein Problem, aber geht es in VBA?

    Grüße, Andreas
    Bilder
    • Wunsch-Matrix.jpg

      49,35 kB, 1.280×720, 41 mal angesehen
    Wenn man seinem Nächsten einen steilen Berg hinaufhilft, kommt man selbst dem Gipfel näher.
    John C. Cornelius
    Hi,
    ich habe inzwischen eine Lösung, falls jemand sich dafür interessiert: Die Zellen, die KEINE Einträge, sondern von Excel generierte #NV enthalten sollen, müssen wie folgt zugewiesen werden:

    Visual Basic-Quellcode

    1. MeineVariable = CVErr(xlErrNA)

    Auf die Lösung haben mich ChatGPT's zahlreiche falsche Vorschläge gebracht, denn im Gegensatz zu ihm, kann ich die einzelnen Varianten auch ausprobieren und testen. Ich habe ChatGPT gebührend gelobt ^^ , und ihm die korrekte Lösung auch erklärt, damit auch er was lernen kann :D ; denn ohne seine falschen Vorschläge wäre ich nicht so schnell auf die Lösung gekommen.

    Fazit:
    Wir beide (ChatGPT + Mensch) sind ziemlich unschlagbar..
    . :D :D

    Grüße, Andreas
    Wenn man seinem Nächsten einen steilen Berg hinaufhilft, kommt man selbst dem Gipfel näher.
    John C. Cornelius
    Du sollst ja auch kein Leerzeichen sondern nichts durch 2 Anführungszeichen ohne Inhalt zuweisen.
    Und wenn Du schon dabei bist mach es gleich auf den Wert:

    VB.NET-Quellcode

    1. ​Cells(16,3).Value = ""


    Das Verhalten für das Diagramm 2 ist kein Phantasiediagramm, sondern die untere Achse nicht nicht die Werte aus der Spalte sondern die Position innerhalb der Spalte wird genutzt, da man mit Texten bekanntlich nicht rechnen kann.
    NB. Es ist doch schön, wenn man lesbare Namen vergibt. Siehe auch [VB.NET] Beispiele für guten und schlechten Code (Stil).
    Ja, das stimmt zwar, ABER ich will meine Darstellung haben und nicht irgendeine willkürliche von Excel, weil dadurch mein komplexes Diagramm mit mehreren Kurven etc. je nach Zeilenzahl der Berechnung vollkommen durcheinandergerät. Mein ursprüngliches Problem war (s. Beitrag 1), daß ich keinen Texteintrag, sondern Nichts, d.h. einen leeren Eintrag als Abschlußzeichen der Zahlenkolonne gebraucht habe.

    NB. Es ist doch schön, wenn man lesbare Namen vergibt. Siehe auch [VB.NET] Beispiele für guten und schlechten Code (Stil).

    In meinem VBA-Code habe ich selbstverständlich sprechende Namen, und greife auch nicht direkt auf bestimmte Zelladressen zu wie in Deinem Beispiel
    Cells(16,3).Value =
    , sondern berechne ich je nach Ergebnis die passenden Zelladressen.

    Bei MeineVariable = CVErr(xlErrNA) ging es mir nur die rechte Seite der Zuweisung, falls jemand mal so etwas braucht.

    Grüße, Andreas

    PS:
    Zum besseren Verständnis habe ich noch zwei korrekte Diagramme angehängt: Man kann erkennen, daß durch Verlängerung des Darstellungsbereichs die eingestellte Darstellung nicht springt, wie bei einem Textinhalt wie Leerzeichen "" etc.
    Bilder
    • Diagramm -3.JPG

      139,65 kB, 1.280×720, 40 mal angesehen
    • Diagramm -4.JPG

      161,19 kB, 1.280×720, 49 mal angesehen
    Wenn man seinem Nächsten einen steilen Berg hinaufhilft, kommt man selbst dem Gipfel näher.
    John C. Cornelius

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Andreas_500“ ()

    Hallo Andreas,

    es tut mir leid, dass mein Vorschlag nicht funktioniert hat. Ich freue mich jedoch, dass die KI dir helfen konnte. Allerdings möchte ich klarstellen, dass ich den gesamten Vorschlag getestet habe! Es kann sein, dass dein Excel damit auf irgendeine Weise Probleme hat. Bei mir reicht ein leerer String aus. Um dies zu belegen, habe ich ein Diagramm eingefügt.

    Dein Beweisdiagramm ist übrigens kein (YX) Diagramm.

    Hallo Panter,
    zunächst danke für Deine Hilfe und Mühe! :)

    Ich habe Dein Beispiel gerade nachvollzogen, und sogar auch in abgewandelter Form: Deine Aussage kann ich nur bestätigen! Bin auch etwas perplex gewesen. ?(
    Mit meinem Excel (2019 Professional) stimmt wahrscheinlich alles, ABER:

    Der Unterschied in Excel’s Verhalten zwischen Deinem Test und meiner ursprünglichen Problematik kann nur daran liegen, daß ich für die Darstellung im Diagramm keine Eingabedaten verwende, sondern das Ergebnis einer (recht aufwendigen) Berechnung benutze: Meine Werte im grün hinterlegten Feld sind alle als Ergebnis einer eigenen Matrix-Funktion zurückgegeben worden.

    Nur das könnte das „Springen“ des Diagramm-Formats (von Punkt (XY) zu Linien-Diagramm) bei Verlängerung des Eingabebereichs erklären. Denn, wenn ich meine eigenen Zahlenwerte aus dem grün hinterlegten Bereich als reine Zahlenwerte rauskopiere und einem Diagramm erstelle, gibt es kein „Springen“ des Formats.

    In meinem konkreten Anwendungsfall (diverse Berechnungen für eine Rektifikationskolonne) habe ich ein Diagramm mit mehreren Kurven, Polygonzügen und Markierungspunkten. Hier verursacht das „Springen“ des Darstellungsformats das Verschwinden der kompletten Zahlenreihe (3. und 4. Spalte) im Diagramm.
    Es ist recht sonderbar: Aber ich muß wohl nicht alles verstehen, was Excel so macht… ?(

    Übrigens:
    Diese Diagramm-Art heißt bei „meinem“ Excel (schon seit zig Jahren) wirklich Punkt (XY) -Diagramm: s. Punkt (XY)-Diagramm.png

    Summa summarum:
    Für meinen Anwendungsfall ist = CVErr(xlErrNA) genau das, was ich gesucht habe.

    Danke für Deine Hilfe! :) :) :)

    Viele Grüße, Andreas
    Bilder
    • Punkt (XY)-Diagramm.png

      79,27 kB, 761×720, 46 mal angesehen
    Wenn man seinem Nächsten einen steilen Berg hinaufhilft, kommt man selbst dem Gipfel näher.
    John C. Cornelius