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

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

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


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


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

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

データ型



データ型 名称 格納できる範囲
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.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事情(ハード、ソフト両面での)を考えた時、
日本語の変数名の是非を論ずる事自体が無意味です。

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

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

変数宣言の必要性

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

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

Option Explicit

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

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

Dim変数宣言のまとめ

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

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



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

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


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

トランザクション処理|SQL入門(12月11日)
インデックスを作成して高速化(CREATE INDEX)|SQL入門(12月9日)
他のテーブルのデータで追加/更新/削除|SQL入門(12月8日)
データの削除(DELETE)|SQL入門(12月7日)
データの更新(UPDATE)|SQL入門(12月6日)
複数のSELECT結果を統合(UNION,UNION ALL)|SQL入門(12月5日)
テーブルを結合して取得(INNER JOIN,OUTER JOIN)|SQL入門(12月4日)
データベースの正規化とマスタの作成|SQL入門(12月3日)
データベースにおけるNULLの扱い方|SQL入門(12月2日)
オブジェクト変数とは何か|VBA技術解説(12月2日)


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

1.最終行の取得(End,Rows.Count)|VBA入門
2.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
3.RangeとCellsの使い方|VBA入門
4.Range以外の指定方法(Cells,Rows,Columns)|VBA入門
5.変数宣言のDimとデータ型|VBA入門
6.繰り返し処理(For Next)|VBA入門
7.マクロって何?VBAって何?|VBA入門
8.セルに文字を入れるとは(Range,Value)|VBA入門
9.空白セルを正しく判定する方法(IsEmpty,IsError,HasFormula)|VBA技術解説
10.ひらがな⇔カタカナの変換|エクセル基本操作



  • >
  • >
  • >
  • 変数宣言のDimとデータ型

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


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



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