このコンテンツには閲覧パスワードが必要です。
【事務作業の力持ちVBAを学ぼう】#7 式と値 3
EXCEL VBAについては高橋 宣成著「パーフェクト Excel VBA」で学んでいます。
今回は2章の2-2 データ型について学んでいきます。細かいデータ型やその説明は本書を参照ください。
2-2-1 データ型とその種類
式は値を生成するものですが、生成する値には種類があります。大きな分類では数値、ブール値、日付、文字列、オブジェクトなどです。この値の種類によって実行できる処理が変わってきます。例えば数値は計算できますが文字列ではできません。これらの種類のことをデータ型又は組み込みデータ型と言います。
VBAでは変数やプロシージャのデータ型の宣言について、省略したり大雑把な指定(variant型にしちゃうとか。)をすることができますが、省略したりしてしまうとコードを読んで判読せざるを得なくなり可読性が犠牲になるのでおすすめできません。variant型などを使ってはいけないということではないですがデータ型の理解があやふやなままだとエラーを起こしてしまうリスクが高まります。
2-2-2 数値型
数値型では、実数の取り扱いと算術演算による計算を行うことができます。
VBAで16進数を表したいときは「&H」に続けて記述することで扱えます。
数値型の種類としては、バイト型、整数型、長整数型、単精度浮動小数点数型、倍精度浮動小数点数型、通貨型があります。
補足として、コンピュータでは数値を2進数で処理しており、小数点以下を正しく表現することができない場合があります。
イミディエイトウィンドウで以下の計算を実行するとFalseになってしまいます。
?0.3 = 0.1 + 0.2
浮動小数点数を扱う場合、Double型を使うことで精度は上がりますが誤差がゼロになることはありません。
別の方法として通貨型を使うことで誤差を多少解決することができます。通貨型の場合コンピュータでは数値を1万倍して整数化してから1万で割って元に戻すという処理をしているからです。数値の後ろに「@」をつけることで通貨型にできます。以下の計算の結果はTrueになります。ただし1万倍して1万で割っているので小数点が5桁以上にまると正確に計算できない場合があります。
?0.3@ = 0.1@ + 0.2@
2-2-3 ブール型
二者択一の状態を「True」、「False」という値で表現します。コンピュータ内部では「True」は「-1」、「False」は「0」で扱っており、判定式で「True」、「False」ではなく「-1」又は「0」で評価しても判定できます。
2-2-4 日付型
日付型Dateは日時を表すデータ型です。扱える範囲は西暦100年1月1日から西暦9999年12月31日23時59分59秒です。
日付型のリテラルはハッシュ記号(#)で囲みます。例えば次のように宣言できます。
Dim d1 as Date: d1 = #2022-1-16#
日付型の値は、内部的にはシリアルと呼ばれる実数で取り扱われていて、整数部が日付、小数部が時刻を表します。1899年12月30日の0時0分0秒が0の設定で、1日プラスすると1を、半日をプラスすると0.5が加算されます。
2-2-5 文字列型
文字列型Stringは文字列を表すデータ型です。文字列型のリテラルはダブルクォーテーション記号(”)で囲みます。理れてるの中でダブルクォーテーションを使いたい場合は、二重引用符「””」とすることで表現できます。
文字列には「長さ0の文字列」が存在し、これを空文字といいます。ダブルクォーテーション内に文字を書かないことで表現できます。
2-2-6 オブジェクト型
オブジェクトを表すデータ型で、Excel VBAでは、Range、Worksheet、Workbook、Collection等非常にたくさんのオブジェクトがクラスとして定義されています。
オブジェクトをコード内で直接表現するためのリテラルはなく、Setステートメントで変数に参照設定をする、プロパティやメッソッドを組み合わせてオブジェクト式を使用するなどの方法があります。
2-2-7 バリアント型
バリアント型Variantは、あらゆる値を取り扱える万能のデータ型です。他のプログラミング言語ではあまりみられずVBAの特徴の一つといえます。