ExcelVBA入門第3回 変数の宣言

ExcelVBA入門第3回 変数の宣言

○○に××を入れる、だけの簡単なプログラムだけでは、便利なものは作れません。今回は、プログラムを書く上で非常に重要な、変数について書いてみます。


変数って?

wikipediaにはこう書いてあります。

プログラミングにおいて、変数(へんすう、variable)とは、プログラムのソースコードにおいて、扱われるデータを一定期間記憶し必要なときに利用できるようにするために、データに固有の名前を与えたものである。

これを私は、「決まっていないモノをとりあえず入れておく箱」だと捉えています。

今まではA1セルに100を入れよう、など「決まっているモノ」しか扱ってきませんでしたが、「計算して値が変化するモノ」や「プログラムを使う人に入力してもらうモノ」など、いろんなモノが必要になってきますよね。そんな曖昧なモノを入れておく箱を用意しよう!それが変数宣言です。

例として

A1セルに○月という文字を入れるプログラムを考えてみましょう。○は、ユーザー(使う人)に入力してもらう形とします。

値を入力してもらう前に、入れておく箱を用意しなければなりません。ここでは、「userMonth」という名前の変数にしてみようと思うので、

Dim userMonth as Integer

と記述します。Dimは「宣言」、integerは「整数型」という意味で、「userMonth」という整数型の変数を宣言します(「userMonth」という箱を用意します!)という意味になります。(「userMonth」は文字列はでなく変数なので、「”」で括る必要はありません)

これから覚える方は、整数型は「Long」で!

むかしは容量を抑えるために「Integer」という整数型が多用されましたが、現在はIntegerで宣言してもLong(長整数型)へ変換されるようなので、VBAの整数型は最初からLongにしておいたほうがよいそうです。この記事ではIntegerの記述をしてありますが、整数はLongをお使いくださいませ!

次に、ユーザーに入力してもらう準備です。方法はいろいろありますが、ここでは、一番簡単なInputBoxを使います。InputBoxは

変数 = InputBox("文字列")

のように書き、実行すると以下のようなウインドウが表示されます。

120125-1

プログラムの全容

これを使って、今回の目的のプログラムを書いてみると、以下のようになります。

Sub Test()
  Dim userMonth As Integer

  userMonth = InputBox("何を入れますか?")
  Range("A1") = userMonth & "月"
End Sub

第1回の記事を参考に、コピペして試してみて下さい!どうでしょう、うまくいきましたか?

120125-2

イメージとしては、こんな感じで動いています。

でもこのままだとエラーが…

上記のプログラム、数値以外のものを入力、又はキャンセルすると「型が一致しません」というエラーが出るのはお気づきでしょうか?これは、変数「userMonth」は「Integer(整数)」だよ!と最初に宣言しているからなんです。

120125-3

変数にはいろんな型があり、それぞれ宣言した型に当てはまるモノを入れないと「カタチが違うから箱に入らないよ!」と言われてしまいます。ではなぜ「キャンセル」ではエラーが?と思いますよね。InputBoxは、キャンセルを「””(文字数0の文字列)」と捉えるという性質があります。ですので、キャンセルを押すと「この箱はInteger(整数)専用だから、String(文字列)は入らないよ!」と言われてしまうのです。

そのため、こういったエラーが起こらないように、エラー処理を含めてプログラミングをする、ということも大事になってきます。

上記のコードをエラー処理を含めて書いてみると、という例を以下の記事の最後に書いてありますので、読み進めてみてください(・ω・)ノ

よく使う変数のデータ型

  • Boolean … True/False のどちらかしか入らないが容量が軽いので条件分岐などに。
  • Integer … -32,768~32,767の範囲内の整数。
  • Long … -2,147,483,648~2,147,483,647の整数。
  • String … 文字列を扱う。「”」で括るのを忘れずに!
  • Date … 日付の他、時間も扱えます。

データ型とは変数に格納できるデータの種類で、こんな感じです。「Dim 変数 as データ型」 のように記述します。他にもたくさんありますので、調べてみてくださいね。

「なんでもOK」なデータ型

ちょっと融通が効かない印象ですが、どんな型にも対応できるバリアント型という便利なデータ型も存在します。宣言そのものを省略して(忘れて)しまった場合でも自動的にバリアント型になるという親切設計です。でもこれ、どんなものでも入れてしまえる懐の広さを持っている分、容量を食うのです。

120125-4

この型が必要なときももちろんあると思いますが、なんでもバリアント型にしてしまうとそれだけファイル容量も大きくなり、プログラムの速度も遅くなります。また、変数が多くなった時にエラーが見つけにくくなるというデメリットもあります。

宣言の仕方で使える範囲が違う

今まで、例としてDim ○ As Integerのように、Dimで宣言していましたが、他にもPrivatePublicというものがあります。

  • Dim ・・・ そのプロシージャ内のみ使える
  • Private ・・・ そのモジュール内のみ使える
  • Public ・・・ 全てのモジュールで使える

このように宣言の形で使える範囲が変わるので、違うプロシージャやモジュールを跨いで使ったり、ユーザーフォームなどを使うときには、その使い方に合った宣言方法をとるようにします。

こちらにもうちょっと詳しく書いています

こまめな変数宣言を心がける

変数は、使うモノに合ったカタチで宣言することによって、プログラムの速度も早くなるし、後々見たときに分かりやすくなります。自分が作ったプログラムを誰かが見るときもあるはずです。そんな時のために、是非きちんと変数宣言を行いましょう。

公開日:2012/01/25

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

コメントは承認制ですので、反映までしばらくお待ち下さい。(稀にスパムの誤判定にて届かないこともあるようですので、必要な際はお問い合わせからお願い致します。)

YouTubeでQ&Aコンテンツを企画しています

運営しているYouTubeチャンネルで、ご相談やご質問を募集しています。動画のコメントやお問い合わせページからお気軽にご相談をお寄せください。