Excel
VBA

VBA の変数

変数

変数に値を入れたり計算を行ったりするシンプルな方法は次の通りである、この場合においてイコール = は代入であり数学の等号ではない事に注意する。

    変数名 = リテラル
    変数名 = 式
    変数名 = 変数名

    a = 100
    b = a + 100
    c = b

代入を示す Let も使えるが不使用が標準である為お勧めしない。

    Let a = 100

オブジェクト型の場合は Set が必要である。

    Set 変数名 = オブジェクト生成演算
    Set 変数名 = オブジェクト参照関数など

    Set rng = Range("a1")

このような表記において変数の実体の型は Variant 型になる、 TypeName 関数で変数の型を調べた場合には最後に代入した値の型が得られる事に注意する事。

変数の命名

変数名には以下のルールが定められている。

  1. VBA が使う識別子を変数名に使用できない。
  2. 頭文字にはアンダーバー・半角・全角数字や記号・半角カナは使えない。
  3. 頭文字以降はアンダーバーを除く記号は使えない。

慣例的に英単語等の場合は以下の命名規則がよく使われる。 日本語由来の事象を処理するときは日本語の変数名でよいだろう。

表記例 名称
alpha_beta スネークケース
AlphaBeta キャメルケース、アッパーキャメルケース
alphaBeta ローワーキャメルケース

英単語を子音だけで命名する事もよく見られる。

変数への代入動作について

値型での代入の動作はコピーであるため以下の処理で y は 100 になる。

    Sub func()
        y = 100
        x = y
        x = x + 100
        MsgBox y                    ' 100 がポップアップされる。
    End Sub

オブジェクト型で代入動作は参照動作である以下の処理で y.value は 200 になる。

    Sub func()
        Dim x As Range, y As Range
        Set y = Range('a1')
        y.value = 100
        Set x = y
        x.value = x.value + 100
        MsgBox y                    ' 200 がポップアップされる
    End Sub

変数宣言

型を明示し式の結果を束縛することで理解を助けたりミスが減る場合がある。 Dim で変数とその型を宣言することで変数にはその型の値のみが代入可能になる。 

変数を宣言する方法は次の通り

    Dim 変数名 as 型名

    Dim a as Integer ' 変数 a は Integer 型
    Dim b as String  ' 変数 b は 文字列

変数名に続けて型修飾子を使ってもよい、 ただし歴史的な事情により文字列型の $ だけにするべきである。

    Dim b$ ' 変数 b は 文字列

型宣言時には複雑な型を宣言する事が可能である。

    Dim 変数名(N) As 型名          '配列
    Dim 変数名 As String * 文字数  '最大文字数制限

    Dim aaa(10) As Integer  'intが10個の配列
    Dim aaa as String * 10  '10文字までの文字列

配列への代入

配列に値を設定する方法は次の通り。

    Dim aaa() as Integer
    aaa(0) = 100
    aaa(1) = 200
    aaa(2) = 300

一度に設定したいならこの様にも書ける。

    Dim aaa as Variant   ' 型指定は曖昧にしておく
    aaa = Array(100, 200, 300)