【初心者向け】動かして学ぶExcel VBA入門(4)

Excel VBA

こんにちは。ECF Tech担当
Michiharu.Tです。

Excel VBA入門の第4回です。

今回からはExcelマクロを通して、どのプログラム言語にも共通する基礎的な知識を学んで行きたいと思います。変数、代入、演算などの基本的な概念を知ることで、プログラムをより効率的に記述することができます。

では本日もよろしくお願いいたします。本連載の目次は下記よりご覧頂けます。

【初心者向け】動かして学ぶExcel VBA入門
Excel VBAを動かしながら学べる連載をお送りしています。目次第1回Excel VBAとはExcelマクロを動かしてみようExcelマクロの保存第2回セルに値を設定セルの削除オブジェクト、プロパティ、メソッド第3回ワークシートの指定様々...

変数

変数は値を入れておくためのコンピュータ内の入れ物です。変数を使うことで複雑な処理を実現することができます。変数を使うためには、次の3つのステップが必要です。

変数の3ステップ

変数の使い方

下のマクロを例に、変数の使い方を見ていきましょう。

Sub マクロ1()
    '変数の宣言
    Dim value
    '変数への値の代入
    value = 5
    '変数にある値の利用
    Range("A1").value = value
End Sub
プログラム例にある'で始まる行はコメントと呼ばれる記述です。コメント行はプログラムとはみなされないので、プログラムの説明などを自由に書くことができます。本連載でもプログラムの説明に用いることがあります。

(1)変数の宣言

まず最初に行うのは変数の宣言です。変数の宣言(変数宣言)とは、変数を準備することです。プログラムの下記部分になります。

Dim value

文法は下のとおりです。

Dim 変数名 As 型

については後程説明したいと思います。As 型の部分は省略可能なので、今回のプログラム例では省略しています。変数名は変数につけられる名前です。どのような値が入っているかが分かりやすい名前を付けるようにしましょう。プログラム例では、valueが変数名になります。

(2)値の代入

変数を作ったら値を入れます。プログラムの下記部分です。

value = 5

変数に値を入れることを代入と言います。値を代入する文法は次のとおりです。

変数名 = 値

(3)値の利用

値が代入できたら、変数を使うことができます。変数名をプログラム中に書くことで使用できます。プログラムの下記部分です。

Range("A1").value = value

A1セルのvalueプロパティに変数valueを代入しています。=右側のvalueが変数です。変数valueに入っている値は5ですので、A1セル5が設定されます。

変数の性質

次に変数の性質について、いくつか説明をします。

(1)再代入と上書き

変数は何度でも値を代入できます。値を再度代入すると、もとの値が上書きされます。プログラム例を示します。

Sub マクロ2()
    Dim value
    '値を代入
    value = 4
    Range("A1").value = value
    '値を再度代入
    value = 8
    Range("A2").value = value
End Sub

実行結果は次のようになります。

実行結果01

プログラムの動作を順番に説明します。

  • value = 4で、変数valueに4を設定しています。
  • Range("A1").value = valueで、A1セルに変数valueの値を設定しています。変数value4なので、A1は4になります。
  • value = 8で、変数valueに8を再度設定しています。
  • Range("A2").value = valueで、A2セルに変数valueの値を設定しています。変数value8なので、A2は8になります。

(2)変数の複数宣言

変数は複数宣言できます。プログラム例を示します。

Sub マクロ3()
    '変数xとyを宣言
    Dim x
    Dim y
    'それぞれの変数に値を代入
    x = 6
    y = 10
    'それぞれの変数の値をセルに設定
    Range("A1").value = x
    Range("A2").value = y
End Sub

実行結果は次のようになります。

実行結果02

変数xとyを宣言し、それぞれに値を代入、その後A1とA2セルにxとyの値を代入しています。

(3)変数宣言の強制

Excel VBAにおいて、変数宣言は必須ではありません。例えば次のプログラムは問題なく動作します。

Sub マクロ4()
    '変数への値の代入
    value = 30
    '変数にある値の利用
    Range("A1").value = value
End Sub

マクロ1から変数宣言部分を除いたものです。このように変数宣言は必ずしも必要なものではないのですが、変数宣言無しに長いプログラムを記述すると、どこでどんな名前の変数を宣言しているかがわからなくなるためおススメの方法ではありません

そのため、変数宣言を強制する設定がよく用いられます。次の手順で行うことができます。

VBEの画面で、ツール > オプション をクリックします。

変数宣言の強制

編集タブの「変数の宣言を強制する」にチェックを入れます。

変数宣言の強制02

これで設定は完了です。以降、新規に標準モジュールを作成すると、下図のように標準モジュールの先頭にOption Explicitの記述が追加されます。

変数宣言の強制03

マクロはその記述の下に今までどおり書くことができます。下図のようにマクロ4と同じプログラムを書いて実行すると、変数が宣言されていないことを示すエラーとなります。

変数宣言の強制04

本連載でも、以降はこの設定を入れた状態でマクロを記述する例を紹介します。

値と型

変数にはがあります。型は「値の種類」のことです。代表的なものをご紹介します。

型名 概要 説明
Integer 整数型 -32768 ~ 32767の間の整数を入れられる型です。
Long 長整数型 -2,147,483,648 ~ 2,147,483,647の間の整数を入れられる型です。
String 文字列型 文字列(文字の並び)を入れられる型です。

変数宣言の際に下のように型名の部分を記述することで、その変数がどんな値を入れられる型なのかを確定できます。

Dim x as Integer

型がプログラムにどのような影響を与えるのか、いくつかのプログラムで試してみましょう。なお、代入のテストだけなのでExcelのシートには何も変化がありません。

次のプログラムでは、変数xをInteger型として宣言しています。Integerは整数を代入できます。代入している値も範囲内に収まっていますので、正しく実行できます。

Sub マクロ5()
    Dim x As Integer
    x = 30000
End Sub

次のプログラムでも変数xをInteger型として宣言しています。ただし、代入する値がInteger型に収まる範囲を超えているため、実行すると「オーバーフローしました。」のエラーが表示されます。

オーバーフローは、代入しようとしている値が変数の範囲を超えていることを指す言葉です。
Sub マクロ6()
    Dim x As Integer
    x = 1234560
End Sub

次のプログラムでも変数xをInteger型として宣言しています。Integerは整数を代入できる型ですが、プログラムでは"りんご"文字列を代入しているため、実行すると「型が一致しません。」のエラーが表示されます。

Sub マクロ7()
    Dim x As Integer
    x = "りんご"
End Sub

バリアント型

バリアント(Variant)型は文字列、日付、時刻、数値など様々な値が代入できる特殊な型です。次のように型を省略して変数を宣言した場合、その変数の型はバリアント型として扱われます。様々な型が代入できる様子をプログラムで見てみましょう。

Sub マクロ8()
    Dim hensu
    hensu = 5 '整数を代入
    hensu = "りんご" '文字列を代入
    hensu = Date '日付情報を代入
    Range("A1").Value = hensu
End Sub

プログラムの実行結果は次のようになります。Dateは日付の情報を代入できる記述です。日付情報を変数hensuに代入した後、A1にhensuの値を設定することで、日付情報が表示できています。

マクロ8結果

変数のメリットについては、次回の制御構文などでお伝えできればと思います。本章の段階では、「変数という値の入れ物が使える」という理解でOKです。

演算

演算はコンピュータが行うことのできる計算の総称です。+、ー、×、÷の四則計算の他にも様々な処理を行なうことができます。

演算は、演算子とオペランドを組み合わせて式を作ることによって行います。下は足し算を行なう式の例です。

演算

  • 演算子は計算の種類を表す記号です。
  • オペランド(operand) は計算に用いられる値です。
  • 演算子によって使用するオペランドの数が異なります。

用語の紹介で少し難しい印象になりましたが、実際に使ってみると直感的でそれほど難しくはありません。今回は算術演算子について、プログラム例を見ながらご紹介します。

Sub マクロ9()
    Range("A1").Value = 5 + 3 'たし算
    Range("A2").Value = 5 - 3 'ひき算
    Range("A3").Value = 5 * 3 'かけ算
    Range("A4").Value = 5 / 3 'わり算
    Range("A5").Value = 5 \ 3 'わり算の余り
End Sub

上記のプログラムの実行結果は次のようになります。A1~A5セルにそれぞれたし算、ひき算、かけ算、わり算、わり算の余りが設定されます。

マクロ8結果

Excel VBAの算術演算子には次のようなものがあります。

記号 意味
+ たし算
- ひき算
* かけ算
/ わり算(商)
¥ わり算の余り

算術演算子は、いわゆる算数で出てくる計算ができる演算子です。他にも様々な演算子がありますが、必要に応じてご紹介していければと思います。

というわけで本日はここまでとさせて頂きたいと思います。最後までお読み頂き、ありがとうございました。次回も様々なプログラムをご紹介したいと思います。ひきつづき、よろしくお願いいたします。

タイトルとURLをコピーしました