目次
概要
変数・定数に関するVBAのTIPS。
変数・定数とは
- 変数とは、数値や文字列など(すなわちデータ)を一時的に格納する入れ物。
- 入れ物(データ)のタイプ(型)を、データ型と言う。
- 定数とは、数値や文字列の代わりに使用される、意味を持たせた名前のこと。
- 定数は、値を変更できない。
データ型
| データ型 | 名称 | 格納できる範囲 |
| Integer | 整数型 | -32,768 ~ 32,767 |
| Long | 長整数型 | -2,147,483,648 ~ 2,147,483,647 |
| LongLong | 64ビット符号付き数値 | -9223372036854775808 ~ 9223372036854775807 ※64ビットプラットフォームのみで有効な宣言型 |
| 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日までの日付と時刻 |
| Byte | バイト型 | 0~255の範囲の単精度の正の数値。8 ビット(1 バイト) |
| Boolean | ブール型 | 真 (True) または偽 (False) |
| Object | オブジェクト型 | オブジェクト |
| Variant | バリアント型 | すべてのデータ |
- Variantは何でも入れる事が出来るデータ型。
- 変数宣言で、Asを書かずにデータ型を指定しないと、Variantになる。
変数宣言
Dim flag As Boolean ' Boolean(ブール)型 Dim num As Integer ' Integer(整数)型 Dim row As Long ' Long(長整数)型 Dim value As Single ' Single(単精度浮動少数点)型 Dim value As Double ' Double(倍精度浮動少数点)型 Dim today As Date ' Date(日付)型 Dim str As String ' String(文字列)型 Dim students() As String ' 配列(String配列) Dim var As Variant ' バリアント型 Dim b As Byte ' バイト型 Dim money As Currency ' 通貨型 Dim obj As Object ' オブジェクト型
宣言時の注意
変数名は、,(カンマ)で区切って、複数の変数を1行に複数書くことができるが、変数一つ一つにデータ型を指定する必要がある。
Dim 変数名 [As データ型], 変数名 [As データ型], ・・・
指定しない場合は、Variantになる。
命名
- 半角、全角の数字と文字を使える。
- 変数名の長さは、半角で255文字以内(全角なら127文字以内)。
- 記号はアンダーバーのみ使用可能(ピリオドやスペースは使用できない。
- 1文字目は、数字、_アンダーバー、記号を使用することができない。
- VBAが意味を持たせている語句は使用できない。
- 大文字、小文字の区別がなく、同様に扱われる。
ハンガリアン記法
- データ型の略文字を先頭に付ける。
Dim lngNo As Long
- このような変数名の付け方は、ハンガリアン記法と呼ぶ。
- ハンガリアン記法については、近年は批判的な意見が多い。
- VBAはハンガリアン記法が推奨されていた時代から存在するプログラミング言語なので、ハンガリアン記法が推奨されていない新しい言語とは分けて考えるべきという意見もある。
自動型変換、暗黙の型変換
VBAには、型を自動的に変換する仕様がある。
- 代入(=)や演算においては、自動型変換される。
- 型変換できない場合は、エラーになる(数値型の変数に文字列を入れた場合や、文字列を計算した場合等)。
- 代入の場合、代入先の型に自動的に変換される。
- 演算の場合、演算子によって自動的に型変換される。算術演算子であれば、数値変換後に計算が行われる。
- +演算子は、足し算の演算子であると同時に文字列結合の演算子でもあるので、2項とも数値なら足し算、片方でも文字列なら文字列結合が行われる。
' どちらも文字列の「123」が設定される Dim i As String i = 123 i = "123"
' jには数値の123が設定される Dim i As String Dim j As Long i = "123" j = i
String型とByte型配列の変換
String型はByte型の配列と等価であり、相互に代入可能。
Dim byteArray() As Byte byteArray = "Hello" Debug.Print byteArray
変数宣言の必要性
変数はかならず宣言すべき。
定数
定数を大別すると、以下の3つになる。
- 組み込み定数
- ユーザー定義の定数
- 条件コンパイル定数
- 組み込み定数は、VBAによって提供される定数。
' A1セルの文字色を自動にする Range("A1").Font.ColorIndex = xlAutomatic ' -4105
- 組み込み定数の名前
- VBA共通の組み込み定数は、vb○○○
- Office共通の列挙体は、mso○○○
- Excel独自の列挙体は、xl○○○
- ユーザー定義の定数は、ユーザー独自で定義した定数。
Const 定数名 As 型 = 値 ' プロシージャ内でのみ使用可能 Private Const 定数名 As 型 = 値 ' プロシージャ内でのみ使用可能 Public Const 定数名 As 型 = 値 ' 全てのモジュールの全てのプロシージャで使用可能
- 定数名の命名規則は、変数名と同じ。
- VBAの中には、変数は指定できない場所がある。
VBAには変数で指定すると、「定数式が必要です」とエラーになる場合がある。
その場所には、定数を指定しなければならないということ。
定数宣言
Const ci As Integer = 1
スコープ
- 変数・定数には適用範囲(スコープ)がある。
- 適用範囲とは、宣言した変数を使う事のできる範囲。
- スコープは必要以上に広くとらないのが基本。モジュールレベル変数や、パプリック変数は極力少なくすべき。
- 詳細は「IT系/VBA/基本/スコープ」に記載。
型宣言文字
- データ型を指定する文字。
- リテラル値(定数値)を指定する場合に、使う事がほとんど。
- 型宣言文字の種類
型宣言文字 変数の型 記載位置 % Integer(整数型) 後置 & Long(長整数型) $ String(文字列型) ! Single(単精度浮動小数点型) # Double(倍精度浮動小数点型) @ Currency(通貨型) ^ Longlong(64ビット符号付き数値)※64ビットExcelのみ有効 &H 16進定数 前置 &O 8進定数
- 指定の例
i = 123% l = 123& Const i1 As Long = &H10 ' 10進数で16 Const i2 As Long = &O10 ' 10進数で8 ' ' 一応以下のような指定もできるが使わない Dim i% Const j& = 123456
日付の定数を指定する場合
' #で囲む必要がある Const 日付定数 As Date = #12/31/2020# ' 2020年12月31日
列挙体
- 定数には、単独としての定数と列挙体がある。
- 複数の数値定数をひとまとめにしてグループ化したもの。
- 詳細は「IT系/VBA/基本/列挙型」に記載。
TIPS
別ページの一覧を入れる。
'IT系/VBA/基本/変数・定数/' には、下位層のページがありません。
参考リンク集
重複を恐れないリンク集。
- 定数の宣言 (VBA) | Microsoft Docs
- 変数を宣言する (VBA) | Microsoft Docs
- データ型を効率的に使用する (VBA) | Microsoft Docs
- データ型の概要 | Microsoft Docs
- Visual Basic の名前付け規則 (VBA) | Microsoft Docs
- 定数を使用する (VBA) | Microsoft Docs
- 定数 (Visual Basic for Applications) | Microsoft Docs
- VarType 定数 (VBA) | Microsoft Docs
- 変数宣言のDimとデータ型|VBA入門
- 変数と定数|VBAエキスパート対策
- 定数宣言のConstと型宣言文字|VBA入門
- VBAにおける変数のメモリアドレスについて|VBA技術解説
- 文字列→数値 数値→文字列 - Qiita
- VBA基本(変数のデータ型)
- VBA基本(変数の宣言と初期化、有効(適用)範囲)
- 変数宣言を強制しないといけないのか。
- VBA基本(変数を使って、計算式を動的に編集)
- VBA String型とByte型配列の相互変換を使ってLeft関数を自作する。 - t-hom’s diary
動画
- (チュートリアル道場) Excel VBA入門 レッスン6 変数 - YouTube
- (チュートリアル道場) Excel VBA入門 レッスン7 データ型 - YouTube
- (チュートリアル道場) Excel VBA入門 レッスン19 定数 - YouTube
- (日本頭脳チャンネル) 【Excel VBAエキスパート・ベーシック試験 合格講座】⑤変数と定数 - YouTube
- (パソコンスキルの教科書) エクセルマクロがよく分かる!変数の使い方(3ステップ)と3つのメリットを徹底解説|VBA初心者向け - YouTube
- (メンタエクセル) エクセル VBA 6 重要! 変数 基礎 これは是非覚えておきましょう! プログラミング - YouTube
- (エクセル兄さん たてばやし淳) 試聴④ 変数って何のメリットがあるの? VBAエキスパート試験対策講座 - YouTube
- (いつも隣にITのお仕事) エクセルVBA超入門!プログラミングと変数の基礎中の基礎 - YouTube
- (しろ_) 【ExcelVBA超入門】変数の使い方徹底攻略! - YouTube
- (なんだ!カンタン!Excel塾) Excel塾のエクセルマクロ講座入門編22回 変数の種類と宣言、変数の命名方法、定数について - YouTube
- (越後屋寛太郎) Excel道場 VBA 第4回 変数と定数 - YouTube
