VBAをマスターしよう~⑥変数(変数名・宣言と型・使用する利点)~

どうも、今年も残すところあと二、三か月となり、「年の初めにやろうと思っていたことまるでできてないな~」と無駄に綺麗に見え始める星を眺めながら、無駄に煙草を吸いまくっているつづりです。

今回はVBAをマスターしよう第六回目の記事となります。今回からはより実践(現場、仕事など)で使える情報を紹介していきたいと思います。まず、最初は変数についてです。

変数は、マクロを組むにあたって絶対に理解して欲しい部分ですし、勉強して資格を取ろうと考えている人にとっても試験範囲内となっていますので、ぜひこの機にしっかりと覚えて貰えればと思います。

ちなみに、前回は物凄く簡単に表作成のマクロを作るやり方をご紹介させていただきましたので、興味がある方は是非そちらも読んでいただけるとありがたいです。

では、はじめていきましょう。

変数とは?

変数とは『データを記録する・呼び出すための名前を付けた場所』のことです。変数とは『データを記録する・呼び出すための名前を付けた場所』のことです。例えば服などをタンスにしまう際、夏物、冬物、靴下など分けて収納しませんか。このように用途に応じてデータを格納するものが変数となります。

靴下、夏物の服、冬物の服をわけて収納するタンスを使って変数を説明している画像

そんな変数ですが、使うにあたって覚えておいて欲しいことがあります。
それが、以下の二つです。

  • 変数を使う前には『宣言』がいる。
  • 変数にはそれぞれ入れるものによって『』を変える必要がある。

次からは、この二つの点についてそれぞれ説明していきます。

変数の宣言と型

変数を使用するときは下記のように事前に変数を指定する必要があります。

Sub 変数()

Dim 変数 As Integer

変数 = 100
Cells(2, 2) = 変数

End Sub

上のコードで太字になっている『Dim~』から始まっている箇所が変数の宣言を行っている箇所です。基本的な形は次の通りです。

基本形:宣言 変数名 As 型

より細かく、一つずつ見ていきましょう。

宣言

宣言として最も使われるのが『Dimステートメント』になります。正直これさえ覚えておけば、他のステートメントを覚えていなくても変数を使うことができます。

ちなみにステートメントとはマクロの動きを指示する構文や文法のことです。上のコードの『Sub』もステートメントの一つです。詳しくはいずれ『IF構文』の説明をするときにでもしたいと思いますので、ここでは割愛します。

Dimの他にプロジェクト内全体で使用できる『Publicステートメント』や、宣言したモジュールの中でのみ使用できる『Privateステートメント』などがあります。この二つについては現時点ではこういうのもあるんだぐらいで覚えて貰えれば問題ありません。

変数名

次に、『変数名』の部分になります。ここが変数を入れておくものの名前になります。上のコードでは『変数』とそのまんま漢字で名前を付けている通り、『漢字英数字ひらがなカタカナ』を使うことができます。ですが、いくつかルールが決まっていますので、記載しておきます。

変数名、命名時の注意

  • 使用できる文字は『漢字英数字ひらがなカタカナ』+『_(アンダーバー)
  • 記号スペースは使用できない
  • 最初の文字に『数字_(アンダーバー)』は使用できない
  • 変数の適応範囲で同じ変数名は使用できない
  • if,elseなどの予約語は使用できない
  • 半角で255文字以内

どれも正直普通に書いていれば引っかかることはないと思いますが、最初の文字に『数字、_(アンダーバー)』は使用できない変数の適応範囲で同じ変数名は使用できないif,elseなどの予約語は使用できない、の3点は比較的ミスしやすいのでより注意しましょう。ちなみに予約語とはステートメント名や関数名など、要はVBA上で既に使われている用語のことです。

変数頭に数字を入れてエラーが出ているVBE画面
頭に数字・_(アンダーバー)があるとエラーが出るので注意

最後の『型』ですが、ここでは変数にどんなものを入れるかによってそれぞれ変える必要があります。
主に使用する型の種類は以下の通りです。

型の種類

型名内容格納範囲
Integer整数-32,768~32,767
Long長整数-2,147,483,648 ~ 2,147,483,647
Single単精度浮動小数点正:1.401298E-45 ~ 3.402823E38
負:-3.402823E38 ~ -1.401298E-45
Double倍精度浮動小数点正:4.94065645841247E-324 ~ 1.79769313486232E308
負:-1.79769313486232E308 ~ -4.94065645841247E-324
Currency通貨-922,337,203,685,477.5808 ~ 922,337,203,685,477.00
String文字列20億文字以内まで
Date日付日付:西暦100 年1月1日~西暦9999年12月31日
時刻:0:00:00~23:59:59
Objectオブジェクトオブジェクト
BooleanブールTrue(真) または False(偽)
Variantバリアントすべてのデータ

最初のうちは、『Long』、『Single』、『String』、『Variant』さえ覚えておけば問題ありません。ただし、資格取得を目指している方の場合は表に記載した種類については試験問題のマクロで出てきたりするので把握する必要があります。

変数を使う利点

さて、ここまで変数について説明していきましたが、簡単にですが、変数を使う利点を説明します。
変数を使う利点として筆者が特に思っているのが、汎用性の高さです。

凄い簡単な例をあげるとすると、下図左ように日ごとの果物の売上個数を書いたエクセルが合って、これに罫線を入れて表の形にするマクロを作成したとしましょう。(間の日にちについては割愛させてもらっています)

Excel上で作成した8月の表マクロを使用し綺麗な罫線を引けている
Excel上の6月の表、8月と日数が違うため、マクロを使用したら最終行に空白が入ってしまっている。

左の表を見る限り最終行は『33』だからそこに合わせればいいと思うかもしれません。ですが、ご存じの通り毎月の日数は毎回31日ではありません。30日の月もありますし、二月は28日です。更に言えば、うるう年の時は29日ですよね。そうなった場合右側の表のように最終行に無駄な空白ができてしまうと思います。そうならない為にどうすればいいでしょうか。

やり方は幾つかありますが、簡単なのを上げると罫線を引くマクロの中に、表の日付が入力されている最終行の位置を取得して変数に入れることです。上の表で言うと、左なら『33』を取得してくれて、右側の表では『32』を取得してくれるようになります。そうすれば、最終行の位置が変わってもピッタリ罫線を引いてくれるようになりますよね。

これはあくまでも一例で変数を使うことで他にも様々な利点がありますが、これだけでも変数を使う利点が少しわかってもらえたのではないでしょうか。

Variant型使用時の注意点

少々話がずれてしまいましたが、型の話に戻りましょう。型の種類の表をみて、これだったら『Variant』だけ覚えればいいのではないかと思う方もいるのではないでしょうか。前述した通り、変数にはそれぞれ入れるものによって『』を変える必要がありますが、『Variant』であればその必要がありません。

正直、筆者もその気持ちがわかります。楽できるなら楽をしたいですから。ですが、そんな便利な『Variant』ですが、二つほどデメリットがあります。

  • マクロの処理速度が遅くなる
  • 想定していない動作が起きる可能性がある

マクロの処理速度が遅くなる

例えば、部屋に沢山ある荷物をきちんと整理整頓しておいているのと、何でもかんでも適当にまとめておいている場合、必要なものを探し出すのにどちらが早く見つけられるか考えると、圧倒的に整理整頓してある方が見つけやすいと思います。

それと同じでマクロでも探す分だけ時間がかかってしまうと思ってください。ただ、最近のPCはCPUやメモリの性能が上がったこともあり、ほとんど処理速度の差がないともいわれています。

想定していない動作が起きる可能性がある

簡単な例を上げてみましょう。下のコードを見てください。これはB3セルにデータ1とデータ2に入力した数字の合計を出力するマクロです。

Sub バリアント型()

Dim データ1 As Variant
Dim データ2 As Variant

データ1 = "10"
データ2 = "10"

cells(3,2)= データ1 + データ2

End Sub

一見すると問題なさそうに見えますが、これを出力すると以下の通り出力されてしまいます。

コードに記載のある10と10を足し合わせて20が表示されてほしかったが1010と表示されてしまったエクセル画面

このように意図しない出力されてもエラーを吐くことなく処理が進んでしまう可能性があります。エラーにならないことは不具合の発見を難しくさせてしまいます。実際のコードはもっと行数が多いですし、場合によっては複数人で作成している場合もあり、そうなると探し出すのにより多くの労力を使ってしまいます。

きちんと型を宣言すれば、こういった不具合が発生することはなくなります。なので、最初の頃は『Variant型』を使ってマクロを組んでも良いですが、慣れてきたらきちんと型を合わせてマクロを組むように意識してください。

ちなみに上記のマクロは『Variant型』ではなく、数値を格納数型である『Long』などに返ればきちんと望んだ値を出力してくれます。

Sub バリアント型()

Dim データ1 As Long
Dim データ2 As Long

データ1 = "10"
データ2 = "10"

cells(3,2)= データ1 + データ2

End Sub
コードの型をVariantからLongに変更したことで20と望んだ値が出力されたエクセル画面

おわりに

今回は以上になります。変数については最初に書いた通り、マクロを組むにあたって絶対に必要になるものです。ですが、これも最初から全て完璧に覚えなきゃいけないわけではありません。わからなかったら都度ネットで調べればいい訳ですし。実際にVBAを触りながら、調べながら試していってもらえればと思います。

次回は変数の逆と言ってもいい定数について説明していきたいと思いますので、興味があれば読んでいただけるとありがたいです。

では、ありがとうございました。

作者情報

小説と音楽をこよなく愛する本の虫。一週間本を読んでいないと死にそうになる。最近行った大きな本屋で買った日本神話に出てくる「ヒルコ」についての本にハマって日本神話の関連書を読み漁っている。