VBA入門
変数宣言のDimとデータ型

ExcelマクロVBAの基本と応用、エクセルVBAの初級・初心者向け解説
公開日:2013年5月以前 最終更新日:2022-06-07

第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はデータ型を省略したことになり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

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


変数に値を入れる

Dim i As Long
i = 123

変数はiは長整数型 の変数で、その変数に数値の123を入れています。

Dim bookName As String
bookName = "Book1.xlsm"

変数はbookNameは文字列型 の変数で、その変数に文字列の"Book1.xlsm"を入れています。
シートの数式と同様に、文字列は"ダブルクォーテーションで囲みます。

Dim i As Long
Dim j As Long
i = 123
j = i + 1 

変数iに123をいれ、
変数i+1した値を変数jに入れています。
変数jに入る値は124になります。


変数名の規則

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

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

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


良く使われる変数名

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

Dim i, j, k

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

Dim cnt As Long

件数をカウントする時に良く使われるのがcntです。
cntはcountの略になります。
このように英単語の母音を取った略文字は結構く使われています。
他には例えば年月日時分秒は、y,m,d,h,m,s、これらの文字が使われることが多いです。

行数のカウントに使う変数であれば、このように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では、代入(=)や演算においては、自動型変換されます。
しかし、型変換できない場合は、エラーになります。
例えば、数値型の変数に文字列を入れた場合や、文字列を計算した場合等です。

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

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


変数宣言の必要性

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

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

Option Explicit

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

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


Dim変数宣言のまとめ

Dim 変数名 [As データ型]

✅変数は必ず宣言してから使います。
✅[As データ型]は省略できます。省略した場合はVariantになり全てのデータを入れられます。
✅変数名には規則があります。記号は_アンダーバーのみ。先頭に数字とアンダーバーは使えない。
✅変数名は分かりやすい名前を付ける。

まずは、これくらいを覚えておけばVBAを書く上では当面困ることはないでしょう。

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

この機会に、以下も読んでおくと良いでしょう。
変数と定数|VBAエキスパート
・【ここでのポイント】 ・変数の意味 ・変数の宣言 ・変数の代入と取得 ・スコープ ・定数の意味と使い方 ・変数に関係する注意すべきVBAの仕様 ・【業務改善の実務】 ・【本サイト内の関連ページ】 ・VBAエキスパート公式テキスト




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

第10回.Range以外の指定方法(Cells,Rows,Columns)

・Cells(行番号, 列番号) ・Rows(行番号) ・Columns(列番号) ・RangeとCellsの関連記事
第11回.RangeとCellsの使い方
・RangeとCellsの基本的な使い分け方 ・固定セル(固定位置)の指定 ・Rangeに変数は使わないようにします ・1つの(VBAで位置を変化させる)セルを指定する場合 ・セル範囲(複数セル)を指定する場合 ・複数行全体、複数列全体の指定 ・RangeとCellsの使い分け方のまとめ ・RangeとCellsの基本の関連記事 ・RangeとCellsの応用の関連記事
第38回.セルに計算式を設定(Formula)
・計算式を設定できるプロパティ ・Valueプロパティ ・Formulaプロパティ , FormulaLocalプロパティ ・FormulaR1C1プロパティ , FormulaR1C1Localプロパティ ・R1C1参照形式 ・Localが付くプロパティについて ・それぞれの違い(Localは除く) ・何故、こんなに多くのプロパティが存在しているのか ・R1C1形式を使うメリット ・たった1行のVBAで複数のセルに計算式を入れる
第12回.変数宣言のDimとデータ型
第13回.定数宣言のConstと型宣言文字
・Const定数の基本 ・変数でも同じ事が出来るが・・・ ・ダブルクォーテーションについて ・型宣言文字 ・Constにデータ型を指定しない場合のデータ型 ・その他の定数 ・Const変数宣言のまとめ
第14回.文字の結合(&アンパサンド)と継続行(_アンダーバー)
あるセルの文字と、あるセルの文字をくっつけて、別のセルに表示する、よくある事例であり、頻繁に行われることです。A1セルに"abc" B1セルに"123" この時に、C1セルに"abc123"を入れるような場合のマクロVBAになります。
第15回.四則演算と注釈(コメント)
エクセルは表計算ソフトですから、計算が出来なくては話になりません。四則演算(加減剰余)は必須です。この四則演算で使う算術演算の演算子は、ワークシートの演算子と同じです。あわせて、注釈(コメント)の書き方も覚えましょう。
第16回.繰り返し処理(For Next)
・For Next ステートメント ・For Next 例文 ・For Next をステップ イン実行で目で見て確認しましょう。 ・1行置きに処理する場合 ・Exit For ・For~Nextのネスト(入れ子) ・最後に一言
第17回.繰り返し処理(Do Loop)
・Do~Loopの構文 ・条件式 ・Do Loop 例文 ・Exit Do ・Do~Loopのネスト(入れ子) ・最後に一言
第18回.最終行の取得(End,Rows.Count)
・エクセルVBAにおける最終行取得の必要性 ・.End(xlDown):Ctrl+↓ ・.End(xlUp):Ctrl+↑ ・Endプロパティの方向(↑↓←→)について ・セルの行数を取得するRowプロパティ ・Cells(Rows.Count, 1).End(xlUp).Rowを日本語に訳す ・EndプロパティがRangeオブジェクトを返す ・Endプロパティの問題点 ・最終行に関するサイト内のページ
第19回.総合練習問題1
・マクロVBA練習問題 ・シンキングタイム ・マクロVBA練習問題解答へ


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

VBA10大躓きポイント(初心者が躓きやすいポイント)|VBA技術解説(2024-03-05)
テンキーのスクリーンキーボード作成|ユーザーフォーム入門(2024-02-26)
無効な前方参照か、コンパイルされていない種類への参照です。|エクセル雑感(2024-02-17)
初級脱出10問パック|VBA練習問題(2024-01-24)
累計を求める数式あれこれ|エクセル関数応用(2024-01-22)
複数の文字列を検索して置換するSUBSTITUTE|エクセル入門(2024-01-03)
いくつかの数式の計算中にリソース不足になりました。|エクセル雑感(2023-12-28)
VBAでクリップボードへ文字列を送信・取得する3つの方法|VBA技術解説(2023-12-07)
難しい数式とは何か?|エクセル雑感(2023-12-07)
スピらない スピル数式 スピらせる|エクセル雑感(2023-12-06)


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

1.最終行の取得(End,Rows.Count)|VBA入門
2.RangeとCellsの使い方|VBA入門
3.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
4.繰り返し処理(For Next)|VBA入門
5.変数宣言のDimとデータ型|VBA入門
6.ブックを閉じる・保存(Close,Save,SaveAs)|VBA入門
7.並べ替え(Sort)|VBA入門
8.条件分岐(IF)|VBA入門
9.セルのクリア(Clear,ClearContents)|VBA入門
10.マクロとは?VBAとは?VBAでできること|VBA入門




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


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



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