VBA入門
第12回.変数宣言のDimとデータ型

ExcelマクロVBAの基本と応用、エクセルVBAの初級・初心者向け解説
最終更新日:2020-06-19

第12回.変数宣言のDimとデータ型


マクロVBA入門者が、まず最初につまずくのが、このDimで変数を宣言することでしょう。
変数とは、数値や文字列など(すなわちデータ)を一時的に格納する入れ物
と良く説明されますが、まずはこの考えで良いでしょう。


この入れ物には、いろいろなタイプの入れ物があります。
まあ、ザルもあれば、ダンボールもあれば、バケツもあればって事ですね。
当然、水をいれるなら、バケツですよね、
ザルに、水は入れられませんし、ダンボールにいれたら破けてしまいます。

同様に、変数にも、そのデータのタイプによって、
入れられるものと、入れられないものがあります。
この入れ物(データ)のタイプ(型)を、データ型と言います。

データ型

データ型 名称 格納できる範囲
Integer 整数型 -32,768 ~ 32,767
Long 長整数型 -2,147,483,648 ~ 2,147,483,647
LongLong 64ビット符号付き数値 -9223372036854775808 ~ 9223372036854775807
※64ビットプラットフォームのみで有効な宣言型
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 バリアント型 すべてのデータ

※これで全部ではありません。まだまだありますが、上記はよく使われるものだけです。
BooleanまではVBAの基本型(プリミティブ型)になります。

まあ、今はまだ全部を覚えなくても良いです。
最初に覚えるとしたら、

整数は、Long
少数は、Double
文字は、String

まずは、これくらいを覚えておけば十分でしょう。
マクロ(VBA)では、非常に便利なものがあって、
上記の表の一番下の、Variantは何でも入れる事が出来るデータ型です

そして、Asを書かずにデータ型を指定しないと、Variantになります。
つまり、データ型を指定しなければ、それで良いと言う事になります。
データ型は、もう少しマクロが上達してから覚えても遅くありません。
とはいえ、上に書いた、Long,Double,Stringくらいは覚えておきましょう。

変数の使い方

変数は「宣言」するという言い方をします。

Dim 変数名 [As データ型]

これがDimによる変数宣言です。
[As データ型]の[ ]の中は省略可能という意味です。
省略すれば、前記のVariant型になって、何でも入れる事が出来ます

ちなみにDimはdimensionの略ですので、興味のある人はネットで調べてみて下さい。

また、変数名は、1行に複数書く事が出来ます。
Dim 変数名 [As データ型], 変数名 [As データ型], ・・・
このように、,(カンマ)で区切って、複数の変数を1行に書く事が出来ます。
このとき、変数一つ一つにデータ型を指定する必要があります、
Dim i, j, k As Long
これでは、iとjはデータ型を省略したことになり、iとjはVariant、kはLongになってしまいます。

変数「i」を長整数型で宣言で宣言
Dim i As Long

「i」には、整数しか入れることができません。

変数「i」と「j」をバリアント型で宣言
Dim i, j

「i」と「j」には、どんなデータでも入れることができます。

変数「sheet_name」を文字列型で宣言
Dim sheet_name As String

「sheet_name」には文字列を入れることができます。
文字列とは、数字も含めたキーボードから入力する文字全てです。

変数「科目名」を文字列型で宣言
Dim 科目名 As String

「科目名」には文字列を入れることができます。
このように漢字を使った日本語で変数を宣言することもできます。

変数名の規則

・半角、全角の数字と文字を使えます
・変数名の長さは、半角で255文字以内(全角なら127文字以内)です。
・記号はアンダーバーのみ使用可能(ピリオドやスペースは使用できない
・1文字目は、数字、_アンダーバー、記号を使用することができない
・VBAが意味を持たせている語句は使用できない
・大文字、小文字の区別がなく、同様に扱われる。


以上は最低限の決まりですが、これは普通に書けば大抵は問題ありません。
・なるべく入れるデータが容易に想像できる名称にする。
まずは、分かりやすい名前を付ける事を意識すれば良いでしょう。

・VBAのステートメント、オブジェクト、プロパティ、メソッドの名称は使用しない。
これらについては今後少しずつ学べば良いものです。
今はそのようなものがあるのだと言う程度で構いません。

良く使われる変数名

変数名は慣習的に良く使われる命名があります。

Dim i, j, k

これらは数値のみを扱い、特にセル行数や列数に使用されることが多いです。

Dim cnt As Long

件数をカウントする時に良く使われるのがcntです。
cntはcountの略になります。
このように英単語の母音を取った略文字は結構く使われています。

行数のカウントに使う変数であれば、このようにi,jで構いませんが、
その他の変数は、
使用目的が極力わかるような意味のある変数名を指定するようにしましょう。

また、データ型の略文字を先頭に付ける事も多く用いられます。

Dim lngNo As Long

これは、長整数型のLongの略であるlngを頭につけて、
「整数の番号を入れる変数です。」と宣言していることになります。
このような変数名の付け方は、ハンガリアン記法と呼ばれます。
ハンガリアン記法については、昨今は批判的な意見もありますが、
VBAは古いプログラミング言語なので、新しい言語と同列に語るべきではありません。
特段にハンガリアン記法を進めるわけではありませんが、
基本的な命名方法として、必ず覚えておくべき記法になります。
先の変数名の規則にもあったように、全角の日本語も使用できます。

Dim 行数 As Long

これは、長整数型で、行番号を入れますよと宣言していますね。
日本語の変数名に関しては賛否両論あるようですが、
現在のPC事情(ハード、ソフト両面での)を考えた時、
日本語の変数名の是非を論ずる事自体が無意味です。

分かりやすければ、それが一番良いのです。
それ以上でも、それ以下でもありません。

最初のうちは、書籍やネットで見かける変数を真似していけばよいでしょう。
少しずつ、自分でつけたい変数名が出来てくるものです。

自動型変換、暗黙の型変換

VBAには、型を自動的に変換する仕様があります。
自動型変換暗黙の型変換
このように呼ばれます。

Dim i As String
i = 123
i = "123"

どちらも同じで、文字列として"123"が入ります。

Dim j As Long
j = "123"
j = 123

どちらも同じで、数値として123が入ります。

Dim i As String
Dim j As Long
i = "123"
j = i

変数jには、数値として正しく123が入ります。
代入(=)によりString型からLong型に自動変換されます。

Dim j As Long
j = "abc"

これはエラーになります。

VBA マクロ Dim データ型

VBAでは、代入(=)や演算においては、自動型変換されます。
しかし、型変換できない場合は、エラーになります。
例えば、数値型の変数に文字列を入れた場合や、文字列を計算した場合等。

代入の場合
代入先の型に自動的に変換して代入されます。
この時、代入先の型に変換できない場合に型エラーとなります。
そのデータ型が格納できる数値範囲を超えている場合もエラーになります。

演算の中では
演算子によって自動的に型変換されます。
算術演算子であれば、数値変換後に計算されます。
ただし、
+演算子は、足し算の演算子であると同時に文字列結合の演算子でもあるので、
2項とも数値なら足し算、片方でも文字列なら文字列結合が行われます。
(文字列結合については次々回に説明します。)

変数宣言の必要性

変数はかならず宣言しましょう。

VBEのオプションで、「変数の宣言を強制する」にチェックを付けました。
マクロを書き始める前に、ちょっと設定しておいた方が良いオプションがあります。いえ、絶対に設定しておかなければならないVBEのオプション設定です、必ず、最初に設定しておいてください。VBEの「ツール」→「オプション」以下の画面が出ます。
これにチェックを付けた以降に標準モジュール挿入すると、

Option Explicit

これが、標準モジュールの先頭に自動的に挿入されるようになります。
これは、変数は必ず宣言してから使います。
とエクセルに伝えたことになります。

これにより、変数を宣言しないで、いきなり使い始めると、
「変数宣言すると言ったのに、宣言してないぞー」
と、エクセルが怒ります。
エクセルに怒られないように、変数は必ず宣言して下さい。

Dim変数宣言のまとめ

Dim 変数名 [As データ型]
・変数は必ず宣言してから使います。
・[As データ型]は省略できます。省略した場合はVariantになり全てのデータを入れられます。
・変数名にはいくつかの規則があります。先頭に数字は使えない、記号は_アンダーバーのみ。
・変数名は分かりやすい名前を付ける。
まずは、これくらいを覚えておけばVBAを書く上では当面困ることはないでしょう。

変数は非常に奥深く、プログラミングの要点ともいえるものです。
少しずつじっくりと習得していけば良いです。
ご自身で書きやすく読みやすい変数名を使えるようになってください。

この機会に、以下も読んでおくと良いでしょう。
変数と定数|VBAエキスパート
・変数の意味 ・変数の宣言 ・変数の代入と取得 ・スコープ ・定数の意味と使い方 【ここでのポイント】 変数・定数の宣言とその適用範囲(スコープ)をしっかり覚えて下さい。試験対策としては、・データ型 ・スコープ このあたりは、問題が作りやすいと思われます。



同じテーマ「マクロVBA入門」の記事

第10回.Range以外の指定方法(Cells,Rows,Columns)
第11回.RangeとCellsの使い方
第38回.セルに計算式を設定(Formula)
第12回.変数宣言のDimとデータ型
第13回.定数宣言のConstと型宣言文字
第14回.文字の結合(&アンパサンド)と継続行(_アンダーバー)
第15回.四則演算と注釈(コメント)
第16回.繰り返し処理(For Next)
第17回.繰り返し処理(Do Loop)
第18回.最終行の取得(End,Rows.Count)
第19回.総合練習問題1


新着記事NEW ・・・新着記事一覧を見る

多階層フォルダ(ディレクトリ)の作成|VBAサンプル集(7月31日)
VBAのインデントについて|VBA技術解説(7月16日)
「VBA Match関数の限界」についての誤解|エクセル雑感(7月15日)
省略可能なVariant引数の参照不可をラップ関数で利用|VBA技術解説(7月12日)
100桁の正の整数値の足し算|エクセル雑感(7月9日)
LSetとユーザー定義型のコピー(100桁の足し算)|VBA技術解説(7月9日)
Variant仮引数のByRefとByValの挙動違い|エクセル雑感(7月5日)
Variant仮引数にRange.Valueを配列で渡す方法|エクセル雑感(7月5日)
Variantの数値型と文字列型の比較|エクセル雑感(7月1日)
VBAのVariant型について|VBA技術解説(6月30日)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.RangeとCellsの使い方|VBA入門
3.変数宣言のDimとデータ型|VBA入門
4.マクロって何?VBAって何?|VBA入門
5.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
6.繰り返し処理(For Next)|VBA入門
7.Range以外の指定方法(Cells,Rows,Columns)|VBA入門
8.セルに文字を入れるとは(Range,Value)|VBA入門
9.とにかく書いてみよう(Sub,End Sub)|VBA入門
10.マクロはどこに書くの(VBEの起動)|VBA入門




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。



このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ