ExcelVBAで使用できる変数の型(データ型)の一覧と、
各変数を宣言・使用するサンプルコードを解説します。
変数の型(データ型)一覧表
主要な変数の型(As ○○)一覧
ExcelVBAで扱うことのできる主な変数の型(データ型)は以下の通りです。
| 種別 | 型名 | 格納する値 |
|---|---|---|
| データ型 | Long | 数値(整数) |
| データ型 | Double | 数値(×÷に強い小数) |
| データ型 | Currency | 数値(+ーに強い小数) |
| データ型 | String | 文字列 |
| データ型 | Date | 日付 |
| データ型 | Boolean | True/False |
| オブジェクト型 | Workbook | Excelブック |
| オブジェクト型 | Worksheet | ワークシート |
| オブジェクト型 | Range | セルまたはセル範囲 |
| オブジェクト型 | Shape | 図形やグラフなど |
| オブジェクト型 | AutoFilter | オートフィルター |
| オブジェクト型 | ListObject | テーブル |
| オブジェクト型 | Collection | コレクション |
| オブジェクト型 | Dictionary | ディクショナリー(連想配列) |
| オブジェクト型 | Object | すべてのオブジェクトを格納可 |
| どちらも格納可 | Variant | 上記のすべての型を格納可 |
| どちらも格納可 | 配列(Array) | 上記の型を複数セットで格納 |
これらを変数として宣言する場合は、
以下のように「Dim 変数名 As 型名」というコードを記述します。
Dim 数値 As Long Dim 文字列 As String Dim セル As Range Dim ワークシート As Worksheet
ちなみに「データ型」といった場合、
- 広義:RangeやWorksheetも含めた変数の型すべて。
- 狭義:そのうちオブジェクト型でないもの。プリミティブ型とも呼ぶ。
この2つの意味がありますので、文脈から推測して読み分けてください。
Range型やWorksheet型を「データ型」と呼んでも間違いではありません。
全データ型(プリミティブ型)一覧
以下はExcelVBAで扱えるデータ型(プリミティブ型)の全一覧です。
と言っても上記の「主要な変数型」にないものは特に使用する必要はありませんので、
太字の型だけ覚えておけば十分です。
| 型名 | 名称 | 格納値(詳細) |
|---|---|---|
| Integer | 整数型 | -32,768 ~ 32,767の整数 |
| Long | 長整数型 | -2,147,483,648 ~ 2,147,483,647の整数 |
| LongLong | 64ビット整数型 | -9223372036854775808 ~ 9223372036854775807の整数 |
| Single | 単精度浮動小数点数型 | -3.402823E38 ~ -1.401298E-45(負の値) 1.401298E-45 ~ 3.402823E38(正の値) |
| Double | 倍精度浮動小数点数型 | -1.79769313486232E308 ~ -4.94065645841247E-324(負の値) 4.94065645841247E-324 ~ 1.79769313486232E308(正の値) |
| Currency | 通貨型(固定小数点型) | -922,337,203,685,477.5808 ~ 922,337,203,685,477.00 |
| String | 文字列型 | 最大約20億文字まで |
| Date | 日付型 | 100/1/1 ~ 9999/12/31まで(時刻含む) |
| Byte | バイト型 | 0~255(8ビット=1バイト)分の正の整数 |
| Boolean | ブール型 | 真(True)/偽(False) |
| Object | オブジェクト型 | オブジェクト |
| Variant | バリアント型 | すべてのデータ |
全オブジェクト型一覧
全オブジェクト型の一覧はこちらです。と言いたいところなのですが、
実はオブジェクト型は無数にあります。
例えばセルの背景色を設定するコードにおいて、
Dim 背景色オブジェクト As Interior Set 背景色オブジェクト = Range("A1").Interior 背景色オブジェクト.Color = RGB(255, 0, 0)
このように「Interiorオブジェクト」を変数にすることもできます。
ExcelVBAにおいて、
直後に「.」を入力できるコードはすべて該当のオブジェクト型を持っています。
Workbooks("○○").Worksheets("△△").Range("A1").Interior.Color = RGB(255, 0, 0) ' ↑Workbook型、Worksheet型、Range型、Interior型 すべてオブジェクト型 ' 最後の「Color」だけは後ろに「.」を打てず、代わりに=で代入する。これをプロパティと呼ぶ。 Dim 並び替え設定 As Sort Set 並び替え設定 = Range("A1:E100").Sort ' ↑Sortも実はオブジェクトなので、やろうと思えば変数に入れることができる
このあたりの話は、とりあえず
「なんにでもオブジェクト型は存在し、変数にいれようと思えば入れられる」
とだけ理解しておけば十分です。
通常使う上では、再掲する以下の変数だけでほとんどの処理は実装可能です。
| 型名 | 格納する値 |
|---|---|
| Workbook | Excelブック |
| Worksheet | ワークシート |
| Range | セルまたはセル範囲 |
| Shape | 図形やグラフなど |
| AutoFilter | オートフィルター |
| ListObject | テーブル |
| Collection | コレクション |
| Dictionary | ディクショナリー(連想配列) |
| Object | すべてのオブジェクトを格納可 |
変数の宣言方法 - Dim・As・Setの使い方
各型の変数を宣言(定義)する場合は、
以下のように「Dim 変数名 As 型名」というコードを記述します。
Dim 数値 As Long Dim 文字列 As String Dim セル As Range Dim ワークシート As Worksheet
変数を使って処理を行う場合、
「データ型」の変数は「=」を使って代入を行います。
Dim 数値 As Long 数値 = 1
変数内の値を使用する場合は変数名をそのまま記述することで、
そこに格納された値を使用することができます。
Dim 数値 As Long 数値 = 1 MsgBox 数値 ' 「1」が表示されます。 Range("A1").Value = 数値 ' A1セルに「1」が入力されます。
続いてセルやシートなどのオブジェクト型変数は、
代入する場合は「Set」を頭につける必要があります。
Dim セル As Range Set セル = Range("A1") Dim シート As Worksheet Set シート = Worksheets("○○")
オブジェクト型変数を使用する場合は、主に以下2つの使い方をします。
① オブジェクトの持つプロパティへ代入・読取を行う
例えばRange型変数のValueプロパティを使って、
セルの値を入力したり、セルの値を読み取るコードがこちらです。
Dim セル As Range Set セル = Range("A1") セル.Value = 1 ' A1セルに「1」が入力されます。 MsgBox セル.Value ' A1セルの値「1」がMsgBoxに表示されます。
Range("A1")を変数「セル」にSetしておくことで、
「Range("A1").Value」を「セル.Value」に書き換えることができる
ととらえておけばOKです。
② オブジェクトの持つメソッドを実行する
例えばWorksheet型変数を用いて、
コピーやシートの削除を行うコートがこちらです。
Dim シート As Worksheet Set シート = Worksheets("○○") シート.Copy ' ○○シートを新規ブックにコピー シート.Delete ' ○○シートを削除
こちらも先ほどのプロパティと同様、
「Worksheets("○○").Copy」を「シート.Copy」に書き換えることができる
ととらえておけばOKです。
「型が一致しません。」エラーについて
数値に文字列を代入してしまったり、シートにセルをSetしてしまったり、
代入する値のデータ型が変数のデータ型と一致しない場合は、
| 実行時エラー '13': 型が一致しません。 |
エラーとなります。
Dim 数値 As Long 数値 = "あいう" ' ← 「型が一致しません。」 エラー Dim セル As Range Set セル = Worksheets("○○") ' ← 「型が一致しません。」 エラー
このエラーが発生したら代入する値と代入先のデータ型が違ったと解釈してください。
主に
- 数値が入るべきところに文字列が入った
- セルの値がエラー値(エラー型)でそれが文字列や数値に入った
あたりで発生することが多いエラーです。
ただし、VBAには「データ型を変換できるなら自動変換する」仕組みがあるため、
Dim 文字列 As String 文字列 = 1000 ' ← これはOK
このように文字列に数値を入れても自動で"1000"に変換して受け取ってくれます。
これを「暗黙の型変換」と呼びますので、
名称は忘れていいですが、この仕様は覚えておきましょう。
主要な変数の型(データ型)のサンプルコード集
最後に主要なデータ型のサンプルコード集を記載します。
変数を扱う際の参考にしてください。
Long型(整数)
Dim 整数 As Long 整数 = 100 ' セル値を格納 Dim 売上 As Long 売上 = Cells(R, 5) ' For文のカウンタとして利用 Dim 最終行 As Long: 最終行 = Worksheets("○○").UsedRange.Rows.Count Dim R As Long For R = 2 To 最終行
整数値にはLong型を用います。
値が小さかったとしてもInteger型を用いる必要はなく、
すべてLong型を使っておけばOKです。
Double型(小数)
Dim 小数 As Double 小数 = 0.1 ' 小数の計算が必要な場合に使用 Dim 平均売上 As Double 平均売上 = 売上合計 / 取引回数
小数は通常Double型を用います。
数値を入力したセル値もDouble型のため、
セルと値をやり取りする場合はDouble型が一番安定します。
Currency型(+-が得意で×÷が苦手な小数)
コンピュータは実は小数の足し算と引き算が苦手で、
0.1+0.2=0.3の判定すら失敗します。
If 0.1 + 0.2 = 0.3 Then MsgBox "一致" ' ← なんとこれは実行されません。 End If
このように「キリのよい小数の足し算引き算を行う」場合は、
Double型ではなくCurrency型を用いると安定します。
Sub 小数点誤差の検証() Dim dbl小数1 As Double Dim dbl小数2 As Double Dim crr小数1 As Currency Dim crr小数2 As Currency dbl小数1 = 0.1 dbl小数2 = 0.2 crr小数1 = 0.1 crr小数2 = 0.2 If dbl小数1 + dbl小数2 = 0.3 Then MsgBox "一致" ' ← !実行されない! End If If crr小数1 + crr小数2 = 0.3 Then MsgBox "一致" ' ← 実行される End If End Sub
ただし、Currency型は小数点第4位しか持てないため、
割り算と掛け算の精度はDouble型よりだいぶ落ちます。
Dim crr小数 As Currency crr小数 = 1 / 3 If crr小数 * 3 = 1 Then MsgBox "一致" ' ← 実行されない End If
このように「1/3 × 3 = 1」すら失敗しますので、
どちらの小数を使うか、慎重に検討してください。
String型(テキスト・文字列)
Dim 文字列 As String 文字列 = "あいうえお" ' セル値を格納 Dim 商品名 As Long 商品名 = Cells(R, 4)
文字列を扱う場合はString型を使用します。
前述の通り数値も受け取ってくれるため、
エラーが起きづらく、使いやすいデータ型です。
格納上限も20億文字と、ほぼ無限と思って差し支えありません。
Date型(日付)
Dim 日付 As Date 日付 = DateSirial(2025, 9, 1) ' セル値を格納 Dim 販売日 As Date 販売日 = Cells(R, 1)
日付を扱い場合はDate型を使用します。
Excelとは違い、100/1/1以降の値を扱うことができます。
Boolean型(True/False)
Dim 何らかの判定 As Boolean 何らかの判定 = True
True/Falseを扱う場合はBoolean(ブーリアン・ブール)型を使用します。
主にフラグ変数として用いることが多い変数です。
以下のように変数名の頭に「is」をつけておくと読みやすくなります。
Dim シート番号 As Long Dim 検索シート名 As String 検索シート名 = "○○データ" Dim isシートが存在 As Boolean For シート番号 = 1 To Worksheets.Count If Worksheets(シート番号).Name = 検索シート名 Then isシートが存在 = True Exit For End If Next If isシートが存在 = False Then MsgBox "データシートがブック内にありません。" Exit Sub End If
Workbook型(ブック)
Dim 処理ブック As Workbook Set 処理ブック = Workbooks("○○.xlsx") 処理ブック.Worksheets(1).Activate ' 第1シートをActiveに 処理ブック.Worksheets(1).Range("A1").Value = 1 ' 第1シートA1セルに1を入力
ブック(Excelファイル)はWorkbook型変数にSetすることができます。
複数のブックを扱うマクロを書くときは、
変数に格納しておくとコードの記述が楽になります。
Worksheet型(ワークシート)
Dim 処理シート As Worksheet Set 処理シート = Thisworkbook.Worksheets("○○") 処理シート.Range("A1").Value = 1 ' 対象シートのA1セルに1を入力 処理シート.Copy ' 対象シートを新規ブックにコピー
ワークシートはWorksheet型変数にSetすることができます。
これはコードを読みやすくする以上にひとつ重要な機能を持ち、
Worksheet型変数にSetすることで以下の選択肢を表示できます。

Worksheets("○○")という記述ではこの選択肢が出ないため、
プロパティやメソッドの入力が面倒です。
コードも読みやすく取り違えも減らせるうえ、この選択肢で書きやすくもなります。
VBAを書くときは、処理するワークシートは必ず変数に入れるようにしましょう。
またWorksheet型に限り、変数名をあらかじめ設定しておく、
「シートオブジェクト名」という機能がExcelVBAに備わっています。
この機能を使うと、DimやSetのコードを記載することなく、
いきなり「データシート.Range("A1")」の記述ができるようになります。
これもExcelVBAを効率よくプログラミングする上で必須の機能ですので、
この機会に覚えてしまってください。
詳細はこちらをどうぞ。
Range型(セル・セル範囲)
Dim セル As Range Set セル = Range("A1") セル.Value = 1 ' セルの値を1に セル.Interior.Color = RGB(255, 0, 0) ' セルの背景色を赤に
セルやセル範囲を扱うにはRange型変数を利用します。
単独セルでも複数セルでも、どちらもRange型を使うことになります。
Dim セル範囲 As Range Set セル範囲 = Range("A1:C3")
セル・セル範囲の取得方法は様々な方法がありますので、
VBAに慣れてきたら、より便利な方法がないかを探してみてください。
' A1セルの取得 Dim セル As Range Set セル = Range("A1") Set セル = Cells("A1") ' A1:C3セル範囲の取得 Dim セル範囲 As Range Set セル範囲 = Range("A1:C3") Set セル範囲 = Range(Cells(1, 1), Cells(3, 3)) Set セル範囲 = Range("A1").Resize(3, 3) ' 何らかのオブジェクトを活用したセルの取得 Set オートフィルターの設置範囲 = Worksheets("○○").AutoFilter.Range Set テーブルの設置範囲 = Worksheets("○○").ListObject(1).Range Set 範囲内の空セル = セル範囲.SpecialCells(xlCellTypeBlanks)
Variant型(何でもはいる変数)
Dim 何でもはいる変数 As Variant 何でもはいる変数 = 1 何でもはいる変数 = "あいう"
データ型を指定せず、なんでも代入できる変数を扱う場合は、
Variant型変数を使用します。
「As ○○」を省略した場合は、このVariant型になります。
Variant型にはオブジェクト型を入れることもでき、
オブジェクトを入れたい場合はSetを記述して代入します。
Dim Variant変数 ' ← Asを省略時はVariantになる Variant変数 = Range("A1") ' セルの値が入ります。 Set Variant変数 = Range("A1") ' セルそのものが入ります。
といってもこのような使い方は危険で紛らわしいため、
よほどの理由がない限りはオブジェクトをSetしないようにしてください。
Variant変数は「数値と文字列どちらもありうる値」に使用するのが基本です。
配列やコレクション(Array/Collection/Dictionary)
ExcelVBAを学習して複雑な処理を書くようになってくると、
「複数の変数をまとめて管理したい」という状況が訪れます。
その時は、配列やコレクションを使用して、
ひとつの変数に複数の値をまとめて入れる方法を用いることになります。
Dim 配列(1 To 5) ' 5つの箱をもつ配列変数を用意 ' それぞれの箱にデータを格納 配列(1) = "みかん" 配列(2) = "りんご" 配列(3) = "いちご"
Dim コレクション As New Collection ' 要素数がわからないときはコレクションを使用 ' データをコレクションに格納していく コレクション.Add "みかん" コレクション.Add "りんご" コレクション.Add "いちご" ' 取り出すときは配列と同じように MsgBox コレクション(1) ' ← 「みかん」が表示されます。
必要になったらそれぞれ専用の記事で学習してみてください。
入門用の勉強会アーカイブもありますので、
よろしければご視聴ください。
以上で変数の型(データ型)の解説を終わります。
データ型は奥が深く、理解を深めるには勉強が必要になります。
普段からこまめに変数を宣言して型の扱いに慣れておくことが、
データ型の理解を深める近道になると思います。
積極的に変数を使ったコードを書いて、
読みやすく安定したマクロを作っていきましょう。