第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の基本型(プリミティブ型)になります。
最初に覚えるとしたら、
小数は、Double
文字は、String
マクロ(VBA)では、非常に便利なものがあって、
上記の表の一番下の、Variantは何でも入れる事が出来るデータ型です。
つまり、データ型を指定しなければ、それで良いと言う事になります。
データ型は、もう少しマクロが上達してから覚えても遅くありません。
とはいえ、上に書いた、Long,Double,Stringくらいは覚えて使えるようにしておきましょう。
変数の使い方
[As データ型]の[ ]の中は省略可能という意味です。
省略すれば、前記のVariant型になって、何でも入れる事が出来ます。
Dim 変数名 [As データ型], 変数名 [As データ型], ・・・
このように、,(カンマ)で区切って、複数の変数を1行に書く事が出来ます。
このとき、変数一つ一つにデータ型を指定する必要があります、
Dim i, j, k As Long
これでは、iとjはデータ型を省略したことになりVariant、kはLongになってしまいます。
Dim i As Long
「i」には、整数しか入れることができません。
Dim i, j
「i」と「j」には、どんなデータでも入れることができます。
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、これらの文字が使われることが多いです。
その他の変数は、
使用目的が極力わかるような意味のある変数名を指定するようにしましょう。
Dim lngNo As Long
これは、長整数型のLongの略であるlngを頭につけて、
「整数の番号を入れる変数です。」と宣言していることになります。
このような変数名の付け方は、ハンガリアン記法と呼ばれます。
VBAは古いプログラミング言語なので、新しい言語と同列に語るべきではありません。
特段にハンガリアン記法を勧めるわけではありませんが、
基本的な命名方法として、必ず覚えておくべき記法になります。
日本語の変数名に関しては賛否両論あるようですが、
現在のPC事情(ハード、ソフト両面での)を考えた時、
日本語の変数名の是非を論ずる事自体が無意味です。
それ以上でも、それ以下でもありません。
少しずつ、自分でつけたい変数名が出来てくるものです。
自動型変換、暗黙の型変換
自動型変換、暗黙の型変換
このように呼ばれます。
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"
これはエラーになります。
しかし、型変換できない場合は、エラーになります。
例えば、数値型の変数に文字列を入れた場合や、文字列を計算した場合等です。
この時、代入先の型に変換できない場合に型エラーとなります。
そのデータ型が格納できる数値範囲を超えている場合もエラーになります。
Integerは-32,768 ~ 32,767の範囲ですので、この範囲外の数値を入れるとエラーになります。
算術演算子であれば、数値変換後に計算されます。
ただし、
+演算子は、足し算の演算子であると同時に文字列結合の演算子でもあるので、
2項とも数値なら足し算、片方でも文字列なら文字列結合が行われます。
(文字列結合については次々回に説明します。)
変数宣言の必要性
これは、「変数は必ず宣言してから使います。」
とエクセルに伝えたことになります。
「変数宣言すると言ったのに、宣言してないぞー」
と、エクセルが怒ります。
エクセルに怒られないように、変数は必ず宣言して下さい。
Dim変数宣言のまとめ
✅[As データ型]は省略できます。省略した場合はVariantになり全てのデータを入れられます。
✅変数名には規則があります。記号は_アンダーバーのみ。先頭に数字とアンダーバーは使えない。
✅変数名は分かりやすい名前を付ける。
少しずつじっくりと習得していけば良いです。
ご自身で書きやすく読みやすい変数名を使えるようになってください。
同じテーマ「マクロ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 ・・・新着記事一覧を見る
TRIMRANGE関数(セル範囲をトリム:端の空白セルを除外)|エクセル入門(2024-08-30)
正規表現関数(REGEXTEST,REGEXREPLACE,REGEXEXTRACT)|エクセル入門(2024-07-02)
エクセルが起動しない、Excelが立ち上がらない|エクセル雑感(2024-04-11)
ブール型(Boolean)のis変数・フラグについて|VBA技術解説(2024-04-05)
テキストの内容によって図形を削除する|VBA技術解説(2024-04-02)
ExcelマクロVBA入門目次|エクセルの神髄(2024-03-20)
VBA10大躓きポイント(初心者が躓きやすいポイント)|VBA技術解説(2024-03-05)
テンキーのスクリーンキーボード作成|ユーザーフォーム入門(2024-02-26)
無効な前方参照か、コンパイルされていない種類への参照です。|エクセル雑感(2024-02-17)
初級脱出10問パック|VBA練習問題(2024-01-24)
アクセスランキング ・・・ ランキング一覧を見る
1.最終行の取得(End,Rows.Count)|VBA入門
2.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
3.変数宣言のDimとデータ型|VBA入門
4.繰り返し処理(For Next)|VBA入門
5.RangeとCellsの使い方|VBA入門
6.ブックを閉じる・保存(Close,Save,SaveAs)|VBA入門
7.セルのクリア(Clear,ClearContents)|VBA入門
8.メッセージボックス(MsgBox関数)|VBA入門
9.条件分岐(Select Case)|VBA入門
10.マクロとは?VBAとは?VBAでできること|VBA入門
このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。