ExcelVBA(マクロ)のデータ型まとめ/オブジェクト型変数に対するSetメソッドの使い方

cashbox IT

VBAで変数に対して使用できるデータ型の種類、使い方、注意点のまとめです。
変数の作成およびデータ型の指定方法についてはDimの記事で解説しています。

Advertisements

データ型一覧

バイト型(Byte)

0~255までの整数を保管することができます。
使用メモリは1バイトで、型宣言文字はありません。

ブール型(Boolean)

set1
Boolean型ではTrueまたはFalseを保管することができます。
使用メモリは2バイトで、型宣言文字はありません。
set2
式の実行結果です。
ちなみに見ての通り、Typename関数を使うとデータ型を取得できます。
set3
Boolean型の値は数字の0と1でも表現できます。
0がFalse、1がTrueとなります。

整数型(Integer)

-32768~32767までの整数を保管することができます。
使用メモリは2バイトで、型宣言文字は%です。

長整数型(Long)

-2147483648~2147483647までの整数を保管することができます。
使用メモリは4バイトで、型宣言文字は&です。

単精度浮動小数型(Single)

小数点を含む大体-3.402823の38乗~3.402823の38乗の範囲内の数字を保管することができます。言語によってはfloatとも呼ばれます。
浮動小数というのは「1234567.8は12345678の1/10」「0.00012345678は12345678の1/100000000000」みたいに、仮の桁数(仮数)と指数を別々に保管することでデータを軽くするような形式を言います。要するに小数を使いたい時に使います。
使用メモリは4バイトで、型宣言文字は!です。

set4
たとえばデータ型Integerの変数に4/5を代入すると、小数が扱えないために1が出力されます。
set5
小数を変数に代入したい場合、Single型で対応可能です。

倍精度浮動小数型(Double)

小数点を含む大体-4.94065645841247の324乗~4.94065645841247Eの324乗の範囲内の数字を保管することができます。Singleの上位互換です。pythonだとfloatはこっちになります。
使用メモリは8バイトで、型宣言文字は#です。

通貨型(Currency)

-922,337,203,685,477.5808 ~ 922,337,203,685,477.5807の整数+4桁の小数を保管することができます。
使用メモリは8バイトで、型宣言文字は@です。

日付型(Date)

西暦100年1月1日~西暦9999年12月31日までの日付および0:00:00 ~ 23:59:59の間の時刻を保管することができます。
使用メモリは8バイトで、型宣言文字はありません。

文字列型(String)

0~2GBの枠内で好きな長さの文字列を保管することができます。
使用メモリは10バイト+文字のバイト数です。型宣言文字は$です。

オブジェクト型(Object)

オブジェクトを保管することができます。
使用メモリは4バイトで、型宣言文字はありません。
オブジェクトとはアプリケーション(Application)、ブック(Workbook)、シート(Worksheets)、セル(Range)などのVBAで何か操作をする対象となるものです。これら固有のオブジェクトと差別化する意味で、Objectは総称オブジェクト型とも呼ばれます。

Setメソッド

set6
オブジェクト変数は他の変数とちょっと扱いがちがいます。
たとえば左の式ではデータ型がintegerの変数nに直接値を指定していて、これは動きますが、
データ型をオブジェクト型に変えると、これはエラーになります。
set8
オブジェクト変数は直接値を代入するのではなく、何か具体的なオブジェクトを代入して使います。たとえばこの場合nにA1セルを代入し、nに対してMsgboxメソッドを使うことで、結果的にA1セルの値をメッセージボックスに表示します。
オブジェクト変数にオブジェクトを代入するには、Setメソッドを使います。
オブジェクト変数にオブジェクトを代入
Set 変数 = オブジェクト
set9
上の式のオブジェクト変数nにはRangeオブジェクト(セル)を代入しているので、Dim n as ObjectはDim n as Rangeと書き変えることもできます。Rangeは具体的なオブジェクトの種類を指定した変数で、Objectはオブジェクトならなんでも格納できる変数です。
set10
別の例。データ型Objectの変数nにワークシートを代入し、Activateメソッドを使って一番左のシートをアクティブにする、という式です。
set11
ObjectをWorksheetsに書き変えても動きます。
set12
しかしnをRange型のオブジェクトとした上でWorksheetsを代入しようとすると、Excelの仕様上そんなことはできないのでエラーになります。

オブジェクト変数の参照解除

set13
細かいことですが、モジュールレベルやPublicでオブジェクト変数がオブジェクトを参照したままの状態だと、その分メモリを圧迫し続けます。
set14
オブジェクト変数にNothingを代入することで、オブジェクトへの参照を解除し、メモリを解放することができます。

バリアント型(Variant型)

特に縛りなく、あらゆるデータを保管できます。RangeもWorksheetsもObjectで代用できたように、Variantはデータ型を問わずあらゆるデータを格納することができます(数値と文字列ではデータの扱いがちがうなどの原因で、意図しない挙動をすることがまれにあります)。
特にデータ型を指定しない場合、自動的にこれになります。何を指定していいかわからなければVariantにしておけば基本OKです。
使用メモリは数値なら16バイト、文字なら22バイト+文字数です。型宣言文字はありません。

やりたいことから方法を探すエクセルExcel操作・関数・VBA(マクロ)逆引きまとめ
逆引き(やりたいことから探す)Excel記事まとめ
関数・演算子・メソッド・プロパティ名から探すExcel/VBA(マクロ)使い方・組み合わせ方まとめ
こちらはExcelやメソッドの諸機能を、機能の名称から探せるまとめ記事です。

コメント