VBA-8変数の宣言とは何かマクロの中で使い方を決めます

お知らせ記事には広告が含まれておりますがExcelのスキルUPに繋がる様コンテンツ自体は手を抜かずに作成しております

変数の宣言とは何かを考える

本記事では変数の定義、データ型について解説してきます。

変数を使うにあたって決まりがありますのでここで紹介させていただきます。

本記事を読むとコード内で変数を定義する方法、変数のデータ型の種類について学ぶことが出来ます

EnjoyExcel
EnjoyExcel

前回記事で変数について学習しました。今回も変数について学習してもらいます。

柔軟な使い方が出来る変数には一定の決まりがあります。

前回の記事

前の記事では変数という機能を使ってコードを書いてみました。

コードの中でうまく使う事でセルの範囲や値がどんな値でも一旦受けてくれます。

これで都度範囲が違うデータに対しても柔軟に対応出来るようになります。

本記事での課題

今回の課題です。重要度高い記事です。頑張って理解してください。

EnjoyExcel
EnjoyExcel
課題

変数を宣言する理由を理解しよう

初心者向けエクセルマクロ学習シリーズ

変数について

まずは変数とはどんなものなのかを確認しておきます。

プログラミングにおける変数(へんすう、: variable)とは、高水準言語プログラムソースコードにおいて、扱うデータを読み書きする記憶域 (storage) のこと

Wikipedia:変数(プログラミング)より抜粋、加工

ちょっと分かりにくいかもしれませんが最初と最後だけ切り取ってつなげてみましょう。

プログラミングにおける変数はデータを読み書きする記憶域のこと

つまりプログラミングには情報を記憶させる領域があってその記憶領域の事を変数と呼んでいます。

変数というぐらいなので数値だけなのかと思ってしまいますが文字列や日付なども格納することができる領域です。

変数を「宣言する」と何が起きるのか

変数を宣言するというのはプログラム(プロシージャ)の中で「〇〇を変数として使うよ」と決める事を言います。

具体的にどうやって宣言するのかを今から説明します。

変数を宣言する方法は色々ありますが主にDimというキーワードを使います。Dimは以下の様に使います。

Dim の使い方

Dim ○○ As △△ ’○○に対する説明(コメント)

Dimの後に続く〇〇は変数です。変数はほぼどんな言葉でも(日本語でも英語で)OKです。

具体例:変数を宣言してみる

実際に使ってみましょう。以下の様にコーディングすることで変数を宣言することができます。

  • Dim r as Long ・・・ r という変数はLong型です
  • Dim keyword as String  ・・・ keywordという変数はString型です

これでプロシージャの中で「r」、「keyword」という文字を使うと変数だよとVBAに認識してもらえます。

続いてデータ型について説明します。具体例の中で使ったLongやStringについて説明します。

変数の型

続いてデータ型の説明に入ります。データには型というものがあります。ざっと書き出してみました。

例えばString型は文字列しか扱えません。数値など文字列以外の情報を入れようとするとエラーになります。

番号コード読み方データ型値の範囲
1Stringストリング文字列ひらがなや英文字などの文字列
2BooleanブーリアンブールTrueまたはFalseの2択
3Integerインテジャー整数一定の範囲の整数
4Longロング長整数Integerより広い範囲の整数
5Singleシングル小数一定の範囲の小数
6Dateデイト日付日付
7VariantバリアントなんでもOK上記を含めなんでもOK(オブジェクトも格納できる)
全部ではないですが頻度が高そうなものを紹介しておきます

変数を宣言する際に型を決める理由

型を決める理由は型によって確保するべき領域が違うからです。例えば3番のIntegerと4番のLongを比較してみます。

Longの方が桁数の多い数値を持つことができるので結果多くの領域を確保する必要があります。

この様に用意された記憶域からどれだけの領域を用意するのかを決める為に型を決めてから変数を宣言しています。

変数にも一定の決まりがある

ここからは具体的に変数を使う際に気を付けてほしいことを紹介します。

VBAで使用されているキーワードはNGです

変数を設定する際はもともとVBAで設定されているワードはNGですのでご注意ください。

例えば「Range」を変数とし使うことはできません。変数なのかRangeオブジェクトなのか判断がつかない為です。

桁が多い変数はその分メモリを消費する

先程紹介した型を決めるという話の続きです。もう少し具体的に書きます。

Integer と Long はどちらも整数(数値)を扱っている型です。

Integer は -32,768 ~ 32767 の整数。 Long は-20億~+20億ぐらいの数値を扱う事が出来ます。 

ITパスポートや基本情報技術者を受験したことがある人は数値を見た時に気付くかもしれません。

Integer型は2バイトで16ビット、Long型は4バイトで32ビットという事です。

難しく感じる人もいるかと思いますのでこの辺で止めます。まずは数値の差で確保する領域が違う事が分かればOKです。

重要なことは「桁を多く持てる型を定義するときはそれだけ大きな領域を使う」という事です。

整数はLong型一択

理屈上は上記のような建付けなので扱う文字に合わせて変数を宣言することになっています。

しかし現在はPCのレベルも上がっています。使用者側がメモリの心配をする必要はないと言われています。

つまり整数は全部Long型で宣言しても問題ないという事です。実際私は整数を使うときはLong型一択です。

ではなぜ先程のブロックでInteger型の説明をしたのかと考えてしまいますね。これには理由があります。

変数の型とメモリの量を数値で認識してもらう為に紹介した次第です。

Option Explicitについて

続いて「Option Explicit」の解説をします。シリーズ2番目の記事で触れましたがその時は説明しませんでした。

説明する機会がきましたので解説します。簡単に言うと「変数の宣言を強制しますよ」という印です。

表示方法

VBEに文字を直書きしてもOKですがVBEからの操作を紹介しておきます。

まずは「ツール」タブを押下。その後「オプション」を押下。

オプション」というタイトルのダイアログボックスが立ち上がります。

変数の宣言を強制する(R)」にレ点を付けてください。

これでこのダイアログボックスでの操作は終了です。

OK」ボタンを押下しダイアログボックスを閉じてください。その後コードウインドウを確認します。

これでコードウインドウの先頭に「Option Explicit」が表示(記述)されます。

表示されない方は上記設定が出来たらデータを保存してから一旦Excelを閉じましょう

再度Excelを起動させてVBEを確認してください。これで表示が入るはずです。

Option Explicitを記入すると何が起きるのか

結論としては「変数を使う際はDim・・・を使わないと宣言できない」状態を作り出すことができます。

先程変数は「Dim・・・」で宣言して使ってくださいと書きましたが少し例外があります。

実は「Dim・・・」という形で変数を宣言しなくても変数は使えます。

しかし変数を変数として宣言しておかないと自分以外の人がコードを見た時に困ってしまうと思いませんか?

先程の事例を使って説明します。

  • Dim r as Long ・・・ r という変数はLong型です
  • Dim keyword as String  ・・・ keywordという変数はString型です

「r」、「keyword」が変数なのか?どんな値が入るのかが見えないままだとそれだけでコードが難しく感じてしまいます。

自分以外の人が見て分かる様なコードにしておくためにはできるだけ分かりやすくコードを書かないといけません。

Option Explicitを書いておけばコーディングに変数を使う時は「Dim・・・」を使わないとエラーを出せます。

という事は「Dim・・・」という形で変数を宣言せざるを得ないですよね。結果コードが分かりやすくなるという事です。

この様にOption Explicitを記入すると分かりやすいコードを書いてもらう為の環境を担保することができます。

メリット

多少重複しますがあらためてOptionExplicitを記入する事によるメリットを提示します。大きく分けて2つです。

  • エラーチェック
  • 他の人の書いたコードを読む時や自分のコードを他の人に読んでもらう時に便利に働く

エラーチェック

定義した型と違う型の値が入力された際エラーを出してくれます。

エラーで間違いを教えてくれます。リカバリーしやすい環境を作る事ができます。

もう1つのチェック機能として自動変換の機能も追加されます。

例えば「ABE」という変数を設定した際 「abe」と入力しEnterを押すと自動で「ABE」に変換されます。

入力間違いが起きにくくエラーが出ないように助けてくれます。

他の人の書いたコード・・・便利に働く

続いて他人のコードを読むとき・・・便利に働くについて説明します。

変数は自由に設定出来るのでコード内でいろんな変数が設定出来ます。

たくさん変数が使われると「この変数は何のこと?何に使っているの?」といった事が起きます。

自分でも思考が制御出来なくなり読みにくいコードを書くことになってしまいます。

当たり前ですが書いた人でも理解するのに苦労する変数(コード)は書いてない人が読むと非常に難解です。

数ヵ月すると書いた本人も忘れてしまいます。

メンテしたくてもリカバリーできず結局コードを全部書き直すという事が起こるかもしれません。

誰もが読みやすくする為には作法が重要です。

参考:Option Explicitの表記はおすすめですが強制はしません

基本的には「Option Explicit」を書いた後型を定義しコメントで内容を説明するという作法を守りましょう。

後で自分が見る時、他者が見る時もある程度見当がつくようなコードを書くことが出来ます。

ただし自由度が大きいVBAですのでこれが絶対ではないです。

少ない量のコードであったり使用する変数の数が3~5個程度であれば説明は不要かもしれません。

ここは慣れですので各自の状況で判断してください。

応用:変数の定義を用意する際の具体例

あくまで私の使用例ですが変数を定義する際はコメント含めこんな感じで書いてます。

一例として他のデータから画像だけ取ってきましたので内容は全く分からなくて大丈夫です。

フォーマットとしてこんな感じなんだなと思ってください。

f:id:EnjoyExcel:20220226012841p:plain

この場合はコードの量としては少なく変数の数も4つだけでした。

しかし説明がないと他者に伝わらないかもしれない考えコメントを残すようにした次第です。

*(アスタリスク)を使って仕切りを作るなど見易さを考えてコーディングしてあげるのもおすすめですよ。

まとめ

作法を守ってコードを書くとトレーサビリティの要素を備えた変数を用意する事が出来ます

よって変数は宣言してから使いましょう。

本日勉強したこと
  1. 変数はいろんな型がある
  2. 変数は宣言してから使おう
  3. コメントで変数の説明をしよう
正しく変数を使おう

Enjoy Excel

次は罫線を書いたりコードをセル画面から実行できる様ボタンを設定するための説明をします。

ボタンを押したらメッセージボックスを出して処理をするか?の確認も付けたいです。

メッセージボックスもセットしたいですね。 次回説明以降でしていきます。

参考:関連記事

本シリーズはこちらの記事とも連携しています。

マクロ勉強の道筋マクロは何から勉強するのか|学習をサポートするためのロードマップを作成

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