変数について

今回の目標

  • 変数の型の概念について理解する
  • 変数を使用できるようにする
  • 変数と文字列の差について理解する
  • 説明

    プログラミングの最初の難関です。今回は特に覚えることが多く習得に時間がかかります。また、ページを分割にしようか迷ったほど量が多いです。挫折せず、しっかりとマスターしましょう!
    なお、このページは更新する可能性があります。

    変数とは

    変数とは、一時的に覚えさせておきたいデータに名前をつけてプログラム内に保存したものを指します。
    覚えさせたデータ(=変数)は値を変更してセルに代入することができます。 変数は特別な指定をしない限り、プログラムの実行時に作成され、プログラムの終了時に破棄されます。
    現時点では変数を使用しなくても問題ないプログラムのみを説明していますが、今後は変数を使わなければならない構文がしばしばあります。

    変数の宣言を強制させる

    これは行わなくても問題なく変数を用いたプログラムを実行することができますが、必ず行ってください。本格的にプログラムを作成し始めたときにこれを行っておかないと、致命的なエラーが発生する可能性が高まってしまいます。
    1.VBEから「ツール」→「オプション」を選択してください。 変数の代入イメージ
    2.「変数の宣言を強制する」を選択して、OKボタンを押下すれば完了です。 変数の代入イメージ
    すると、標準モジュールを追加したときに自動的に[Option Explicit]と記載されています。この文言を記載する時はモジュールの最初にないとエラーになりますので、注意しましょう。(=[Option Explicit]より、下の行にプログラムを書いてください) 変数の代入イメージ

    変数の型

    変数を作成するときには、『型』を指定することができます。型とは作成した変数にどのようなデータをコピーしたいか、によって変わります。
    変数の型は数多く存在しており、すべてを覚えることは難しいと思います。そのため、よく使うと思われる型を書き表にまとめました、特に重要な型は下記表の赤字の型です。なお、表の「範囲」については、正確に覚える必要はありません。

    データ型型名範囲
    ブール(ブーリアン)型BooleanTrue または 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.79769313486231E308 ~ -4.94065645841247E-324
    正の値の場合:
     4.94065645841247E-324 ~ 1.79769313486232E308
    通貨型Currency-922,337,203,685,477.5808 ~ 922,337,203,685,477.5807
    日付型Date100 年 1 月 1 日 ~ 9999 年 12 月 31 日
    文字列型String0 ~ 約 20 億(可変長)
    1 ~ 約 65,400(固定長)
    バリアント型Variant最大で Double の範囲までの任意の数値  or
    可変長 String と同じ範囲

    Microsoft デベロッパー センターより一部引用

    頻繁に使用する型まとめ

    まとめると下記のようになります。

    ● 整数or文字列or小数点を使用したいとき・・・・・Variant型
    ● 整数を使用したいとき・・・・・Long型
    ● 文字列を使用したいとき・・・・・String型
    ● 小数点を含む数値を使用したいとき・・・・・Double型

    勘の良い方は「Variant型って何でも代入できるの?」と思われるかもしれません。
    ズバリその通りで、Variant型は何でも格納できます。
    そのため、初心者にはオススメの型です。
    しかし、プログラミング作成に慣れたら、Long型など限定された値を格納する型を使用してください。 型の使用方法を限定しているのは、プログラムミスを防ぐと言うことが理由の1つに挙げられます。 具体的には、年齢(数値)を格納するための変数を作成したにもかかわらず、誤って名前(文字列)を格納しようとするとその時点でエラーが発生します。エラーがすぐに見つかれば、運用(実際に使用する)時になって不具合に気付くということは防げます。

    変数の作成

    変数は次のように宣言します。

    Dim 変数名 As 型名

    文字列型の変数の宣言は次のようにします。

    Dim Chr As String

    長整数型の変数の宣言は次のようにします。

    Dim Num As Long

    Chr と Numは変数名です。変数名とは、作成した変数の名前のことです。"Num"でなく、"Suuti"や"Kazu"の他、"数値"、"文字1"など日本語で作成することもできます。変数名はアルファベット、日本語、半角アンダーバー、数字を使って作成できます。ただし変数名の最初が数字から始まってはダメとルールがあります。自作関数名や予約語でも変数を作成できない等のルールもありますが、まずは赤字の部分を覚えてください。

    変数に値を代入・取得する

    変数に値を代入する

    文字列の代入の例です。

    '変数「Chr」に文字列『テスト』を代入するだけのプログラム
    Sub Sample_Variable1_2()
        Dim Chr As String       ' ・・・ ①
        Chr = "テスト"         ' ・・・ ②
    End Sub
    

    ①は、変数「Chr」を作成しています。
    変数の作成イメージ
    ②は、①で作成した変数「Chr」に文字列『テスト』を代入しています。
    変数の代入イメージ

    変数に数値を代入するときも同様に代入できます。

    '変数「Num」に数値『10』を代入するだけのプログラム
    Sub Sample_Variable1_1()
        Dim Num As Long
        Num = 10
    End Sub
    
    変数の値を取得する

    変数に格納した値を取得して、セルに代入することもできます。
    次のサンプルを見てください。

    Sub Sample_Variable2_1()
        Dim  Chr As String     '・・・①
        Chr = "テスト"         '・・・②
        Cells(1, 1) = Chr      '・・・③
    End Sub
    

    ①で変数「Num」を作成し、②で作成した「Chr」に文字列"テスト"を代入しています。今回はさらに変数ChrをセルA1に代入しています。実行すると、セルA1には、値"テスト"が代入されます。Chrという変数(箱)に入っていた値をコピーして、セルA1に代入したからです。

    変数の値は代入後もなくならない

    セルに代入を終えた変数はその後、どうなるのでしょうか。
    次のサンプルを実行してください。

    Sub Sample_Variable2_2()
        Dim Num As Long
        Num = 20
        Cells(1, 1) = Num
        Cells(2, 1) = Num
    End Sub
    

    A1とA2に数値20が格納されます。このことから、1度代入した変数もその値はなくならないということが分かります。

    変数の値を別の変数に代入する

    変数の値を別の変数に代入することもできます。

    Sub Sample_Variable2_3()
        Dim age1 As Long
        Dim age2 As Long
        age1 = 40
        age2 = age1
        Cells(3, 1) = age2
    End Sub
    

    コラム(変数に初期値を与える?)

    このコラムは、ExcelVBA以外のプログラミング言語を既に学習された方向けです。プログラミング自体なれていない方は読み飛ばしてください。
    JavaやC#では、初期値(変数作成と同時に値を設定すること)を与えることができますが、ExcelVBAではこれができないようです。強いて挙げるならExcelVBAでも固定値(値を変更できない変数)を設定する時だけです。変数の宣言時に値を設定することができます。

    変数と文字列

    Sub Sample_Variable4()
        Dim Chr As String
        Chr = "ABC"
        Cells(5, 1) = "Chr" ' セルA5:文字列「Chr」が代入される
        Cells(6, 1) = Chr   ' セルA6:変数「Chr」の中身(ABC)が代入される
    End Sub
    

    コメントにもある通り、セルのA5には文字列"Chr"が代入されます。セルのA6には、変数Chrの中身である文字列"ABC"が代入されます。この差は、Chrに " で囲われているかどうかです。 " で囲われている場合は、文字列として、そのままChrが代入され、 " が内場合は変数として扱われます。
    慣れるまでは大変かもしれませんが、割り切って覚えるようにしましょう。

    確認テスト

    次の問いに答えなさい。

    1. 長整数型の変数"Num"を作成しなさい。
    2. 文字列型の変数"文字"を作成しなさい。
    3. 倍精度浮動小数点数型の変数"Avr"を作成しなさい。
    4. 文字列型の変数"Str"を作成し、文字"Str"を代入しなさい。
    5. 長整数型の変数"Num2"を作成し、"Num2"に10を代入、さらに変数"Num2"をセルB3に代入しなさい。
    解答1 解答2 解答3 解答4 解答5

    関連リンク

    ページの先頭へ