変数/定数/リテラル/データ型/有効範囲[ExcelのVBA]
はじめに
Visual Basicで最初に覚える事は「コードの記述」と「コメント」です。
コードの記述
Visual Basicのプログラムコードは「一行毎に記述」します。
これを複数行で記述するとエラーになります。
コメント
コメントはプログラムの説明などをコードに記述する際に使用します。また、コメントとして定義されている行は実行されません。
Visual Basicでコメントを挿入するには行頭に「'」を付加します。「'」は「Shift+7キー」で挿入できます。
この図では緑色の部分がコメントとなります。黄色部分はデバッグのステップインで実行する行を示してしています。デバッグの使い方はメニュー(デバッグ)の操作方法をご覧ください。
変数
変数(へんすう)とはプログラムでデータを一時的に記憶するものです。
変数の宣言書式は次の通りです。
変数にデータを代入する場合は次の書式です。
次のコードは変数の使用例となります。
Private Sub CommandButton1_Click() ' 変数の宣言 Dim A As String ' String型の変数Aを宣言 Dim B As String ' String型の変数Bを宣言 Dim C As Integer ' Integer型の変数Cを宣言 Dim D As Long ' Long型の変数Dを宣言 Dim E As Byte ' Byte型の変数Eを宣言 ' 変数Aに文字列リテラル「あいうえお」を代入する A = "あいうえお" ' 変数Bに変数Aの内容を代入する B = A ' 変数Dに数値リテラルの「10」を代入する D = 10 MsgBox (B) ' メッセージボックスに「あいうえお」と表示される MsgBox (D) ' メッセージボックスに「10」と表示される End Sub
プログラムのコードをコピーするには「ソースをコピー」を押してからコードを手動で選択してからクリップボードへコピーします。
定数
定数(ていすう)とは値が変化しない固定値の変数です。定数は変数のように代入する事は出来ません。定数の宣言書式は次の通りです。
次のコードは定数の使用例となります。
Private Sub CommandButton1_Click() ' 定数の宣言 Const A = "あいうえお" Const B = 10 MsgBox (A) ' メッセージボックスに「あいうえお」と表示される MsgBox (B) ' メッセージボックスに「10」と表示される End Sub
リテラル
リテラルとはプログラムコード内に値を直接表記したものです。VBでは文字列と数値の2種類があり変数や定数で使用します。
文字列リテラル
A = "あいうえお"
B = "12345"
数値リテラル
[10進数]
A = 100
B = -100
[16進数]
A = &H64 ' 10進数で「100」となる
B = &HFFFFFF9C ' 10進数で「-100」となる
' 16進数は「&H形式」で表記する必要があります。
データ型
変数で定義できるデータ型の一覧です。
データ型 | 和訳 | 範囲 |
---|---|---|
Byte | バイト型 | 0 ~ 255 |
Boolean | ブール型 | 真(True)または偽(False) |
Integer | 整数型 | -32,768 ~ 32,767 |
Long | 長整数型 | -2,147,483,648 ~ 2,147,483,647 |
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.5807 |
Decimal | 10進型 | [小数部分を持たない数値の場合] -79,228,162,514,264,337,593,543,950,335 ~79,228,162,514,264,337,593,543,950,335 [小数点以下28桁の数値の場合] - 7.9228162514264337593543950335 ~ 7.9228162514264337593543950335 |
Date | 日付型 | 西暦100年1月1日 ~ 西暦9999年12月31日 |
Object | オブジェクト型 | オブジェクト(クラスやコントロール)を参照するデータ型 |
String | 文字列型 | 2GBまで |
Variant | バリアント型 | 2GBまで |
Private/PublicとStatic
Private/PublicステートメントとStaticについて解説します。
Private
Privateステートメントは変数/定数やプロシージャの行頭に付加する事が出来ます。このステートメントがあると同一ファイル(モジュール)のみそれらを呼び出す事が可能となります。
' 変数 Private A As String ' 定数 Private Const B As Integer = 12345 ' プロシージャ Private Sub test() End Sub
Publicステートメント
Publicステートメントは変数/定数やプロシージャの行頭に付加する事が出来ます。このステートメントがあると同一ファイル(モジュール)以外からもそれらを呼び出す事が可能となります。
' 変数 Public A As String ' 定数(Public Constは標準モジュールのみ使用可能) Public Const B As Integer = 12345 ' プロシージャ Public Sub test() End Sub
メモ
Staticステートメント
Staticステートメントは静的変数とも呼ばれプログラムが実行している間、データを保持し続けます。通常の変数はブロック単位でデータを破棄します。
実際に試すと次のようなります。
'------------------------------ ' 通常の変数 '------------------------------ Private Sub CommandButton1_Click() Dim A As Long ' Aが初期化されて「0」となる A = A + 1 MsgBox (A) ' 何度実行しても常に「1」と表示される End Sub '------------------------------ ' 静的変数(Static) '------------------------------ Private Sub CommandButton1_Click() Static A As Long ' Aが初期化されて「0」となる(最初の一回のみ) A = A + 1 MsgBox (A) ' 実行する度に「1,2,3,4...」と値が増加されます。 End Sub
メモ
例)Public A As Long
それに対してStaticステートメントの変数はローカルブロックでのみ使用できる変数となります。
有効範囲(スコープ)
「変数/定数/プロシージャ」のアクセス可能な範囲の事を有効範囲(スコープ)と呼びます。標準モジュールに定義した例で解説します。
' 別ファイル(モジュール)からもアクセス可能(グローバル変数) Public A As String ' 別ファイル(モジュール)からもアクセス可能(定数) Public Const B = "123" ' このファイル(モジュール)からのみアクセス可能(変数) Private C As String ' このファイル(モジュール)からのみアクセス可能(定数) Private Const D = "123" ' 別ファイル(モジュール)からもアクセス可能(プロシージャ) Public Sub Test1() ' このTest1()プロシージャでのみアクセス可能(変数) Dim E As Integer ' このTest1()プロシージャでのみアクセス可能(定数) Const F = "123" End Sub ' このファイル(モジュール)からのみアクセス可能(プロシージャ) Private Sub Test2() ' このTest2()のブロックを抜けてもデータを保持(静的変数) Static G As String ' 2行目のAと同名ですがプロシージャ内ではこのAが優先される Dim A As String ' 24行目のAを呼び出す時は「A」となる ' 2行目のAを呼び出す時は「Module1.A」となる End Sub
標準モジュール/クラスモジュール
モジュール | 内容 |
---|---|
標準モジュール | グローバル変数、定数、Sub/Functionプロシージャを定義する |
クラスモジュール | クラスを定義する。必要であればPropertyプロシージャも定義する |
Visual Basicの基礎
変数/定数/リテラル/データ型/有効範囲
配列/動的配列/構造体/列挙型/エスケープシーケンス
算術演算子/比較演算子/データの型変換
制御構造(If/For/Select/While/Do)
Sub/Functionプロシージャ(手続き/関数)
クラスの作成と使い方
ファイルの操作
エラートラップ
基本のまとめ(上級者用)