ホーム > カテゴリ > Excel・VBA >

変数/定数/リテラル/データ型/有効範囲[ExcelのVBA]

はじめに

Visual Basicで最初に覚える事は「コードの記述」と「コメント」です。

コードの記述

Visual Basicのプログラムコードは「一行毎に記述」します。

これを複数行で記述するとエラーになります。

コメント

コメントはプログラムの説明などをコードに記述する際に使用します。また、コメントとして定義されている行は実行されません。

Visual Basicでコメントを挿入するには行頭に「'」を付加します。「'」は「Shift+7キー」で挿入できます。

この図では緑色の部分がコメントとなります。黄色部分はデバッグのステップインで実行する行を示してしています。デバッグの使い方はメニュー(デバッグ)の操作方法をご覧ください。

Wikipediaで補足:コメント

変数

変数(へんすう)とはプログラムでデータを一時的に記憶するものです。

変数の宣言書式は次の通りです。

Dim 変数名 As データ型

変数にデータを代入する場合は次の書式です。

変数名 = リテラル(文字列/数値) または 変数名(定数も含む)

次のコードは変数の使用例となります。

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

プログラムのコードをコピーするには「ソースをコピー」を押してからコードを手動で選択してからクリップボードへコピーします。

Wikipediaで補足:変数 リテラル

定数

定数(ていすう)とは値が変化しない固定値の変数です。定数は変数のように代入する事は出来ません。定数の宣言書式は次の通りです。

Const 定数名 = リテラル(文字列/数値)

次のコードは定数の使用例となります。

Private Sub CommandButton1_Click()

    ' 定数の宣言
    Const A = "あいうえお"
    Const B = 10
  
    MsgBox (A)  ' メッセージボックスに「あいうえお」と表示される
    MsgBox (B)  ' メッセージボックスに「10」と表示される

End Sub

Wikipediaで補足:定数

リテラル

リテラルとはプログラムコード内に値を直接表記したものです。VBでは文字列と数値の2種類があり変数や定数で使用します。

文字列リテラル

 A = "あいうえお"
 B = "12345"

数値リテラル

[10進数]
 A = 100
 B = -100
[16進数]
 A = &H64 ' 10進数で「100」となる
 B = &HFFFFFF9C ' 10進数で「-100」となる
 ' 16進数は「&H形式」で表記する必要があります。

Wikipediaで補足:リテラル 10進数 16進数

データ型

変数で定義できるデータ型の一覧です。

データ型和訳範囲
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
Decimal10進型[小数部分を持たない数値の場合]
-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

メモ

「変数/定数やプロシージャ」の行頭に「Private/Public」のいずれも指定していない場合は「Private」として扱われますので注意して下さい。

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ステートメントの変数を定義するとグローバル変数となり、全てのファイルから呼び出せる変数となります。

例)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

Wikipediaで補足:スコープ モジュール

標準モジュール/クラスモジュール

モジュール内容
標準モジュールグローバル変数、定数、Sub/Functionプロシージャを定義する
クラスモジュールクラスを定義する。必要であればPropertyプロシージャも定義する

Visual Basicの基礎

変数/定数/リテラル/データ型/有効範囲
配列/動的配列/構造体/列挙型/エスケープシーケンス
算術演算子/比較演算子/データの型変換
制御構造(If/For/Select/While/Do)
Sub/Functionプロシージャ(手続き/関数)
クラスの作成と使い方
ファイルの操作
エラートラップ
基本のまとめ(上級者用)

エクセル講座のクイックリンク

ホーム 新機能 基本(初級) 基本(中級) 基本(上級) 関数 マクロ VBA TIPS





関連記事



公開日:2015年06月15日 最終更新日:2015年07月06日
記事NO:01042