第13回.定数宣言のConstと型宣言文字
前回は変数を説明しましたが、変数があれば当然のように定数もあります。
変数は値が変わる(変えられる)もの、定数は値が変わらない(変えられない)ものです。
また、
覚えておくことが困難な数値や、使い方が分かりにくい値をVBAで使うことが必要になることもあります。
このような場合には定数を使います。
定数は、Constで宣言します。
Const定数の基本
変数との違いは、VBA実行の途中で値を変更できない事です。
一度宣言したら、ずっとその値のままで使用します。
Const strタイトル As String = "見出し"
Const int開始行 = 3
このように宣言し、
"見出し"という文字の代わりに、strタイトルを、
3という数値の代わりに、int開始行を使うようにします。
strタイトルは"見出し"という文字、int開始行は3という数値として使う事ができるようになります。
✅意味のない数値や長い文字を、分かりやすい名称で使う事が出来ます。
✅同じ文字や数値を、VBA内で何度も記述しなくて済みます。
✅文字や数値を変更する場合、Const定数だけを修正すれば良く「保守性」が高まります。
変数でも同じ事が出来るが・・・
int開始行 = 3
わざわざ、Constを覚える必要がないのでは・・・
ですが、マクロを処理手順を記載した文章として考えて下さい。
つまり、「可読性」の問題だという事です。
逆に言えば、見た目だけの違いなので、変数だけを使ったマクロでも、特に何も支障はないという事です。
「「可読性」の問題だという事」と書きましたが、
VBAの中には、変数は指定できない場所があります。
その場所には、定数を指定しなければならないということです。
・配列宣言の要素数 ・・・ ずっと先の学習内容です。
今後VBAの学習を進めていくうえで、「定数式が必要です」というメッセージを見た時になんとなく思い出せれば十分です。
Dim a As Long
a = 1
Const b As Long = a

ダブルクォーテーションについて
文字は、"(ダブルクォーテーション)で囲み、
数値は、そのまま書いていることは、気づきましたか。
ただし、VBAでは数値を"で囲んでも問題ありません。
文字列型の変数・定数に入れるときは"で囲むと分かり安いでしょう。
型宣言文字
これは正しいです。
しかし、ネット等のサンプルを見た場合に、意味が分からなくては困ります。
そして、データ型に関しては、もう一つの指定方法があります。
それが、型宣言文字です。
型宣言文字 | 変数の型 |
% | Integer(整数型) |
& | Long(長整数型) |
! | Single(単精度浮動小数点型) |
# | Double(倍精度浮動小数点型) |
@ | Currency(通貨型) |
^ | Longlong(64ビット符号付き数値)※64ビットExcelのみ有効 |
$ | String(文字列型) |
Dim i%
Const j& = 123456
このように宣言することで、データ型を指定できます。
123%
123&
このように、同じ数値でも、
Integer型の数値なのか、Long型の数値なのかを指定することが出来ます。
特に使わなければ出来ないと言うような事もありませんので、
このような指定もあるのだと、記憶の片隅に置いておけばよいです。
16進定数、8進定数
指定方法だけ掲載しておきます。
8進 : &O
Const i2 As Long = &O11 '8進数の11なので10進数で9
日付の定数に関する注意
このように指定してしまう事がありますが、これは間違いです。
私もたまにやってしまいます。(笑)
日付の定数を指定する場合は、
Const 日付定数 As Date = #12/28/2011#
このように、#で囲みます。
#12/28/2011#の部分は、
#2011/12/28# と入力しても、自動的に#12/28/2011#に変換されます。
Constにデータ型を指定しない場合のデータ型
Const 定数1 = 123 'Integer
Const 定数2 = 123456 'Long
Const 定数3 = 1.2 'Double
Const 定数4 = #7/27/2020# 'Date
Const 定数5 = "文字列" 'String
Const 定数12 = 123& 'Long
Const 定数13 = 123! 'Single
Const 定数14 = 123# 'Double
Const 定数15 = 123@ 'Currency
Const 定数16 = 123^ 'LongLong
※Integerの型文字#を整数値に指定しても、#が消えて整数値だけになります。
その他の定数
VBAには、あらかじめ用意された定数もあります。
定数を大別すると、以下の3つになります。
✅ユーザー定義の定数 ・・・ 独自に設定する定数。ここまでに説明したものです。
✅条件付きコンパイル定数 ・・・ 条件によりコンパイルを変更できます。こちらのページを参照してください。
組み込み定数について
このようにvbで始まります。
このようにmsoで始まります。
このようにxlで始まります。
列挙体についての詳細はここでは割愛しますが、
従って、
VBA全体としての共通部分と、ExcelVBA独自の部分があります。
Const変数宣言のまとめ
ここでしっかりと覚えてほしいことは、
マクロVBAの中で変化させる必要のない決まった数値・文字はConstで定数として宣言することができるということです。
同じテーマ「マクロVBA入門」の記事
第11回.RangeとCellsの使い方
第38回.セルに計算式を設定(Formula)
第12回.変数宣言のDimとデータ型
第13回.定数宣言のConstと型宣言文字
第14回.文字の結合(&アンパサンド)と継続行(_アンダーバー)
第15回.四則演算と注釈(コメント)
第16回.繰り返し処理(For Next)
第17回.繰り返し処理(Do Loop)
第18回.最終行の取得(End,Rows.Count)
第19回.総合練習問題1
第20回.条件分岐(IF)
新着記事NEW ・・・新着記事一覧を見る
列全体を指定する時のRangeとColumnsの違い|ツイッター出題回答 (2023-09-24)
シートのActiveXチェックボックスの指定方法|ツイッター出題回答 (2023-09-24)
ByRef引数の型が一致しません。|ツイッター出題回答 (2023-09-22)
シートコピー後のアクティブシートは何か|ツイッター出題回答 (2023-09-19)
Excel関数の引数を省略した場合について|ツイッター出題回答 (2023-09-14)
セル個数を返すRange.CountLargeプロパティとは|VBA技術解説(2023-09-08)
記号を繰り返してグラフ作成(10単位で折り返す)|ツイッター出題回答 (2023-08-28)
シートを削除:不定数のシート名に対応|VBAサンプル集(2023-08-24)
ランクによりボイントを付ける(同順位はポイントを分割)|ツイッター出題回答 (2023-08-22)
OneDrive使用時のThisWorkbook.Pathの扱い方|VBA技術解説(2023-07-26)
アクセスランキング ・・・ ランキング一覧を見る
1.最終行の取得(End,Rows.Count)|VBA入門
2.RangeとCellsの使い方|VBA入門
3.繰り返し処理(For Next)|VBA入門
4.変数宣言のDimとデータ型|VBA入門
5.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
6.マクロとは?VBAとは?VBAでできること|VBA入門
7.ブックを閉じる・保存(Close,Save,SaveAs)|VBA入門
8.並べ替え(Sort)|VBA入門
9.Range以外の指定方法(Cells,Rows,Columns)|VBA入門
10.条件分岐(IF)|VBA入門
このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。