Excel 2013 VBA für Profis

Datentypen umwandeln

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Von diesen Konvertierungsfunktionen ist die Umwandlung zwischen verschiedenen Zahlen-Datentypen in VBA nicht so wichtig, weil der Compiler das oft automatisch vornimmt. Am häufigsten werden Sie die Umwandlung zwischen Zahlen und Texten benötigen.

Transkript

Verschiedene Zahlenfunktionen beschäftigen sich damit, Zahlen in verschiedene andere Datentypen umzuwandeln. Ein paar davon, ich notiere die Ihnen einfach mal so schnell, brauchen Sie im Grunde gar nicht. Convert to Int, Convert to Long, Convert to Double. Haben Sie vielleicht schonmal irgendwo entdeckt. Aber in Wirklichkeit macht Visual Basic so viel automatische Typumwandlung, dass sich die meisten damit gar nicht beschäftigen möchten. Da können Sie gnadenlos eine sowieso Double-Zahl ohne Nachkommastellen in eine Integer-Variable speichern. Sie können auch eine Double-Zahl mit Nachkommastellen in eine Integer-Variable speichern. Dann werden die Nachkommastellen notfalls gerundet und dann abgeschnitten. Das alles befreit Sie von dem Nachdenken, ob der Datentyp passt. Und deswegen brauchen Sie normalerweise so ein CDbl, CLng, CInt nicht. Außer es gibt Probleme. Zum Beispiel häufig wenn Sie, das geht ja auch in Excel schonmal los, Daten aus Tabellen holen, importieren und die dort in den Datentypen sehr viel pingeliger sind, dann brauchen Sie manchmal eine Funktion, ich nenne die jetzt mal Sub MachWahr. Das ist keine Funktion, sondern eine Prozedur, die nur zeigt, was passiert, die mit Debug.Print und dem Ergebnis -1, haben Sie irgendwie aus einer Datenbank rausgeholt, natürlich genau das ausdrucken würde. Also in dem Direktbereich, mit F5, sehen Sie eine -1. Wenig ausgefallen, aber es gibt Gelegenheiten, zum Beispiel SQL-Datenbanken, die sehr pingelig sind, ob da auf True oder auf -1 verglichen wird, denen müssen Sie dann ausdrücklich einen Datentyp Boolean liefern. Und da ist es sinnvoll, Convert to Bool, auch das gibt es, zu nutzen. Was hier übrigens den Nebeneffekt hat, wenn ich das ausführe, dass dort nicht mehr -1, sondern die Boolesche Variable Wahr angezeigt wird. Hier im Ausdruck ist das allerdings nicht zu unterscheiden. Um das zu unterscheiden, gibt es eine Funktion, die Sie fast nie brauchen werden, aber wenn, dann freut man sich, dass es sie gibt. TypeName und als Argument dann irgendeine Variable oder wie hier einen festen Wert. TypeName ermittelt den Datentyp dessen, was er da übergeben kriegt. Wenn ich das jetzt mit F5 starte, sehen Sie, aha, es ist offensichtlich ein Boolean-Datentyp angekommen. Also wenn Sie es mal brauchen, TypeName sehr praktisch hier, aber jetzt nicht wirklich nötig. Es ging nur drum, dass verschiedene Funktionen in diesem Fall Datentypen konvertieren können. CInt zu Integer, CLng zu Long, CDbl. Und hier eben CBool, also in eine boolesche Variable umwandeln. An anderer Stelle werden Sie das viel häufiger brauchen. Dafür brauche ich nochmal eine weitere Konstante, nämlich mit Const m_c und ich schreibe ganz deutlich eine String-Konstante. Nennen wir es ruhig erstmal Geldbetrag. Da steht sowas drin wie "123.456 Euro", also hundertdreiundzwanzigtausend- vierhundertsechsundfünfzig Euro. Das ist eine Zeichenkette, sehen Sie ganz deutlich an den Gänsefüßchen. Diese Zeichenkette entsteht zum Beispiel, wenn ein Benutzer in ein Formular etwas eintippt in einem Edit-Feld. Dann ist das zwingend eine Zeichenkette und Sie müssen es möglicherweise in eine Zahl umwandeln. Und das soll diese Prozedur jetzt leisten. MachZuZahl, bedeutet; ich schreibe das mal ruhig untereinander. Debug.Print, das ist der Originalbetrag. Wenn ich den ausdrucke, steht da unten erstmal das Gleiche. Ich brauche ihn aber als Zahl, denn ich will damit weiterrechnen. Und falls Sie mal spaßeshalber versuchen wollen, m_cstrGeldbetrag, nur * 2 zu rechnen, damit Sie nicht sagen, er weiß nicht, in welcher Reihenfolge, machen wir gern Klammern drumrum. Dann speichere ich das vorsichtshalber, denn Sie werden jetzt feststellen, mit F5, das muss einen Laufzeitfehler geben, "Typen unverträglich". Ich kann eine Zeichenkette nicht multiplizieren. Kann ich also beenden. Was ich allerdings kann, ich nehme das "* 2" mal weg vorübergehend, ist, diese Zeichenkette in einen Wert, in einen Value umzuwandeln. Die Funktion schreibt sich nur Val, aber es ist gemeint "Value". Und wenn ich das hier unten wieder lösche, werden Sie feststellen, dass es im Grunde erstmal gut zu funktionieren scheint. Mit F5 gibt es allerdings eine unschöne Überraschung. Val ist eine amerikanische Funktion. Die liest natürlich korrekt 1, 2, 3, Punkt, 4, 5, 6. Und vergisst freundlicherweise die Buchstaben hinten. Sonst müsste sie sagen, "das verstehe ich nicht". Die arbeitet sich von links nach rechts durch und versucht sich dran. Und versteht den Dezimalpunkt. Den haben Sie gar nicht gemeint, dieses waren 123 Tausend Euro, aber Val hat den Dezimalpunkt verstanden. Und Debug.Print macht aus dieser Double-Zahl, die es jetzt ist, im Ausdruck natürlich wieder das deutsche Komma rein. Das war also ein Missverständnis, schreibe ich mal vorsichtshalber dahinter. Also das geht bei ganzzahligen wunderbar, bei Nachkommazahlen nicht so gut. Wenn Sie Nachkommazahlen brauchen, dann wäre die CDbl-Funktion richtig. Aber Sie werden feststellen, die hat ein anderes Problem. Ich nehme das da unten mal wieder weg. Also mit F5. Die kommt mit den Buchstaben nicht klar. Wenn ich auf Debuggen gehe, sehen Sie, es geht noch um diesen Teil hier. Ich kann das jetzt mal künstlich begrenzen auf die ersten 7 Zeichen, nämlich die Ziffern. Also einmal stoppen. Ich will nicht das Ganze umwandeln, sondern Left davon, und zwar nur 7 Zeichen. Und dann werden Sie feststellen, dann geht es. Wenn ich jetzt künstlich das Wort "Euro"; also mit F5; hier ist korrekt die 123 Tausend erkannt. Um den Preis dass ich alle Buchstaben dort extrahieren muss, vorher erkennen, und wie auch immer rausschmeißen. Das habe ich jetzt hier relativ zu Fuß gemacht. Also, es ist alles so ein bisschen schwierig. Es sind vor allem die Probleme bei Nachkommazahlen. Und wenn Sie Glück haben, was umwandeln müssen, dann kommen Sie mit der Val-Funktion hin. Die hat nämlich tatsächlich den Vorteil, dass sie nicht nur robuster ist, sie kommt auch mit den Texten darin klar. Wenn es von links sinnvoll losgeht, guckt sie, wie weit sie kommt. Natürlich um den Nachteil der amerikanischen Formatierung. Ich mache jetzt mal bewusst hier was Unbrauchbares rein. Und lasse das jetzt nochmal laufen. Wenn es schiefgeht, liefert sie wenigstens eine 0 zurück. Eine 0 ist eine Zahl und kein Laufzeitfehler zu Typverletzung. Deswegen, wenn es irgendwie geht, die Val-Funktion nehmen, die hält mehr aus sozusagen und schlimmstenfalls kriegen Sie eine 0 zurück. Also Datentypumwandlung vor allem bei Zahlen ist erstens selten nötig, das ist was für Puristen. Zweitens, wenn es nötig ist, gibt es diese Convert-Funktionen: CInt, CLng, CDbl, CBool. Und im Zweifelsfall ist die Val-Funktion viel angenehmer, weil sie eine Menge mehr auch mit Textanteilen darin klarkommt.

Excel 2013 VBA für Profis

Nutzen Sie die Möglichkeiten der Programmiersprache VBA in Excel 2013, um eigene Dialoge zu erstellen, auf andere Arbeitsmappen zuzugreifen und wichtige Funktionen einzusetzen.

4 Std. 59 min (53 Videos)
Derzeit sind keine Feedbacks vorhanden...

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!