サイトについて      連絡先   検索

VBA データ型

はじめに

Excel VBA マクロのデータ型を紹介します。

数値の Integer や文字列の String や日付の Date などさまざまな型があります。

変数には型にあった値を代入する必要があります。そうでない値は自動で変換されるかエラーになります。

  • 目次
    • データ型
    • 数値型について
    • データ型を変換する
    • 型を確認する

データ型

VBA で使用できる型には主に次のものがあります。

型名 データ型 値の例や範囲
String文字列型"文字列"
Booleanブール型True または False
Byteバイト型0 ~ 255 の整数
Integer整数型-32,768 ~ 32,767 の整数
Long長整数型-2,147,483,648 ~ 2,147,483,647 の整数
Single単精度浮動小数点型負:-3.402823E38 ~ -1.401298E-45
正:1.401298E-45 ~ 3.402823E38
Double倍精度浮動小数点型負:-1.79769313486231E308 ~ -4.94065645841247E-324
正:4.94065645841247E-324 ~ 1.79769313486232E308
Currency通貨型-922,337,203,685,477.5808 ~ 922,337,203,685,477.5807
Date日付型西暦100年1月1日 ~ 西暦9999年12月31日 の日付と時刻
Objectオブジェクト型オブジェクト参照するデータ型 (Worksheet やクラスなど)
Variantバリアント型なんでも (多様は禁物)
Typeユーザー定義型Type で定義した型、いわゆる構造体

この他に変数として宣言できませんが VBA で最大の桁数を持つ Decimal 型が存在します。Variant 型に「CDec 関数」を使用したときだけ使用できる型です。

型名 データ型 値の例や範囲
Decimal10 進型少数なしの最大値:79,228,162,514,264,337,593,543,950,335
少数ありの最大値:7.9228162514264337593543950335

Dim d As Variant
d = CDec(7.92281625142642E+28) ' Decimal 型になる

64 ビット環境について

エクセルのバージョンが 64 ビットのときは、次の型も使用できます。

型名 データ型 値の例や範囲
LongLong超長整数型-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 の整数
LongPtr整数型32 ビット環境:Long と同じ
64 ビット環境:LongLong と同じ

LongPtr は32 ビット環境では Long 型になります。64 ビット環境では LongLong 型になります。両方の環境で動作するコードを作成するときに使用します。

数値型について

数値型には Byte, Integer, Long … と数多くの型が用意されています。まずは Integer の選択を考えます。Integer が VBA の数値型の基本型だからです。

Integer の範囲は -32,768 ~ 32,767 と狭いです。この範囲を超える数値を扱うときは Long や Currency などを検討します。

少数を扱うなら Single や Double を選択します。ただし、小数の計算で誤差が発生するので注意が必要です。

データ型を変換する

型に合わない値を代入するとエラーになります。


Dim 数値 As Integer
数値 = 10     ' OK
数値 = "文字" ' エラー

VBA には、型を自動で変換する機能があります。


Dim バイト As Byte
Dim イント As Integer
Dim ロング As Long

ロング = 256    ' Long に 256 を代入する
イント = ロング ' Long が Integer に変換される
ロング = イント ' Integer が Long に変換される
バイト = ロング ' エラー、256 が Byte の範囲を超えている

同じように文字列を数値や日付に代入できます。


Dim 文字列 As String
Dim イント As Integer
Dim バイト As Byte

文字列 = "256"  ' 文字の 256 を代入する
イント = 文字列 ' String が Integer に変換される
文字列 = イント ' Integer が String に変換される
バイト = 文字列 ' エラー、Byte に変換されるが範囲を超えている

Dim 文字列 As String
Dim 日付 As Date

文字列 = "2000/12/31" ' 文字の日付形式を代入する
日付 = 文字列 ' String が Date に変換される
文字列 = 日付 ' Date が String に変換される

String 型は数値でも日付でも代入できるので便利です。

明示的に指定した型に変換する「CInt 関数」などがあります。「関数一覧」の「データ型」に変換関数の一覧があります。

Variant 型は多用しない

Variant 型には数値でも文字でも何でも代入できます。便利だからと言って多用は禁物です。

型を制限することで、余計なデータが代入されるのを防いでくれています。不具合を発生させないためにも適切な型を選択することが大切です。

型を確認する

Variant や Object に何の型が入っているのかを確認するには「TypeName 関数」または「VarType 関数」を使用します。型名または型を表す値を取得できます。


Dim v As Variant
Dim 型名 As String

v = 1
型名 = TypeName(v)
Debug.Print(型名) ' Integer

v = "Tips"
型名 = TypeName(v)
Debug.Print(型名) ' String

Dim v As Variant
Dim 型 As Integer

v = 1
型 = VarType(v)
Debug.Print(型) ' 2

v = "Tips"
型 = VarType(v)
Debug.Print(型) ' 8
  • 目次
    • データ型
    • 数値型について
    • データ型を変換する
    • 型を確認する