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

ExcelマクロVBAの基本と応用、エクセルVBAの初級・初心者向け解説
公開日:2013年5月以前 最終更新日: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で始まります。

定数には、単独としての定数と列挙体があります。
列挙体についての詳細はここでは割愛しますが、
・Enumステートメント ・列挙型(Enumステートメント)の使用例 ・列挙型(Enumステートメント)の活用について
複数の数値定数をひとまとめにしてグループ化したものになります。

VBAは、Office全般で使える共通のプログラミング言語です。
従って、
VBA全体としての共通部分と、ExcelVBA独自の部分があります。


Const変数宣言のまとめ

多くの事を説明しましたが、後半はまだ直ぐには理解できなくても何も問題はありません。
ここでしっかりと覚えてほしいことは、
マクロVBAの中で変化させる必要のない決まった数値・文字はConstで定数として宣言することができるということです。




同じテーマ「マクロVBA入門」の記事

第11回.RangeとCellsの使い方

・RangeとCellsの基本的な使い分け方 ・固定セル(固定位置)の指定 ・Rangeに変数は使わないようにします ・1つの(VBAで位置を変化させる)セルを指定する場合 ・セル範囲(複数セル)を指定する場合 ・複数行全体、複数列全体の指定 ・RangeとCellsの使い分け方のまとめ ・RangeとCellsの基本の関連記事 ・RangeとCellsの応用の関連記事
第38回.セルに計算式を設定(Formula)
・計算式を設定できるプロパティ ・Valueプロパティ ・Formulaプロパティ , FormulaLocalプロパティ ・FormulaR1C1プロパティ , FormulaR1C1Localプロパティ ・R1C1参照形式 ・Localが付くプロパティについて ・それぞれの違い(Localは除く) ・何故、こんなに多くのプロパティが存在しているのか ・R1C1形式を使うメリット ・たった1行のVBAで複数のセルに計算式を入れる
第12回.変数宣言のDimとデータ型
・データ型 ・変数の使い方 ・変数名の規則 ・良く使われる変数名 ・自動型変換、暗黙の型変換 ・変数宣言の必要性 ・Dim変数宣言のまとめ
第13回.定数宣言のConstと型宣言文字
第14回.文字の結合(&アンパサンド)と継続行(_アンダーバー)
あるセルの文字と、あるセルの文字をくっつけて、別のセルに表示する、よくある事例であり、頻繁に行われることです。A1セルに"abc" B1セルに"123" この時に、C1セルに"abc123"を入れるような場合のマクロVBAになります。
第15回.四則演算と注釈(コメント)
エクセルは表計算ソフトですから、計算が出来なくては話になりません。四則演算(加減剰余)は必須です。この四則演算で使う算術演算の演算子は、ワークシートの演算子と同じです。あわせて、注釈(コメント)の書き方も覚えましょう。
第16回.繰り返し処理(For Next)
・For Next ステートメント ・For Next 例文 ・For Next をステップ イン実行で目で見て確認しましょう。 ・1行置きに処理する場合 ・Exit For ・For~Nextのネスト(入れ子) ・最後に一言
第17回.繰り返し処理(Do Loop)
・Do~Loopの構文 ・条件式 ・Do Loop 例文 ・Exit Do ・Do~Loopのネスト(入れ子) ・最後に一言
第18回.最終行の取得(End,Rows.Count)
・エクセルVBAにおける最終行取得の必要性 ・.End(xlDown):Ctrl+↓ ・.End(xlUp):Ctrl+↑ ・Endプロパティの方向(↑↓←→)について ・セルの行数を取得するRowプロパティ ・Cells(Rows.Count, 1).End(xlUp).Rowを日本語に訳す ・EndプロパティがRangeオブジェクトを返す ・Endプロパティの問題点 ・最終行に関するサイト内のページ
第19回.総合練習問題1
・マクロVBA練習問題 ・シンキングタイム ・マクロVBA練習問題解答へ
第20回.条件分岐(IF)
・Ifステートメントの構文 ・IFステートメントの条件式 ・Ifステートメントの使用例文 ・Ifステートメントのネスト(入れ子) ・サイト内のIfステートメント参考ページ ・最後に


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

VBA10大躓きポイント(初心者が躓きやすいポイント)|VBA技術解説(2024-03-05)
テンキーのスクリーンキーボード作成|ユーザーフォーム入門(2024-02-26)
無効な前方参照か、コンパイルされていない種類への参照です。|エクセル雑感(2024-02-17)
初級脱出10問パック|VBA練習問題(2024-01-24)
累計を求める数式あれこれ|エクセル関数応用(2024-01-22)
複数の文字列を検索して置換するSUBSTITUTE|エクセル入門(2024-01-03)
いくつかの数式の計算中にリソース不足になりました。|エクセル雑感(2023-12-28)
VBAでクリップボードへ文字列を送信・取得する3つの方法|VBA技術解説(2023-12-07)
難しい数式とは何か?|エクセル雑感(2023-12-07)
スピらない スピル数式 スピらせる|エクセル雑感(2023-12-06)


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

1.最終行の取得(End,Rows.Count)|VBA入門
2.RangeとCellsの使い方|VBA入門
3.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
4.繰り返し処理(For Next)|VBA入門
5.変数宣言のDimとデータ型|VBA入門
6.ブックを閉じる・保存(Close,Save,SaveAs)|VBA入門
7.並べ替え(Sort)|VBA入門
8.条件分岐(IF)|VBA入門
9.セルのクリア(Clear,ClearContents)|VBA入門
10.マクロとは?VBAとは?VBAでできること|VBA入門




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


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



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