プログラムの基礎 5

VBAトップへ
   5 プログラムの基礎
   変数 
  データ型
  算術式と計算
  プロシジャー
  ステートメント 
  変数の適用範囲
  配列


変数

1.変数

変数とは数値や文字列などを一時的に格納する入れ物と言えるでしょう。
コード内で変数を使用する際はまず、変数を宣言しておきましょう。変数の宣言には"Dim"を使用します。


Dim 変数名

変数に値を代入するには、"="(イコール)を使用します。  


変数名 = 値

以下は変数の宣言と代入例です。


Sub SelectCell()
    Dim suuti
    Dim mojiretu

    hensu = 7
    mojiretu = "文字列代入"
    MsgBox suuti
    MsgBox mojiretu
End Sub

VBAでは変数を宣言しなくてもコードにいきなり変数を記述することが可能ですが、 宣言しない場合、例えばコード内で多用する変数名を誤って違う変数名で指定した場合 プログラムでエラーとならずに新しい変数が指定されたと自動的に認識されコードの 記述誤りを発見するのが困難になります。

先頭へ戻る

データ型

2.変数のデータ型

宣言した変数にはデータ型を指定することができます。 データ型とは、変数に格納できるデータの種類をいいます。 データ型を指定しない場合、変数は自動的にバリアント型(Variant)になります。


Dim 変数名 As データ型


数値を格納できる変数を作成する場合

データ型名称消費メモリ格納できる範囲
Integer整数型2バイト-32,768 〜 32,767
Long長整数型4バイト-2,147,483,648 〜 2,147,483,647
Single単精度浮動小数点数型4バイト-3.402823E38 〜
-1.401298E-45(負の値)
1.401298E-45 〜
3.402823E38(正の値)
Double倍精度浮動小数点数型8バイト-1.79769313486232E308 〜
-4.94065645841247E-324(負の値)
4.94065645841247E-324 〜
1.79769313486232E308(正の値)
Currency通貨型8 バイト-922,337,203,685,477.5808 〜
922,337,203,685,477.5807

文字列を格納できる変数を作成する場合

データ型名称消費メモリ格納できる範囲
String文字列型2バイト最大約20億文字まで

日付を格納できる変数を作成する場合

データ型名称消費メモリ格納できる範囲
Date日付型8 バイト西暦100 年1月1日〜西暦9999年12月31日までの日付と時刻

オブジェクトを格納する変数を作成する場合

データ型名称消費メモリ格納できる範囲
Objectオブジェクト型4 バイオブジェクトを参照するデータ型

全てのデータに対応した変数を作成する場合

データ型名称消費メモリ格納できる範囲
Variantバリアント型16バイト可変長の文字列型の範囲と同じ。

真(True)・偽(False)の値を格納できる変数を作成する場合

データ型名称消費メモリ格納できる範囲
Booleanブール型2 バイト真 (True) または偽 (False)

先頭へ戻る

   

算術式と計算

3.算術式と計算

計算を行うには算術式を使用します。変数に値を代入するには、"="(イコール)を使用します。 


変数名 = 値 <演算子> 値

演算子意味変数への代入例
 加算する i = 15 + 5  ( i の値は20)
 減算する i = 15 - 5  ( i の値は10)
 乗算する i = 5 * 4   ( i の値は20)
 除算する i = 15 / 5  ( i の値は3)
 除算の商 i = 15 \ 2  ( i の値は7)
Mod 除算の余り i = 15 Mod 2  ( i の値は1)
 べき乗する i = 2 ^ 5   ( i の値は32)

以下は変数の宣言と代入例です。


Sub SelectCell()
    Dim hensu
    Dim mojiretu

    hensu = 7
    mojiretu = "文字列代入"
    MsgBox hensu
    MsgBox hensu
End Sub

先頭へ戻る

   

プロシジャー

4.プロシージャについて

プロシージャとは、処理単位の1つでVBAではSubプロシージャとFunctionプロシージャの2種類あります。 プログラムの中で何度も同じような処理を行なう場合、一連の処理をプロシージャにまとめることで 何度も同じ処理を記述する必要がなくなり、修正も容易になります。

SubプロシージャとFunctionプロシージャの違いはSubプロシージャが引数を受け取るのみに対して Functionプロシージャは引数を受け取り、戻り値を返すという関数としての役割を果たすことができる点です。

以下の例では、SubプロシージャとFunctionプロシージャに値を渡しています。 Subプロシージャに値を渡しているだけなのに対して、Functionプロシージャには 値を渡してプロシージャ内部で+1した値を戻り値として返しています。


Sub Test()
'SubプロシージャとFunctionプロシージャのテスト
    intData = 1

    Call Subプロシージャ(intData)
    intData = Functionプロシージャ(intData)
    MsgBox "Functionプロシージャ結果:" + CStr(intData)
End Sub

Sub Subプロシージャ(ByVal intData As Integer)
    MsgBox "Subプロシージャ結果:" + CStr(intData)
End Sub

Function Functionプロシージャ(ByVal intData As Integer) As Integer
    intData = intData + 1
    Functionプロシージャ = intData
End Function

先頭へ戻る

   

ステートメント

5.ステートメントについて

Privateステートメントで宣言されたSubプロシージャとFunctionプロシージャは プロシージャを記述したモジュール内のほかのプロシージャからのみ参照できます。

これに対して、Publicステートメントで宣言されたSubプロシージャとFunctionプロシージャは すべてのモジュールのすべてのプロシージャから参照できます。

図ではModule1のMainProよりModule2のPro1とFunc1を参照しようとしていますが、 Pro1とFunc1はPrivateなのでエラーとなります。

ステートメント図

ステートメントを指定しないと自動的にPublicプロシージャとなります。 では、どうしてステートメントが必要なのでしょうか? これは目的によりプロシージャの参照を制限したり、開放したりする理由もありますが、 1番の理由は、モジュールが増えた場合、プロシージャがモジュール内だけで参照されているのか それともモジュール外からも参照されているのかを明確にする為です。 プログラムを復数人で開発をしたり、解析する場合、プログラムの規模が大きいほど ステートメントを指定することが重要となってきます。

先頭へ戻る

   

変数の適用範囲

6.変数の有効範囲

プロシージャレベルで宣言された変数は、そのプロシージャの中でのみ有効となります。 同じ変数や定数を別のプロシージャで使用したい場合はプライベートモジュールレベルで変数を宣言し、 全モジュールの全プロシージャで使用したい場合は、パブリックモジュールレベルで宣言します。 この場合、設定したい変数や定数を宣言セクションで宣言します。

変数の有効範囲


'Module1に記述↓↓↓↓↓↓↓↓↓↓

Public i As Integer 'パブリックモジュールレベルの変数宣言
Dim j As Integer 'プライベートモジュールレベルの変数宣言

Private Sub ProcedureL()
    Dim k As Integer 'プロシージャレベルの変数宣言

    i=0
    j =0
    k = 0

    i = i+1
    j = j+1
    k = k+1
    Call PrivateML
    Call PublicML
    MsgBox "パブリックモジュールレベル変数:" + CStr(i) + Chr(10) + _
           "プライベートモジュールレベル変数:" + CStr(j) + Chr(10) + _
           "プロシージャレベル変数:" + CStr(k)
End Sub

Private Sub PrivateML()
    i = i + 1
    j = j + 1
    k = k + 1
End Sub


'Module2に記述↓↓↓↓↓↓↓↓↓↓

Public Sub PublicML()
    i = i + 1
    j = j + 1
    k = k + 1
End Sub

先頭へ戻る

   

配列 

7.配列

配列とは一つの変数に対して複数の異なるデータを格納する場合使用します。配列は、まず「Dim 配列名(要素番号) As データ型」で宣言します。要素番号を宣言時に指定することで、配列にいくつデータを格納するのかを決めます。要素番号は「0」から始まります。例えば「Dim a(5) As string」と宣言すると、要素数は「0」から「5」の「6つ」となります。配列にデータを代入する場合は、「Dim 配列名(要素番号)=データ」で代入できます。以下の例では配列aに対し要素番号を5、データ型をString型で宣言し、データを格納しています。


Sub ArrayTest()
    
    Dim a(5) As String
        
    a(0) = "りんご"
    a(1) = "みかん"
    a(2) = "梨"
    a(3) = "イチゴ"
    a(4) = "メロン"
    a(5) = "スイカ"
        
    Debug.Print a(0)
    Debug.Print a(1)
    Debug.Print a(2)
    Debug.Print a(3)
    Debug.Print a(4)
    Debug.Print a(5)
        
End Sub

   先頭へ戻る   

中級・特別編トップへ