型名

基本的にはVariant型(宣言なし)で使う。
Variant型は文字列型倍精度浮動小数点型を自動的に使い分ける。
ただしオブジェクト型や論理型、整数型、通貨型、日付型は必要に応じて宣言が必要である。

型名は以下のものがある。
Bool: True / Falseをとる論理型
Currency: 通貨型(8バイト)-922337203685477.5808〜922337203685477.5807
Date: 日付型(8バイト)
String: 文字列型(10+文字列の長さ)
Object: オブジェクト型

C言語で言うunsignedは無く、必ずsignedである。
これで言うと、Variantは数値の場合はDouble相等で、文字列はString相当になる。
いきなり「基本はVariant」ということにはおそらく異見があるかもしれない。
私の考察ではVBAの実装上、使い分ける意味(利点)がないという結論になっている。
無論、無頓着に使うことはできない。
それについては長くなるので次の項で説明している。

さて、型名について補足をしておく。
Bool:論理型
あまり使わないが、条件式の評価結果を保持しておく時につかう。
使う時は明示して宣言した方が良いだろう。

Currency:通貨型
Excelの存在が大きいのだろう。
他の変数との違いは小数点以下が固定小数点型であること。
あと表示などで勝手に通貨記号(日本だと円マーク)をつけることらしい。
固定小数点型だと、例えば1から0.001を1000回引くときちんと0になる。
浮動小数点ではこれが0にならずにとても小さい値になるだけだ。
これでは一円の過不足で大騒ぎとなるお金を扱う用途には使えない。

Date:日付型
内部的には整数型と考えられるが、日付と言っても秒単位の時刻まで扱うので4バイトでは足りず8バイトが設定されたのだろう。
宣言として日付を使う時は明示的にこの型を使うと良いだろう。

Object:オブジェクト型
VBAにはオブジェクトという概念がいちおうある。
自分でオブジェクトを作るということはできないので、既存のオブジェクトを入れる(実際にはその実態への参照がはいるのだろうが)ための変数を定義するために使うと考えた方が適当だろう。
例えばExcelのVBAではセルをオブジェクトとして扱う。
それはワークシートのセルの投影なので「値」や「文字の色」や「罫線」やらの値を持つ。
オブジェクトのメンバというかプロパティと呼ぶのだが。
他にもオブジェクト名そのものを型名として使うこともある。

省かれた型名
使う意味がないので省いた型名は以下のものがある。
Byte : 整数型(1バイト) 0〜255
Integer: 整数型(2バイト)-32,768〜32,767
Long: 長整数型(4バイト)-2,147,483,648〜2,147,483,647
Single: 単精度浮動小数点型(4バイト)
Double: 倍精度浮動小数点型(8バイト)

Byteは他の言語で言うCharとして扱う場合には使えるかもしれないがあまり意味はない。
ただそういう意思を表明するのに使うのはアリだと思う。
整数に切り上げるような場合は明示的にIntなどの関数を使ってやるべきだろう。

メモリの節約、という観点で言えば、OSや市販クラスのアプリを作るのならば神経を使って1バイトでも無駄をなくすという心がけは必要だと思う。
しかし個人かせいぜい社内か仲間内で使うようなプログラムで神経をすり減らしても意味はない。
その違いは初期設計段階でどれだけ綿密に設計を練り込むか、開発途上もどれだけ仕様管理していくかというところにも掛かってくる。
じゃあ、そんなレベルのアプリをVBAで作るのか?という根本的な話に戻ってしまう。

もっと身も蓋もない話を言えば、そこを目標としている人ならばきちんとMSDNなりに入って公式資料を体系的に学ぶべきであり、こんな素人の書いたサイトを見ている場合ではない。
comments (0)

コメント

Comment Form