VBA

VBAの変数とは? 宣言方法や書式をわかりやすく説明:Excel VBA入門 #2

VBA
この記事は約9分で読めます。

VBAはExcelのプログラミング言語だということをお伝えしました。そしてExcelのVBA入門として1番先に覚える必要のあるオブジェクト・プロパティ・メソッドの違いをわかりやすく説明しました。

次に覚える必要があるのはVBAの変数についてです。プログラミング言語で変数を扱えるようになると格段にコーディングの技術が上がりますし、時間も短縮することができます。VBAを扱う者として変数は避けて通れないものになりますのでわかりやすくご説明します。

VBAの変数とは

VBAの変数とは、取得した値や計算結果などを格納しておくメモリ領域です。変化する値を一時的に保管する入れ物や箱のことでも捉えていただく方がわかりやすいかと思います。

例えば貯金箱を変数と考えるとわかりやすいでしょう。貯金箱にはたくさんのお金を貯めることができますが、貯金箱にちょうど10,000円たまっていれば、貯金箱を渡すことで10,000円の買い物ができます。つまり変数という貯金箱には沢山のお金(命令文)を入れておくことができ、必要に応じてその変数を呼び出したりなどで利用できます。

もし貯金箱を1つだけでなく3つ持っていたとしてください。「1つ目の貯金箱は豚さん」「2つ目の貯金箱は牛さん」「3つ目の貯金箱は象さん」とそれぞれに名前があった方がわかりやすいように、変数にも名前をつけて管理することで、呼び出すときにも変数名で利用をすることができます。

変数を使うことでセル範囲を変更したり、計算結果が変わったりといった変化する値を使うことができます。変数はマクロの中に記述していきます。マクロとは「Sub マクロ名()」の命令文のまとまりのことを指しています。

ちなみに変数名は何でもOKというわけではなくルールがあります。

スペースや「!」「@」などの記号は使えないですし、VBAで予め設定されているオブジェクト、プロパティ、メソッドの用語は使えません。さらに1文字目には数字や記号を持ってくることはできないので、最初は何かしらの文字で始まると覚えておくとわかりやすいでしょう。それ以外であれば、アルファベット・日本語の漢字やカタカナなどなんでも使うことができます。

それでは具体的にVBAの中で変数を見ていきましょう。

 Sub hensu()

     Dim 豚さん As Currency
     豚さん = 10000
     MsgBox (" 豚さんの貯金箱は、" & 豚さん & " 円です")

   End Sub

このマクロ「hensu」の説明をしていきたいと思います。

DimというのはVBA変数の書式でも詳しく説明をしますが、変数を使うときにこれから変数をつかいますよ!って教えてあげるものです。つまりDimの後には変数がくるということを覚えてください。

今回は変数名に「豚さん」を定義したのですが、その後にAs Currencyというものがあります。これはさらにこの変数にどんなものを入れるのかを定義しています。今回はCurrency(通貨)になるので、お金の数字を入れると宣言していることになります。

この豚さんという変数の箱に「10000」という数字の通貨を入れました。その後は、MsgBoxというメッセージボックスに表示するものを記述しているのですが、豚さんの変数に入っている10000を表示させるだけではなく、その前と後に「豚さんの貯金箱は、」「円です」をそれぞれ文章を足してあげることで、メッセージボックスに「豚さんの貯金箱は、10000円です」と表示されるようにしました。

この豚さんの変数の箇所を1500に変えれば、そのようにメッセージボックスに表示されます。

このように変数を上手に活用するだけで、色々な箇所で使うことができます。

VBA変数のちょっとした使い方

VBAの変数については理解できましたが、先ほどまでは変数には静的な数字を入れました。もちろんテキストも入れることができるのですが、自由に変化するものを入れることができます。

 Sub hensu()

     Dim 豚さん As Currency
     Dim 牛さん As Variant
     牛さん = Second(Time)
     豚さん = 1500 * 牛さん
     MsgBox (" 豚さんの貯金箱は、" & 豚さん & " 円です")

   End Sub

例えば、今回のようなマクロを記述した場合は、1秒経過するごとにメッセージボックスに表示される値が変わっていきます。

変数名「牛さん」をAs Variantとすることでバリアント型変数を定義できます。バリアント型の場合はどんなデータでも格納できる万能の型となるため、困った場合は全てバリアント型にすればコンパイルエラーが起きる事はありません。

そして牛さんの変数に「 Second(Time)」という命令を書いて現在の秒数を取得して格納しています。つまりsecondという1秒ごとの数値を取得しているため、1秒経過するごとに値が変わると伝えました。またその牛さんの変数に対して、豚さんの変数の中で1500と掛け算をしているため、1秒経過するごとに1500ずつ増加していきます。では見ていきましょう。

今このマクロを実行すると、18000となりました。それでは10秒後に再度マクロを実行すると、『10 × 1500 = 15000 + 18000 = 33000』の計算がされるはずです。

しっかりと33000円と表示されていますね。このようにマクロの命令文を変更せずとも動的に数字が変わっていくような使い方をすることもできます。さらに変数の使い方としてECサイトを運営している場合なども変数を使うと便利な場面があります。

現在の消費税は10%ですが、消費税がもし将来変更になる可能性もあります。その時に消費税を一つ一つ変更するのは手間がかかって仕方ありません。しかし最初から変数名に消費税を入れておき、その変数名と商品の金額を掛け合わせるようにしておけば、いざ消費税が変わったときには変数名に入っている消費税率を変更すれば一度で全てに適用することができます。

このように変数を使いこなせるかどうかがきれいなプログラミング(マクロ)ができているかにもなるので、最初のうちは慣れないかもしれませんが、変数名を使うようにしてみてください。

ちなみに複数の変数を宣言するときに1行ずつ記述するのが面倒だと思います。その時には、「カンマ(,)」を使うことで1行で複数の変数を宣言できます。

 Sub hensu()

     Dim 豚さん As Currency, 牛さん As Variant

   End Sub

こちらは、1行で豚さんと牛さんを宣言していることになります。

VBA変数の宣言の仕方

先ほど変数名を宣言するときに「Dim」を使いましたが、Dim以外にも種類があり、公開範囲や適応範囲によってはDim以外を使った方がいい場合があります。VBAの変数には「Dim・Private・Public」の3種類があります。

  • Dim:宣言した変数はプロシージャないですか使用できない。
  • Private:宣言した変数はモジュール内のすべてのプロシージャで使用できる。
  • Public:宣言した変数はすべてのモジュールで使用できる。

ちょっとわかりづらいかと思いますが、公開範囲の大きさでいうと、「Public > Private > Dim」となります。Publicはもともと公という意味があるので、公開範囲が最も広いです。基本的にはDimを使えばいいのですが、ちょっと広めに使用したいなと思った場合には、「Private・Public」で宣言してみてもいいのではないでしょうか。

VBA変数の書式

変数を宣言する時に、「As」を使用して型の指定をしていました。しかしこちらの方の指定は必須では無いのですが、正しいものに指定することによってメモリが節約されてパフォーマンスが向上します。つまり変数の型によってそもそも使用しているメモリ数が違うことになります。

アルバイトを雇ってシフトを組む時を想像してみてください。Aさんは時給1,000円、Bさんは時給2,000円だった場合、同じアルバイトなんですが1時間で倍の賃金になってしまうため、店が混まない時間帯ならAさんに入ってもらった方がいいと考えますよね。これと同じような考え方で、変数に入れるものが予め決めっているのであれば、それに合わせて変数の型を指定することで作業が効率化されるということです。

私が型の指定で迷った際には「Variant」バリアント型を選択しておけば問題ないと伝えましたが、実はバリアント型は万能な分だけ一番メモリが大きい型になるため、全てバリアント型を指定しているとそれだけ重たいプログラミングになるためコンパイルに時間がかかってしまうので注意する必要があります。優秀なプログラマー(VBAマスター)となるにはしっかりと変数に入れるものに合わせて最適な型を指定してあげましょう。

データ型データ型名使用メモリ値の範囲
Integer整数型16ビット-32,768〜32,768の整数
Long長整数型32ビット-2,147,483,648〜2,147,483,647の整数
Single単精度浮動小数点型32ビット負の値は、-3.402823E38〜-1.401298E-45

正の値は1.401298E-45〜3.402823E38

Currency通貨型64ビット-922,337,203,685,

477.5808〜922,337,

203,685,477.5807

Variantバリアント型128ビット倍精度浮動小数点型と同じ
Date日付型64ビット西暦100年1月1日〜9999年12月31日
String文字列型10バイト+α0〜2GBの範囲の文字列(可変長)

0〜1GBの範囲の文字列(固定長)

Excel VBA入門:VBAの変数とは? わかりやすく説明

今回はExcel VBA入門としてVBAの変数についてご紹介してきました。変数とは何かを入れる箱のようなもので、変数を上手に使うことでプログラミングのレベルが上がりますし、より負荷のかけないプログラミングを書くことができます。変数を静的な数値だけなどを入れるのではなく、動的なものを入れることで人間ではやりづらいような、機械だからこそできるプログラミングが可能となります。

また変数には「Dim・Private・Public」の3つの宣言の仕方がありました。基本的にはDimを使うことがほとんどですが、利用したい範囲によっては「Private・Public」も使ってみてください。

最後に変数にはデータの形があります。最適なデータの型を指定することによって使用のメモリ数が変わってきますので、なるべく軽くすることによってプログラミング自体も綺麗です。綺麗なものは良いことがあり、コンパイルするときにも重くなりづらいので動作が速くなったりします。良いVBAマスターとなるためには、変数に入れるものを見極めて最も適した型を指定してあげてください。

コメント