支援対象地域:札幌、仙台、関東、愛知、関西、広島、福岡

  • TOP
  •   
  • コラム
  •   
  • エクセルマクロ(VBA)の変数を使っ

・変数とは

数値や文字列などのデータを一時的に格納する箱のことです。具体例としてある商品の値段が100円で、売れた個数をx、その売り上げをyとすると方程式としては「y=100x」となります。つまり方程式でいうyとxが変数になります。エクセルマクロで毎回変わる値に関して変数にして、何らかの方法で取り出して、プログラムに代入していきます。

・変数の型

変数には先ほど紹介した例の数値だけでなく、文字や日時、日付なども入ります。ただし変数を使うためには、その代入する変数の種類の型を宣言しないと、使用できません。 変数の型については以下の通りです。

・Integer 整数型で-32,768 ~ 32,767までの数値を格納できます。
・Long 長整数型で-2,147,483,648 ~2,147,483,647までの数値を格納できます。
・Double 小数点型で小数点を扱う場合に使用します。(Singleというのもありますが、Doubleだけ覚えておいて問題ないです。)
・String 文字列型で約20億文字まで格納できます。
・Date 日付型で西暦100 年1月1日~西暦9999年12月31日までの日付と時刻を格納できます。
(例 日付:"2020,10,20"、時間: "18:24:00")
・Object オブジェクト型でブック、ワークシート、セルを格納することができます。
・Boolen ブール型でTrueまたはFalseを変数にする場合に使用します。
・Variant バリアント型でどんな種類の変数も入れることができます。
(予期せぬ値が入ってきても変数に値が入ってしまうというデメリットがあります。)

*最初の方はLongとStringだけ覚えておけば十分でしょう。

・変数の使い方

変数を使用するには変数を宣言する必要があります。→「Dim 任意の変数名 [As データ型]」[ ]の部分を省略するとVariant型になります。変数を複数使用したい場合はその都度、変数を宣言する必要があります。

注意:「Dim x,y,z As Long」と書くとLong型はzだけ指定したことになり、x、yはVariant型となります。

・変数名の命名規則

・半角、全角の数字と文字を使えます。
・変数名の長さは、半角で255文字以内(全角なら127文字以内)です。
・記号はアンダーバーのみ使用可能(ピリオドやスペースは使用できない。
・1文字目は、数字、_アンダーバー、記号を使用することができない。
・VBAが意味を持たせている語句は使用できない。(VBAのステートメント、オブジェクト、プロパティ、メソッドの名称など)
・大文字、小文字の区別がなく、同様に扱われる。

・エクセルマクロ使用例

実際のサンプルコードでエクセルマクロ(VBA)の書き方についてみていきましょう。

・Long型
サンプルのマクロは1から100までの合計の数値を表示するコードです。Long型で変数を3つ宣言し、iにはForステイトメントの繰り返しの条件に使い、date1とdate2は1から100までの合計値を格納します。

・String型
サンプルのマクロはInputBox関数でダイアログボックスを画面に表示し、ユーザーからのデータ入力を受け付けます。date1にInputBox関数で入力した内容格納して、格納した内容を表示するというコードです。

・Date型
サンプルのマクロはdate1~date3にそれぞれ日付、日時、日付と日時を格納して内容を表示するコードです。変数に代入する場合はダブルクォーテーション(” ")かシャープ(##)で囲む必要があります。日付と日付の間はスラッシュ(/)、日時と日時の間はセミコロン(:)を入れる必要があります。ちなみにMsgbox内のvbLfは改行するときに使います。

・Object型
サンプルのマクロはdate1~date4にそれぞれ指定したマクロ、商社、5,299,814、上場を格納し、内容を表示するコードです。サンプルコードはsheet3に書かれています。会社名、業種、売り上げ、株式の表はkeisan2のワークブックのsheet1に作成されているので、コードにはワークブック(サンプルコードの例では省略可能)とワークシートを指定する必要があります。オブジェクト型はオブジェクト(ブック、シート、セル)を指定するには変数の前にSetをつける必要があります。

・Boolen型
サンプルのマクロは変数date1をString型で宣言し、文字を格納します。変数ResultをBoolen型で宣言し、Ifステイトメントでdate1がString型であるか、そうでないかを判断して、内容を表示するコードです。ちなみにDebug.Printはイミディエイトウィンドウに結果を表示し、Msgboxはダイヤログボックスに結果を表示します。単純に結果が一つだけ表示されるならMsgbox、結果が複数表示されるループ系構文ではDebug.Printを使用する方がよいでしょう。