Data Science|Basics

VBAの整数型Integerがわかる!Long型・Byte型との違いも解説

VBAにおけるデータ型は複数あり、Integer型は整数を指定できるデータ型の1つです。ですが、整数を指定できるものはByte型やLong型などもあるので、分かりにくい人もいるのではないでしょうか。

この記事では、VBAのInteger型について解説していきます。Byte型やLong型との違いも解説するので、Integer型で悩んでいる方は参考にしてみてください。

Integer型について

最初に、VBAで整数を指定するデータ型Integerについて解説します。
Integer型について理解しておくことでByte型やLong型との違いも分かりやすくなるので、しっかり確認しておいてくださいね。

変数とは

Integer型について解説する前に、まずは変数とは何かを解説します。

変数とは、データにつけるラベルのようなものです。変数にデータを入れておくと分かりやすい名前に変更できたり、同じデータを使い回したりできるようになります。何度も同じ数値を入力しなくてもいいので、見やすいコードにもなります。

プログラミングを学習していると、変数はよく箱に例えられます。何を箱に入れるかを指定する必要があり、今回解説するInteger型は箱の中に整数を入れていることを意味します。

他のデータ型には、小数点を指定するものや日付を指定するものなどがあります。

Integer型の基本形

それでは、実際にInteger型を使う場合について解説していきます。

1. Dim 変数名 As Integer
2. 変数名 = 数値

これが変数がInteger型の整数であることを指定する形です。

まず、1行目の「Dim 変数名」で変数を宣言します。ここで指定する変数名は分かりやすい名前にしておきましょう。

次に「as Integer」として、宣言した変数がInteger型であることを指定します。ここではInteger型としていますが、他のデータ型を指定することもできます。

データ型を指定しない場合は自動的にVariant型になります。Variant型はすべてのデータに対応した形ですが、自動的にデータ型が判断されるためエラーの原因となります。問題が発生したときに原因を見つけ出すことも難しくなるため、可能な限りデータ型を指定しましょう。

2行目では名前をつけた変数に任意の数値を代入できます。この操作は変数の「初期化」と呼ばれ、次のように変数の宣言と初期化を同時に行うこともできます。

Dim 変数名 As Integer: 変数名 = 数値

上記で解説した構文がInteger型を使用するときの基本的な形になります。

それでは、実際のコードを確認してみましょう。

Integer型の使い方をコードで解説

それでは、Integer型を使用したコードを解説していきます。


上のコードを実行してみると、A1セルに数値「100」が表示されます。

実行結果

では、このコードの中身を解説していきますね。

1.Sub Test()
2.Dim a AS Integer
3. a = 100
4.Range("a1")= a
5.End Sub

まず、1行目でプロシージャを宣言しています。プロシージャとは、VBAの命令文を1つにまとめたものです。上の例では「Test」という名前のプロシージャを宣言しています。

2行目では変数を宣言・データ型を指定しており、上の例ではInteger型の変数「a」を宣言していますね。

3行目で変数「a」に数値100を代入し、4行目ではA1セルに変数「a」の値を表示させています。5行目ではプログラムを終了しています。

ここまで解説したように、Integer型の変数を宣言するには「Dim 変数名 As Integer」の形で変数名を指定するだけです。

整数のデータ型を比較

ここまでは整数のデータ型としてとくにInteger型について解説してきましたが、整数のデータ型として使われるものは3つあります。
それぞれのデータ型を次の表に示しています。

型名 データ型 消費メモリ 値の範囲
Byte バイト型 1バイト 0~255の整数
Integer 整数型 2バイト -32,768 ~ 32,767の整数
Long 長整数型 4バイト -2,147,483,648~2,147,483,647
の整数

Byte型、Integer型、Long型の違い

上の表の通り、整数を表す3つのデータ型は消費メモリや扱える数値の範囲が異なるのです。

「消費メモリ」はコンピュータがデータを処理するのに必要なメモリを表しています。Byte型が1バイトと少なく、Long型が4バイトと大きくなっています。

また、消費メモリに比例して扱える整数値の範囲が大きくなります。Byte型は「0~255」、Integer型は「-32,768~32,767」、Long型は「-2,147,483,648〜2,147,483,647」となっています。

まとめると、Byte型は「指定できる範囲が狭いが消費メモリが少ない」Long型は「指定できる範囲が大きいが消費メモリが多い」ことになります。

Integer型は消費メモリがByte型とLong型の間で、「-32,768~32,767」の数値が指定できることになりますね。

今回はByte型についても解説しましたが、実際のプログラムではByte型はあまり使われず、Integer型かLong型を使用している場合が大半です。

整数を指定するときはLong型が一般的

ここまでInteger型の使い方について説明してきましたが、実際に整数を使うときにはLong型が主流になってきています。

最近のバージョンではInteger型を指定しても自動的にLong型に変換されるようになっています。ソースコードが長い場合には、Integer型をLong型に変換する手間のために処理が遅くなる可能性もあります。
実際のコードで整数型の変数を使用するときには、処理を高速化するため、Long型を指定するようにしましょう。

Integer型とLong型のことはマイクロソフトの公式ページでも説明されていますので、気になった方は確認してみてくださいね。

Integer型とLong型が分けられた理由

Integer型もLong型も整数を指定するという役割は変わりません。
では、なぜByte型、Integer型、Long型に分けられることになったのでしょうか。

それは、昔のパソコンではメモリ容量が少なかったため。当時はメモリ使用量の少ないByte型・Integer型が主に使用されていました。

しかし最近ではパソコンのメモリ容量が増えているため、メモリを節約してByte型やInteger型を指定する必要がなくなってきているのです。そのため、整数のデータ型を指定するときはLong型が基本になっています。

パソコンが変化していくと同時にプログラムも変わってきているということになりますね。

Integer型とLong型の使い方の違い

それでは実際にLong型を使う際の基本形について説明します。
基本の使い方はInteger型と変わりません。

1.Dim 変数名 As Long
2. 変数名 = 数値

Integer型の場合と異なる点は、変数名の後が「As Long」になっていることだけです。

実際に「Integer」を「Long」に変更して実行してみると以下の通りになります。


実行結果は先ほどと同じで、A1セルに数値「100」が表示されます。

このように、Long型もInteger型と同じように扱えるため、実際にコードを書くときはLong型でコードを記述しましょう。

データ型の数値範囲を超えた場合

ここまで説明した通り、Integer型とLong型は整数のデータ型を指定するのに使われますが、どちらも指定できる数値の範囲が決められています。
そこで、実際に指定できる範囲を超えて数値を入力するとどうなるのかを検証していきます。

Integer型

まずは、Integer型から見ていきましょう。


先ほどInteger型の使い方を説明したときと同じプログラムで、Integer型の変数「a」に代入する数値をInteger型の範囲外である「33000」に変更しました。これを実行してみると次のようになります。


「オーバーフローしました。」というエラーメッセージが表示され、エラーが出ています。「デバッグ」をクリックしてみると、3行目が問題であることが分かります。


では、変数「a」をLong型にして実行してみましょう。実行結果は次の通りです。


問題なく数値が表示できました。
Integer型ではエラーが出ましたが、データ型をLong型に変更するとエラーは出ませんでした。

Long型

次にLong型で範囲外の数値を指定してみます。
Long型の変数「a」に代入する数値を、Long型の範囲外である「2,200,000,000」に変更して実行してみましょう。


同様にオーバーフローとなりエラーが出ています。確認のため、デバッグも行いましょう。


このように、範囲外の数値を入力した場合はオーバーフローとなりエラーが出てしまうので気をつけましょう。

Long型の数値を超える場合

数値を超えて処理を実行するとオーバーフローとなり、エラーが出ることが分かりました。ですが、実際のプログラムの中でLong型の範囲を超えた数値を扱いたいこともあります。

Long型の範囲を超える場合に使用できるのが、LongLong型です。LongLong型の情報を示しておきます。

型名 データ型 消費メモリ 値の範囲
LongLong 超長整数型 8バイト -9,223,372,036,854,775,808~9,223,372,036,854,775,807の整数

LongLong型は扱える値の範囲がかなり広くなっています。

Long型でオーバーフローする場合にはLongLong型を使用することでオーバーフローを回避できます。
先ほどLong型でオーバーフローしてしまった値「2,200,000,000」をLongLong型の変数に入れて実行してみましょう。


LongLong型を指定することで、Long型で扱えない範囲の整数値についても正しく表示させることができました。
LongLong型を使うことは少ないですが、Long型で処理できない場合はLongLong型で対応できます。

LongLong型の注意点として64bitのOfficeでしか使用できないので、32bit版を使用している場合は注意しましょう。

まとめ

変数に整数を指定できるデータ型Integer型について解説しました。
マイクロソフトが声明を出している通り、整数のデータ型を指定するときはInteger型ではなく、Long型を使用するのが一般的になってきているので注意が必要です。

一部のプログラムでは現在もInteger型が使われているので、この記事でInteger型について学習しておいてくださいね。

Excel VBAについてもっと学びたい方にはこちらの記事もおすすめです!

https://www.tech-teacher.jp/blog/vba-if/