変数と定数
・変数の意味
・変数の宣言
・変数の代入と取得
・スコープ
・定数の意味と使い方
【ここでのポイント】
・データ型
・スコープ
このあたりは、問題が作りやすいと思われます。
むしろ、ここさえ押さえておけば十分だという事です。
公式テキストには書かれていない事や、少々説明が不正確な部分があります。
出題する側からすると、ひっかけ問題を出しやすい部分でもあります。
※ひっかけ問題が出されるかどうかについては、何とも言えませんが。
これについては、最後に説明します。
変数の意味
値を一時的に記憶しておける名前の付けられた一時記憶領域。
入れるものによって、その形状が変わります。
形状に合わないものは入れられません。
これがデータ型です。
VBAに対して、この変数を使いますという事を宣言します。
変数の宣言
Dim 変数名2 As 型
・スペースや記号は使えません。
・変数名の先頭の文字は、英字、漢字、ひらがな、カタカナのいずれかでなければなりません。
・同一適用範囲 (スコープ) 内で同じ変数名を複数使うことはできません。
・変数名の長さは、半角で 255 文字以内でなければなりません。
・大文字、小文字の区別がなく、同様に扱われます。
・使える記号は、アンダスコア (_) のみ
・先頭文字には、数字、アンダスコア (_) は使えない。
これだけ覚えれば大丈夫なはずです。
とはいえ、慣習的な使われ方もありますので、サンプルコードで慣れておくと良いでしょう。
慣習的に使われている変数名を理解すると、他人のVBAコードを読む時の手助けになります。
型
データ型 | 名称 | 格納できる範囲 |
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日までの日付と時刻 |
Boolean | ブール型 | 真 (True) または偽 (False) |
Object | オブジェクト型 | オブジェクト |
Variant | バリアント型 | すべてのデータ |
(この数値を覚えようとはしないとは思いますが)
Integerは3万ちょっとしか入らないことは覚えて下さい。
つまり、シートの行数は入りきらないという事です。
型の省略
Variant
の変数になります。
複数の変数宣言における注意点
変数の宣言を強制する
変数は宣言しないと使えなくなります。
「変数の宣言を強制する」これにチェックを入れて、必ず変数宣言をすることが推奨されます。
変数の代入と取得
代入した後は、
変数名を書けばその値を書いたことと同じになります。
つまりその時点で変数から値を取得している事になります。
Range("A1") = 123
Range("B1") = 123
Dim i As Long
i = 123
Range("A1") = i
Range("B1") = i
この2つの結果は同じです。
文字列を変数に入れる場合は、文字列を"(ダブルクォーテーション)で囲みます。
Dim tmp As String
tmp = "VBA"
スコープ
適用範囲とは、宣言した変数を使う事のできる範囲という事です。
・ブックモジュール ・・・ ブックで1つだけ
・フォームモジュール ・・・ 作ったフォームの数だけ
・標準モジュール ・・・ 好きなだけ作れます
・クラス ・・・ ここでは説明を割愛します
ブックやシートのモジュールでも、適用範囲(スコープ)は同じ規則になります。
Sub sample1()
Dim i
・・・
End Sub
Sub sample2()
Dim i
・・・
End Sub
この場合、
モジュールレベル変数 ・・・ モジュール内でのみ使用可能
Dim i
Sub sample1()
Dim j
・・・
End Sub
Sub sample2()
Dim j
・・・
End Sub
モジュールの先頭(最初のSubまたはFunctionより前)
この部分を宣言セクションと呼びます。
モジュール全体で使用できる変数になります。
パブリック変数 ・・・ 全てのモジュールの全てのプロシージャーで使用可能
DimやPrivateで宣言した変数は、他のモジュールでは使用できません。
Public i
Sub sample1()
Dim j
・・・
End Sub
Sub sample2()
Dim j
・・・
End Sub
上記のように、Publicで宣言します。
定数の意味と使い方
また、
覚えておくことが困難な数値や、使い方が分かりにくい値をVBAで使う必要になることもあります。
定数を使用すると、コードが読みやすくなり、保守も容易になります。
・ユーザー定義の定数
・条件コンパイル定数 ・・・ これは試験範囲には有りませんので割愛します。
VBAの定数は、無効にすることはできないので、同じ名前のユーザー定義の定数を作成することはできません。
Range("A1").Font.ColorIndex = xlAutomatic
xlAutomaticの値は、-4105になります。
A1セルの塗りつぶしを「なし」にするには、
Range("A1").Interior.ColorIndex = xlColorIndexNone
このように書きます。
xlColorIndexNoneの値は、-4142 です。
この値も、-4142 です。
従って、以下でも同じになります。
Range("A1").Interior.ColorIndex = xlNone
同じ値でも、使用する場面に応じて使いやすい名前で定義してあります。
この数値を覚えなくて良いように定数が用意されているという事です。
vb○○○
このようにvbで始まります。
mso○○○
このようにmsoで始まります。
xl○○○
このようにxlで始まります。
列挙体は出題範囲にありませんので、詳細は割愛しますが、
従って、VBA全体としての共通部分と、
ExcelVBA独自の部分があります。
これ以降は、2の代わりに開始行と書くことが出来ます。
または、
Private Const 定数名 As 型 = 値
プロシージャー内のみ有効な定数となります。
パブリック定数 ・・・ 全てのモジュールの全てのプロシージャーで使用可能
定数のスコープ(適用範囲)
変数に関係する注意すべきVBAの仕様
自動型変換、暗黙の型変換
このように呼ばれます。
i = 123
これは、全く問題ありません。
i = "123"
これと同じで、文字列として"123"が入ります。
結果として、上の2つに違いはありません。
j = "123"
これも、全く問題ありません。
j = 123
これと同じで、数値として123が入ります。
結果として、上の2つに違いはありません。
Dim i As String
Dim j As Long
i = 123
j = "234"
MsgBox i + j
この結果は、357、と表示されます。
何の問題もなく計算されます。
Dim i As String
Dim j As String
i = 123
j = "234"
MsgBox i + j
MsgBox i - j
この結果は、123234、-111、と表示されます。
+は文字列として結合され、-は引き算されます。
文字列結合の演算子(&,+)であれば、文字列として結合されます。
2項とも数値なら足し算、片方でも文字列なら文字列結合が行われます。
VBAベーシックでここまで細かい問題は出ないとは思うのですが、
VBAには、
自動型変換、暗黙の型変換
このような仕様があるという事だけは覚えておいた方が良いでしょう。
【業務改善の実務】
これがないために、バグの原因が分からずに多大な時間を消費するといった事が実際にあります。
変数名は、極力わかり易い名称にしてください。
変数名を見れば、何に使う変数かがわかるようにするのが理想です。
ただし、あまり長い変数名は、VBAコーディングの効率を落とします。
そこで、慣用的に使われている略称を使う事は非常に有意義です。
わざわざ慣用的な略称を覚えるというより、
良いVBAサンプルを読みながら、それを真似することで少しずつ覚えて行ってください。
本質的な事を言えば、
モジュールレベル変数や、パプリック変数は極力少なくすべきものです。
プロシージャーレベルで良い変数をモジュールレベルで定義したり、
モジュールレベルで良い変数をパブリック定義するようなことは、
VBAの質として悪いものと言えますし、後々の変更時に苦労する原因にもなります。
【本サイト内の関連ページ】
第108回.変数の適用範囲(スコープ,Private,Public)
VBAエキスパート公式テキスト
こちらは必須として購入した方が良いでしょう。
書籍を購入することで、
・演習問題
・模擬問題プログラム
これらがダウンロードできるようになります。
このシリーズでは、テキストを読みながら学習していることを前提とします。
同じテーマ「VBAエキスパート対策」の記事
マクロとVBAの概念
マクロの記録
VBAの構文
変数と定数
セルの操作
ステートメント
ブックの操作
シートの操作
デバッグデの基礎
マクロの実行
VBAベーシック試験対策まとめ
新着記事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.条件分岐(Select Case)|VBA入門
9.メッセージボックス(MsgBox関数)|VBA入門
10.マクロとは?VBAとは?VBAでできること|VBA入門
- ホーム
- マクロVBA入門編
- VBAエキスパート対策
- 変数と定数
このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。