型名

基本的にはVariant型(宣言なし)で使う。
Variant型は文字列型(String)と倍精度浮動小数点型(Double)を自動的に使い分ける。
単精度浮動小数点(Single)と整数(Integer)型は使う必要は無い。 (Integerは2バイトの符号付き整数)
必要に応じて以下の型は定義すればよい。
Long: 整数型。4バイトの符号付き整数の範囲; -2,147,483,648〜2,147,483,647
Object: オブジェクト型
Bool: True / Falseをとる論理型
Currency: 通貨型(8バイト) -922337203685477.5808〜922337203685477.5807
Date: 日付型(8バイト)

C言語で言うunsigned(符号無し)は無く、必ずsigned(符号付き)である。
「基本はVariant」ということにはおそらく異見があるかもしれません。
後述しますが、様々なサンプルプログラムを作って実験した結果、VBAの実装上、使い分ける意味(利点)がないという結論に至ったのです。

これは無頓着で良いということではありません。
言語仕様上、型の扱いがいい加減すぎ故に、Variantという“不安定な型”であることを意識して使ったほうが良いという意味合いなのです。
これ以上は長くなるので別の記事で説明します。

さて、型名について補足をします。
・Bool:論理型
条件式の評価結果を保持しておく時につかいます。別に評価結果をVariantに入れても問題ありませんが。

・Currency:通貨型
Excelの存在が大きいのでしょうか。
他の変数との違いは小数点以下が固定小数点型であること。
あと表示などで勝手に通貨記号(日本だと円マーク)をつける機能があるようです。
また、固定小数点型だと、例えば1から0.001を1000回引くときちんと0になります。
浮動小数点ではこれが0にならずにほぼ0になってしまいます。
これは他の言語でもよく問題になることでありますが、これでは一円の過不足で大騒ぎとなるお金を扱う用途には使えないのです。
小数点以下のお金が無い日本では整数型で問題ないと思います。(例えば米国ドルではセントを小数点以下で使いますからそのためでしょう)

・Date:日付型
Excelのセルで日付数値を扱ったものを変数に入れたい時はこれにいれると安心です。
また日付を使う時は明示的にこの型を使うと良いでしょう。

・Object:オブジェクト型
VBAにはオブジェクトという概念がいちおうあります。
これはVBAのAであるApplication、つまりExcelやらに対してオブジェクトとして扱うしかないためです。
例えばExcelのVBAではセルやシート、ブック等をオブジェクトとして扱います。
セルオブジェクトの場合はワークシートのセルの投影なので「値」や「文字の色」や「罫線」やらの値を持ちます。
(値というかオブジェクトのメンバというかプロパティと呼びます)
しかし、自分でオブジェクトを作るということはできません。 また、オブジェクト名そのものを型名として使うこともあります。
例えばExcelではRange型があります。



数値の範囲について改めて書くと以下の通りです。
Byte : 整数型(1バイト) 0〜255
Integer: 整数型(2バイト)-32,768〜32,767
Long: 長整数型(4バイト)-2,147,483,648〜2,147,483,647
Single: 単精度浮動小数点型(4バイト)
Double: 倍精度浮動小数点型(8バイト)

こういう話をすると「メモリの節約」を言う人がいますが、OSやプロとして受注するようなアプリを作るのならば神経を使って1バイトでも無駄をなくすという心がけは必要だと思います。
しかしせいぜい社内どまりで使うようなプログラムで神経をすり減らしても意味があるのでしょうか。

そもそもプロが受注するようなアプリをVBAで作るのか?という根本的な話になってしまいます。
comments (0)

コメント

Comment Form