テーマ
第4回目となる本稿のテーマは、「整数のデータ型を使う」です。
VBA のデータ型には様々なものが標準で用意されており、その一部は初学者を混乱させる原因となっていると思います。そこで、イントロダクションコースではデータ型の中でも使用機会が多く、簡単なものに絞って学習します。
変数宣言とデータ型
変数の宣言
前回の講義 Chapter 3 で変数について学習しました。変数は本コースのほぼ全ての Chapter で繰り返し使用しますのでその使用方法は自然と身についていくと思いますが、あらためて変数の宣言から丁寧に見ていきたいと思います。
Dim number
前回はこのような変数宣言をしましたね。変数はこのように宣言をしてから使うということも学習しました。しかしながら、その理由についてはまだ説明していませんでした。理由を理解するためにもう少し詳しく見ていきましょう。
Dim number
VBA に限らずプログラミング言語における単語の順序は必ずしも英語とは一致していませんが、使われる単語の意味を調べておくと内容を理解しやすくなります。まずは最初に登場する Dim の意味からこのコードを考えていきましょう。Dim とは Dimension の略で「寸法」という意味の名詞です。動詞としても使うこともでき、その場合の意味は「~という寸法に設定する」という意味になります。この変数宣言に当てはめて考えてみると、変数 number の寸法を設定している文のようですね。しかし、肝心な寸法が書かれていません。
データ型( Long 型)
この Dim number という宣言は寸法を省略した書き方だったのです。ここでは改めて寸法を省略せずに指定する書き方を使ってサンプルのマクロを一つ作ってみましょう。プロジェクトエクスプローラーの Sheet1 をダブルクリックし、Sheet1 シートモジュールを表示します。以下のコードをそこに記述してください。
Public Sub Chapter4()
Dim number As Long
Me.Cells(1, 1).Value = number
End Sub
Dim number As Long
この文は「変数 number の寸法(サイズ)を Long 型にする。」という意味になります。本来はこのように宣言の最後に「 As データ型 」と、型を指定することによってその変数の寸法(サイズ)を宣言します。変数の実体がメモリーの領域であることは前回触れました。したがって、ここで言う寸法(サイズ)とは、この変数が使用するメモリーのサイズということになります。
さて、続いて Long 型について説明します。Long 型は、長整数型と翻訳されることがあります。この漢字から直感的に連想することが出来ると思いますが、Long 型は整数を扱う変数です。少し言い方を変えれば、「整数しか代入できない変数」ということになります。何はともあれ、作成したマクロを実行してみましょう。
このコードを実行すると、Sheet1 の A1 セルに 0 が表示されたと思います。いつものようにコードを読んでみましょう。「 Sheet1 の全てのセルの1行目1列目のセルの値に number を代入する」ですね。このとき、変数 number にはまだ何も代入されていません。何も代入されていない変数はどのような値を保持しているのでしょうか。それを示すのがこのマクロの実行結果です。A1 セルに表示された整数が変数 number の初期値ということになり、それは 0 です。このように VBA の変数は、その変数へ値を代入する前に初期値を持っています。ここで一旦整理してみましょう。
このように、データ型とはその変数がどの様なデータを扱うのかを規定するもので、初期値を持っていることが分かりました。
データ型( Byte 型)
それでは Long 型以外のデータ型をもう少し見ていきましょう。先ほどのマクロを以下のように修正して下さい。
Public Sub Chapter4()
Dim number As Byte
number = 255
Me.Cells(1, 1).Value = "Byte"
Me.Cells(1, 2).Value = number
End Sub
Dim number As Byte
今度は As Byte としたので、変数 number は Byte 型の変数となります。Byte 型は 0 から 255 までの整数のみ代入可能なデータ型です。この Byte 型という名前の由来は、この変数が 1 byte (バイトと読みます)のメモリー領域を使用するからです。1 byte で表現可能な正の整数は 0 から 255 であるためこのデータ型の変数にはその範囲の整数しか代入出来ません。
変数宣言を説明した際、「このように宣言の最後に型を指定することによってその変数の寸法(サイズ)を宣言します。」と述べましたが、実際の寸法(サイズ)についてはまだ説明していませんでしたね。この寸法(サイズ)とは、その変数が使用するメモリーサイズのことです。上記のように number という名前の Byte 型変数を宣言すると、number という変数のために 1 byte のメモリー領域が確保されます。そして変数 number へ整数を代入すると、変数 number 用に確保されたメモリーにその代入した整数が書き込まれます。また、number + 100 とすれば変数 number 用のメモリーからそこに既に書き込まれている整数を取得し、その値に 100 を加算するという処理が出来るのです。ここでもう一度整理しておきます。
メモリーは無限にある資源ではありません。コンピューターに搭載されているメモリーには限りがあり、アプリケーションが使用出来るメモリーはその一部です。VBA のコードが使えるメモリーもその例外ではなく、Excel が利用可能なメモリーのうちの一部しか使えません。したがって、変数宣言時にその変数が使用するメモリーサイズを決める(あるいは制限する)ことはとても便利な機能と言えます。
このコード例では紹介しませんでしたが、Byte 型もまた初期値を持っており、それは 0 です。
データ型( Integer 型)
さらにもう一つの整数型を見ていきましょう。先ほどのマクロを以下のように修正して下さい。
Public Sub Chapter4()
Dim number As Integer
Me.Cells(1, 1).Value = "Integer の初期値は"
Me.Cells(1, 2).Value = number
number = 32767
Me.Cells(1, 3).Value = "代入した値は"
Me.Cells(1, 4).Value = number
End Sub
このマクロを実行してみてください。A1 に「 Integer の初期値は 」と表示され、B1 には「 0 」が表示されます。これも Long 型を試した時と同様、代入前の Integer 型変数には初期値として 0 が保持されていることが分かります。
そして、C1 に「 代入した値は 」と表示され、D1 には「 32767 」が表示されます。number = 32767 と代入してから Me.Cells(1, 4).Value = number としたので D1 に 32767 が表示されたわけです。
これまで見て来た通り、Byte 型、Integer 型と Long 型は全て整数のみ代入することが出来るデータ型です。そして Byte 型には 0 から 255 までの整数という制限がありました。これと似た制限が Integer 型、Long 型にもそれぞれあります。Integer 型、Long 型、ともに正の整数だけではなく負の整数も代入することが出来、その範囲は Integer < Long となっています。つまり Long 型が一番扱える範囲が広いということです。
整数を表現するデータ型であるという点で一致しているのに扱えるデータの範囲が異なるのは、それぞれのデータ型が使用するメモリーサイズが異なることに起因しています。Byte 型は 1 byte しかメモリーサイズがないため表現可能な整数が少なく、Integer 型は 2 bytes のメモリーサイズを使用するため Byte 型よりも表現可能な範囲は広くなり、Long 型は 4 bytes のメモリーを使用するのでさらに範囲が広くなる、といった具合です。
まとめ
それでは今回学習した内容をまとめておきます。
| データ型 | サイズ | 初期値 | 扱えるデータの範囲 |
|---|---|---|---|
| Byte 型 | 1 バイト | 0 | 0 から 255 までの整数 |
| Integer 型 | 2 バイト | 0 | -32,768 から 32,767 までの整数 |
| Long 型 | 4 バイト | 0 | -2,147, 483,648 から 2,147, 483,647 までの整数 |
それぞれのデータ型におけるメモリーサイズ、初期値、扱えるデータの範囲を表にまとめました。整数を扱うデータ型はこの他にもありますが、それらは基礎コースで学習する予定です。
それでは今回はここで終了です、お疲れさまでした。また次回お会いしましょう。
