あまり聞き慣れない言葉ですが、VBAを使う為には「変数」を知る必要があります。
簡単なマクロであれば変数が分からなくても作成が出来ますが、規模が大きくなるにつれて必要性が増していくような存在です。
この記事では変数の使い方とルール、そもそも変数って何?という所を解説します!
変数の基本
変数とは?
変数は名前が付いている箱です!!
おめえ何言ってんだ?と思うかも知れませんが、はっきり言ってそれ以上の事を知る必要はありません。プログラマーを目指しているのであれば止めませんが、業務で使用する程度であれば不要です。
さて、この箱には色々なデータを一時的に入れておく事が出来ますが、箱には名前を付けなければいけません。
例えばですが「ましゅかぶろぐ」という文字列を入れたい箱には「ブログ名」と名前を付けたり、数値の「100」を入れたい箱には「Number」と名前を付けます。
箱の名前の事を「変数名」と言います。
そもそもなぜ箱にデータを入れる必要があるかについては後ほど説明します。
変数名の命名で守らなければいけない4つのルール
箱の名前は自分の好みで設定出来ますが、4つだけ守らなければいけないルールがある事を覚えて置いて下さい。
- 変数名に使用出来る文字は英数字・日本語(漢字、ひらがな、カタカナ)・アンダーバー(_)のみ。スペースとその他の記号は使えない
- 変数名の先頭に数字とアンダーバー(_)は使用出来ない
- 同じ適用範囲で同じ変数名は使えない
- 変数名は半角で255文字以内にする
3番については同じファイル内で重複する変数名を設定しなければ問題ありません。
この4つを守れていない変数がある場合は、エラーでお知らせしてくれるので修正しましょう。
一人で運用する場合はこのルールを守るだけで良いのですが、誰かに見られる可能性があるマクロの変数名は「数年後に見てもすぐに中身が分かる」ように設定する事を心掛けましょう。
変数を設定する手順を解説
変数名を決める
変数を設定する事を「変数を宣言する」と言います。
「宣言します!!これは変数です!!」とプログラムの中で叫ぶんです。
先ほどご紹介した4つのルールを守って変数名を決めましょう。
分かりやすい名前が良いので、私の場合は名前を入れるような変数を宣言する時は「userName」だったり、りんごの数を入れる変数だと「appleCount」のような変数名を使用します。
データ型を決める
変数名だけではその変数に何を入れたら良いのか分かりませんよね。
先程宣言した変数「食べ物」では食べ物の名前を入れるのか、金額を入れるのか、産地を入れるのかと様々な選択肢がある訳です。
何を入れるか指定する為に「データ型」というものを使用します。
よく使用するものを表でご紹介します!
※覚える必要はありません。よく分からんけど、こうゆうのがデータ型なのね!くらいで大丈夫です。
データ型 | 名称 | 格納出来る範囲 |
---|---|---|
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.79769313486232E308 ~ -4.94065645841247E-324(負の値) 4.94065645841247E-324 ~ 1.79769313486232E308(正の値) |
String | 文字列型 | 最大約20億文字まで |
Date | 日付型 | 西暦100 年1月1日~西暦9999年12月31日までの日付と時刻 |
Boolean | ブール型 | 真 (True) または偽 (False) |
Object | オブジェクト型 | オブジェクト |
Variant | バリアント型 | すべてのデータ |
上から4つのデータ型については名称を見ているとさっぱり分からなくなりますが、「Integer」と「Long」が整数を入れる事が出来るデータ型で「Long」の方がより大きな範囲で整数を扱えます。
同様に「Single」と「Double」は小数を入れる事が出来るデータ型ですが、Doubleの方がより大きな範囲で小数を扱えます。
ちなみにObjectはファイルやシートを操作する際によく使用しますが、少し難しいので最初は使う機会が少ないかもしれません。
宣言する
それでは実際に変数を宣言して見ましょう。
変数を宣言するには下記のように記述します。
1 |
Dim 変数名 As データ型 |
繋げて記述すると変数として認識されませんので、半角スペースもしっかりと入力して下さい。
例えば「食べ物」という変数の中に食べ物の名前を入れたい場合ですが、
食べ物の名前は文字列なので「String」のデータ型です。
1 |
Dim 食べ物 As String |
このように記述する事で文字列を入れる事が出来る変数を宣言する事が出来ます。
変数を宣言する事で箱の準備はできたので、後は箱に入れるだけです!!
ちなみにデータ型の指定をしなかった場合は「Variant型」として認識されます。
1 |
Dim 食べ物 |
このように記述する事で、何でも入れることが出来る変数が宣言出来ます。
Variant型は何でも入れる事が出来るので便利ではあるのですが、思わぬエラーが発生する可能性があります。
入れるデータが分かっている場合はしっかりデータ型を指定しましょう。
実際に変数を宣言する
宣言するには?
変数に値を入れる時は下記のように 変数名 = 入れたい値 と記述します。
1 2 |
Dim 食べ物 As String 食べ物 = “りんご” |
入れたい値が文字列の場合は、ここからここまでが文字列ですよ、とプログラムに教えてあげる必要があります。
その為、文字列の前後には必ずダブルクォーテーション(“)を記述します。
文字列以外の数字や真偽値には記述する必要はありません。
なぜ変数が必要なのか?
変数を使う事でメンテナンス性と出来る事の幅が飛躍的に向上します。
さて、そもそもなぜこの「変数」が必要になるのかを実際のコードで確認しましょう。
まず変数を使わないコードをみてください。
1 2 3 4 5 6 7 |
Sub sample() MsgBox "りんごを食べる事でりんご特有の味わいが口の中に広がります。" MsgBox "想像するだけで食欲のそそられるりんごですが" & vbCrLf & _ "私はりんごが得意ではありません" End Sub |
文章に意味はありません。
とりあえず適当な事を書いていますが、私はりんごが好きです。
この文章には「りんご」という文字が複数含まれているのが確認いただけると思います。
次にこの文章を変数を使って記述している同じ文章をご覧ください。
1 2 3 4 5 6 7 8 9 10 |
Sub sample() Dim fruit As String fruit = "りんご" MsgBox fruit & "を食べる事で" & fruit & "特有の味わいが口の中に広がります。" MsgBox "想像するだけで食欲のそそられる" & fruit & "ですが" & vbCrLf & _ "私は" & fruit & "が得意ではありません" End Sub |
一見ややこしくなったように感じますよね。
では担当のミスで「りんご」ではなく「オレンジ」だった事が発覚したとしましょう。
変数を使用していないコードではすべてのりんごを変更する必要がありますが、
変数を使用しているコードは1ヶ所だけ変更すれば修正が出来ます。
便利なのは明らかに変数を使ったコードですよね。
他にも計算の結果やオブジェクトを一時的に保管する等、使い方は様々です。
変数の宣言を強制されるスパルタ設定
VBEオプションの一つに「変数の宣言を強制する」という項目があります。
これがスパルタなんですが、宣言していない変数があるとエラーとなり、せっかく作成したマクロを実行させてくれません。
この設定がオンになっている場合はモジュールの先頭に「Option Explicit」 の文字が記載されます。
変数の宣言はマクロを作成する上で避けて通れない道です。
せっかくなのでこのスパルタコーチに監視してもらいましょう!!
使い方やオプションの設定方法は下記の記事で解説していますので是非ご参照ください。
日本語で変数を宣言するのは問題無い?
ネットの記事で変数名の日本語入力は良くないと記載している事がありますが、結論からお伝えすると個人で使用する分には問題ありません。
過去に変数名を日本語で設定した事が原因でエラーが発生していた事もあります。
しかし現在のエクセルでは解消されていますので気にする必要はありません。
今後も日本語特有のエラーが別部分で発生する可能性がないとは言い切れませんが、そこまで気にする必要はないでしょう。
ちなみに私は日本語が混ざったコードの見た目が、どうしてもダサく見えてしまうので見た目重視で使用していません。
まとめ
ぶっちゃけた話ですが個人で作成しているマクロで使用する変数名は、ご紹介した4つだけルールを守れば何でも大丈夫です。
グループで運用する場合や会社で業務に使用する場合は引継ぎが必要になりますので、誰が見ても分かりやすい変数名やグループで取り決めたルールに沿った変数名を使用する必要があります。
変数を上手に活用する事で、修正に掛かる時間が劇的に削減出来ます。
はじめの内は作成しながら、良く使う値を変数に入れて使い回す事から始めて見て下さい。
コメント