VBA入門
定数宣言のConstと型宣言文字

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

第13回.定数宣言のConstと型宣言文字


前回は変数を説明しましたが、変数があれば当然のように定数もあります。
変数は値が変わる(変えられる)もの定数は値が変わらない(変えられない)ものです。


定数とは、数値や文字列の代わりに使用される意味を持たせた名前のことです。

VBAプログラムの中で同じ値を何度も使うことがあります。
また、
覚えておくことが困難な数値や、使い方が分かりにくい値をVBAで使うことが必要になることもあります。
このような場合には定数を使います。
定数は、Constで宣言します。


Const定数の基本

Const 定数名 [As データ型] = "定数の値"

このように宣言します。
変数との違いは、VBA実行の途中で値を変更できない事です。
一度宣言したら、ずっとその値のままで使用します。

Const strタイトル As String = "見出し"
Const int開始行 = 3

このように宣言し、
"見出し"という文字の代わりに、strタイトルを、
3という数値の代わりに、int開始行を使うようにします。

この定数宣言をした以降のVBAの行では、
strタイトル"見出し"という文字、int開始行3という数値として使う事ができるようになります。

定数を使う事の利点を簡単に書くと以下になります。
意味のない数値や長い文字を、分かりやすい名称で使う事が出来ます。
同じ文字や数値を、VBA内で何度も記述しなくて済みます。
文字や数値を変更する場合、Const定数だけを修正すれば良く「保守性」が高まります。


変数でも同じ事が出来るが・・・

Dim int開始行
int開始行 = 3


このようにすれば、定数を使わなくても済みそうです。
わざわざ、Constを覚える必要がないのでは・・・

確かに、マクロの動作としては同じことになります。
ですが、マクロを処理手順を記載した文章として考えて下さい。

int開始行は値を変えることがあるのか無いのか・・・

マクロを見たときに一目でわかる方が、手順書として優れていることは間違いないはずです。
つまり、「可読性」の問題だという事です。
逆に言えば、見た目だけの違いなので、変数だけを使ったマクロでも、特に何も支障はないという事です。

※注意).VBAを学んでいくと
ここを読んでいる段階では、まだ理解が難しいので、
「「可読性」の問題だという事」と書きましたが、
VBAの中には、変数は指定できない場所があります。

VBAには変数で指定すると、「定数式が必要です」とエラーになる場合があります。
その場所には、定数を指定しなければならないということです。

・Const定義の定数
・配列宣言の要素数 ・・・ ずっと先の学習内容です。

このような定数を指定しなければならない場所では変数は指定できません。
今後VBAの学習を進めていくうえで、「定数式が必要です」というメッセージを見た時になんとなく思い出せれば十分です。
Dim a As Long
a = 1
Const b As Long = a

マクロ VBA入門 Const 定数


ダブルクォーテーションについて

ここまでの説明で、
文字は、"(ダブルクォーテーション)で囲み、
数値は、そのまま書いていることは、気づきましたか。

これは理屈抜き、そのように指定するものだと理解して下さい。
ただし、VBAでは数値を"で囲んでも問題ありません。

数値型の変数・定数に入れるときは数値をそのまま書き、
文字列型の変数・定数に入れるときは"で囲むと分かり安いでしょう。


型宣言文字

前回の変数の説明では、データ型はまだ覚えなくて良いと説明しました。
これは正しいです。
しかし、ネット等のサンプルを見た場合に、意味が分からなくては困ります。

全てを記憶し使いこなす必要はありませんが、 どんな型があるかくらいは知っておく必要があるでしょう。
そして、データ型に関しては、もう一つの指定方法があります。
それが、型宣言文字です。

型宣言文字 変数の型
% Integer(整数型)
& Long(長整数型)
! Single(単精度浮動小数点型)
# Double(倍精度浮動小数点型)
@ Currency(通貨型)
^ Longlong(64ビット符号付き数値)※64ビットExcelのみ有効
$ String(文字列型)

Dim i%
Const j& = 123456

このように宣言することで、データ型を指定できます。

プログラム内において、リテラル値(定数値)を指定する場合にも使います。
123%
123&

このように、同じ数値でも、
Integer型の数値なのか、Long型の数値なのかを指定することが出来ます。

しかし、これは、もっとマクロを覚えてからで良いですし、
特に使わなければ出来ないと言うような事もありませんので、
このような指定もあるのだと、記憶の片隅に置いておけばよいです。

16進定数、8進定数

頻繁に使う事はないと思いますが、
指定方法だけ掲載しておきます。

16進 : &H
8進 : &O


Const i1 As Long = &H11 '16進数の11なので10進数で17
Const i2 As Long = &O11 '8進数の11なので10進数で9

日付の定数に関する注意

Const 日付定数 As Date = 2011 / 12 / 28 '←ダメ!
このように指定してしまう事がありますが、これは間違いです。
私もたまにやってしまいます。(笑)

2011 / 12 / 28 は、2011 ÷ 12 ÷ 28 の計算結果の数値となってしまいます。
日付の定数を指定する場合は、
Const 日付定数 As Date = #12/28/2011#
このように、#で囲みます。
#12/28/2011#の部分は、
#2011/12/28# と入力しても、自動的に#12/28/2011#に変換されます。

型宣言文字については、このようなものがあるのだとだけ覚えておけば十分です。


Constにデータ型を指定しない場合のデータ型

Asで定数の型を明示的に宣言しない場合、定数は指定した式に最も適したデータ型になります。

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つになります。

組み込み定数 ・・・ VBAに用意されている定数
ユーザー定義の定数 ・・・ 独自に設定する定数。ここまでに説明したものです。
条件付きコンパイル定数 ・・・ 条件によりコンパイルを変更できます。こちらのページを参照してください。
条件付きコンパイルは、VBAの特定のコードブロックを選択してコンパイルします、VBAの他の部分は無視されます、条件付きコンパイルステートメントは、実行時ではなくコンパイル時に実行されます。条件に基づいてコンパイルするコードのブロックを指定するには #If...Then...#Elseディレクティブを使用します。

組み込み定数について
VBA共通の組み込み定数
vb○○○
このようにvbで始まります。

mso○○○
このようにmsoで始まります。

xl○○○
このようにxlで始まります。

定数には、単独としての定数と列挙体があります。
列挙体についての詳細はここでは割愛しますが、
列挙体は、数値限定のConst定数をひとまとめにして参照しやすくしたものになります。マクロVBAの中で、意味を持つ固定数値を直接記述することは、マジックナンバーとも呼ばれメンテナンス性がとても悪いものになってしまいます 例えば、列位置3(C列)を参照する場合、VBA内で何度も3と記述していては後で変更することが大変…
複数の数値定数をひとまとめにしてグループ化したものになります。

VBAは、Office全般で使える共通のプログラミング言語です。
従って、
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 ・・・新着記事一覧を見る

VLOOKUPを使うことを基本としてシートを設計すべきか|エクセル雑感(2021-08-17)
コンピューターはブラックボックスで良い|エクセル雑感(2021-08-14)
小文字"abc"を大文字"ABC"に変換する方法|エクセル雑感(2021-08-13)
ADOでテキストデータを集計する|VBAサンプル集(2021-08-04)
VBA学習のお勧めコース|エクセル雑感(2021-08-01)
エクセル馬名ダービー|エクセル雑感(2021-07-21)
在庫を減らせ!毎日棚卸ししろ!|エクセル雑感(2021-07-05)
日付型と通貨型のValueとValue2について|エクセル雑感(2021-06-26)
DXってなんだ? ITと何が違うの?|エクセル雑感(2021-06-24)
エクセルVBA 段級位 目安|エクセル雑感(2021-06-21)


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

1.最終行の取得(End,Rows.Count)|VBA入門
2.Excelショートカットキー一覧|Excelリファレンス
3.変数宣言のDimとデータ型|VBA入門
4.RangeとCellsの使い方|VBA入門
5.繰り返し処理(For Next)|VBA入門
6.マクロって何?VBAって何?|VBA入門
7.Range以外の指定方法(Cells,Rows,Columns)|VBA入門
8.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
9.セルに文字を入れるとは(Range,Value)|VBA入門
10.とにかく書いてみよう(Sub,End Sub)|VBA入門




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


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



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