ExcelマクロVBA入門
第13回.定数宣言のConstと型宣言文字

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

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


前回は変数を説明しましたが、変数があれば、当然の定数もありConstで宣言します。
つまり、変数は値が変わるもの定数は値が変わらないものです。


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

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

Const定数の基本

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

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

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

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

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

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

Dim int開始行
int開始行 = 3



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

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

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

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

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

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

具体的なVBAをここで提示しても理解が追いつかないので、
今後VBAの学習を進めていくうえで、
「定数式が必要です」というメッセージを見た時になんとなく思い出せれば十分です。

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

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

これは理屈抜き、そのように指定するものだと理解して下さい。
ただし、
VBAでは、数値を"で囲んでも問題ありません。
数値型の変数・定数に入れるときは数値をそのまま書き、
文字列型の変数・定数に入れるときは"で囲むと分かり安いでしょう。

型宣言文字

前回の変数の説明では、データ型はまだ覚えなくて良いと説明しました。
これは正しいです。
しかし、ネット等のサンプルを見た場合に、意味が分からなくては困ります。
全てを記憶し、使いこなす必要はありませんが、 どんな型があるかくらいは知っておく必要があるでしょう。
そして、データ型に関しては、もう一つの指定方法があります。
それが、型宣言文字です。

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

Dim i%
Const j& = 123456



このように宣言することで、データ型を指定できます。
ただし、このような使い方をすることはあまりなく、
プログラム内において、リテラル値(定数値)を指定する場合に、
使う事がほとんどです。
123%
123&

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

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

16進定数、8進定数
さすがに、滅多に使う事はないと思いますが、
指定方法だけ掲載しておきます。

16進 : &H
8進 : &O


Const i1 As Long = &H10 '10進数で16
Const i2 As Long = &O10 '10進数で8
日付の定数に関する注意
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#に変換されます。

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

その他の定数

以上、独自に設定できる定数について説明してきましたが、
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入門」の記事

第10回.Range以外の指定方法(Cells,Rows,Columns)
第11回.RangeとCellsの使い方
第12回.変数宣言のDimとデータ型
第13回.定数宣言のConstと型宣言文字
第14回.文字の結合(&アンパサンド)と継続行(_アンダーバー)
第15回.四則演算と注釈(コメント)
第16回.繰り返し処理(For Next)
第17回.繰り返し処理(Do Loop)
第18回.最終行の取得(End,Rows.Count)
第19回.総合練習問題1
第20回.条件分岐(IF)


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

CSVの読み込み方法(ジャグ配列)(改)|VBAサンプル集(11月11日)
VBAでのCSVの扱い方まとめ|VBAサンプル集(11月9日)
VBAにおける変数のメモリアドレスについて|VBA技術解説(11月8日)
空文字列の扱い方と処理速度について(""とvbNullString)|VBA技術解説(1月7日)
Errオブジェクトとユーザー定義エラー|VBA入門(11月5日)
シングルクォートの削除とコピー(PrefixCharacter)|VBA技術解説(11月4日)
ユーザー定義型の制限とクラスとの使い分け|VBA技術解説(11月3日)
クリップボードに2次元配列を作成してシートに貼り付ける|VBA技術解説(11月1日)
VBAクラスを使ったイベント作成(Event,RaiseEvent,WithEvents)|VBA技術解説(10月31日)
VBAクラスのAttributeについて(既定メンバーとFor Each)|VBA技術解説(10月19日)


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

1.最終行の取得(End,Rows.Count)|VBA入門
2.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
3.RangeとCellsの使い方|ExcelマクロVBA入門
4.Range以外の指定方法(Cells,Rows,Columns)|VBA入門
5.変数宣言のDimとデータ型|ExcelマクロVBA入門
6.繰り返し処理(For Next)|ExcelマクロVBA入門
7.マクロって何?VBAって何?|ExcelマクロVBA入門
8.ひらがな⇔カタカナの変換|エクセル基本操作
9.空白セルを正しく判定する方法(IsEmpty,IsError,HasFormula)|VBA技術解説
10.セルに文字を入れるとは(Range,Value)|VBA入門



  • >
  • >
  • >
  • 定数宣言のConstと型宣言文字

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


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




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