VBAマクロ

ExcelVBA-変数の型について

  1. HOME >
  2. VBAマクロ >

ExcelVBA-変数の型について

今回は変数について紹介します。VBAプログラムを作っていく上で必須ですが、これを理解するのが少々難しく、つまずく人は多いようです。これが理解できればVBAの世界が一気に広がりますのでぜひマスターしてください。

エクセルVBA-変数

変数とはいろいろなものを入れる箱のようなもので、入れたものを好きな時に取り出して使うことができます。入れる箱には種類があり、どんなものをいれるかによって箱を決める必要があります。この入れる箱の種類のことをVBAではデータ型と呼んでいます。変数が使えると具体的にどんなことができるようになるかは一番下の【変数を使ったループ処理の例】をご覧ください。

データ型

まずはデータ型について表にまとめました。

まず覚えてほしいデータ型

データ型 名称 格納できるもの
Long 長整数型 -2,147,483,648から2,147,483,647までの整数
String 文字列型 最大で約20億文字まで

 

その他のデータ型

データ型 名称 格納できるもの
Boolean ブール型 True(真)かFalse(偽)
Byte バイト型 単一で署名のない8ビット(1バイト)の
0から255の範囲の数
Currency 通貨型 -922,337,203,685,477.5808 から
922,337,203,685,477.5807の範囲
Date 日付型 西暦100年1月1日から
西暦9999年12月31日までの日付と時刻
Double 倍精度浮動小数点型 -1.79769313486231E308から
-4.94065645841247E-324(負の値)と
4.94065645841247E-324から
1.79769313486232E308(正の値)
Integer 整数型 -32,768 から 32,767までの整数
LongLong LongLong整数型 -9,223,372,036,854,775,808 から
9,223,372,036,854,775,807までの整数
※64ビット プラットフォームのみ有効
Object オブジェクト型 オブジェクトを参照
Single 単精度浮動小数点型 -3.402823E38 から -1.401298E-45 (負の値)
1.401298E-45 から 3.402823E38 (正の値)
Valiant バリアント型 全てのデータ

 

まずは2つの変数LongStringを覚えてください。これを覚えれば結構なVBAが作れます。その他のデータ型についてはこういう型があるということを覚えていればOKです。バリアント型は何でも格納できる便利なデータ型なのですが、多用するのはあまりおすすめしません。変数の基本的な考え方が身に付かないし、予期せぬエラーの原因にもなり、修正に手間がかかる要因にもなります。

 

変数の使い方

変数の宣言

まずは変数の宣言をします。変数の宣言とは『この箱にこういう種類のものを入れます』と最初に記述することを言います。

サンプルコード

Sub DimTest1()

    Dim i As Long '長整数型(Long)の値iという箱に格納する宣言記述です

End Sub

基本は【Dim 変数名 As データ型】という形になり、Dimのことをステートメントと言います。変数の宣言はしなくても問題ないですが、複数の変数を使うようになると、後々この変数には何を入れていたのかが分かりにくくなるため、必ず宣言をすることをおすすめします。VBEの設定で【変数の宣言を強制する】という設定ができ、これを設定すると宣言なしでは変数が使用できないようになるので設定するようにしましょう。

VBEの設定画面を開く

 

設定後、新規モジュールを作成するとOption Explicitが自動挿入される

 

変数の適用範囲(スコープ)

先程はDimステートメントを使った基本の宣言を記述しましたが、記述する場所や違う種類のステートメントを使うことによって、宣言した変数が使用できる範囲が変わります。簡単な表を作成しましたので確認してください。基本的にはDimPublicが理解できれば問題ありません。

ステートメント 宣言場所 適用範囲
Dim プロシージャの中 宣言を記述したプロシージャ内のみで使用可能
モジュールの先頭
(プロシージャの外)
宣言を記述したモジュール内にある
全てのプロシージャで使用可能
private モジュールの先頭
(プロシージャの外)
宣言を記述したモジュール内にある
全てのプロシージャで使用可能
Public プロジェクト内のいずれかのモジュールの先頭
(プロシージャの外)
宣言を記述したプロジェクトにある
全てのモジュールの

全てのプロシージャで使用可能
Static プロシージャの中 宣言を記述したプロシージャ内のみで使用可能
Dimとの違いはプロシージャ終了後も値を保持する
下記のいずれかを実行すると値はクリアされる
①新規プロシージャを作成する
②VBEのリセットボタンを押す
③Endステートメントを実行する

ポイント

プロシージャとは・・・Sub~End Subまでのプログラムの塊のこと(通常のエクセルで言うとセルにあたるイメージ)
1つのプロシージャ内のみで使用可能な変数のことプロシージャレベル変数と言います。

モジュールとは・・・プロシージャが記述されているシート全体のこと(通常のエクセルで言うとワークシートにあたるイメージ)
1つのモジュール内の全てのプロシージャで使用可能な変数のことをモジュールレベル変数と言います。

プロジェクトとは・・・全てのモジュールが格納されている大本(通常のエクセルで言うとワークブックにあたるイメージ)
1つのプロジェクト内ならどこでも使用可能な変数のことをパブリックレベル変数と言います。

VBEのエクスプローラで説明

 

変数の使用例

それでは実際に変数を使って簡単なコードを書いてみましょう。

プロシージャレベル変数

サンプルコード

Sub variableTest1()

Dim i As Long 'iという入物に数値を入れますという宣言

        i = 1 'i1を入れます

        Cells(i, 1) = i  '①

        i = i + 1 '②

        Cells(i, 1) = i '③

End Sub

①ではi1が入るので、Cells(1,1)=1となりセルA11が入力されます。
②の式が少し難しいかもしれませんが、=を『等しい』と考えるのではなく『右の値に置き換える』という風に考えてください。i = i + 1 という式は『i + 1 の値を i に入れる』という意味になり、これ以降の i の中身は2に変わります。
③ではi2が入るので、Cells(2,1)=2となりセルA22が入力されます。

この場合の変数 i は【variableTest1】というSubプロシージャの中だけで使用ができる変数となります。

 

モジュールレベル変数

サンプルコード

Dim i As Long 'iという入物に数値を入れますという宣言(モジュールの一番上に書く

Sub variableTest2()

        i = 1 'i1を入れます

        Cells(i, 1) = i  '①

        i = i + 1 '②

        Call variableTest3'③

End Sub

Sub variableTest3()

        Cells(i, 1) = i '④

End Sub

①ではi1が入るので、Cells(1,1)=1となりセルA11が入力されます。
②の式でこれ以降の i の中身は2に変わります。
③のCallというのは別のプロシージャを呼び出すステートメントで、ここでは下にある【variableTest3】を呼び出し、そこに移動します。
④では②で変化した中身が使用されるので、i2となりCells(2,1)=2という式になります。つまりセルA22が入力されます。

この場合の変数 i は同じモジュール内であればどのプロシージャでも使用できる変数となります。

 

パブリックレベル変数

今度は別々のモジュールにあるプロシージャ間で変数を使用します。下記のようにModule1とModule2にあるプロシージャ間で変数iを使用してみます。

Module1コード

Public i As Long 'iという入物に数値を入れますという宣言(モジュールの一番上に書く

Sub variableTest2()

        i = 1 'i1を入れます

        Cells(i, 1) = i  '①

        i = i + 1 '②

        Call Module2.variableTest3'③

End Sub

Module2コード

Sub variableTest3()

        Cells(i, 1) = i '④

End Sub

①ではi1が入るので、Cells(1,1)=1となりセルA11が入力されます。
②の式でこれ以降の i の中身は2に変わります。
③のCallで、Module2にある【variableTest3】を呼び出し、そこに移動します。
④では②で変化した中身が使用されるので、i2となりCells(2,1)=2という式になります。つまりセルA22が入力されます。

この場合の変数 i は同じプロジェクト内であればどのモジュールのどのプロシージャでも使用できる変数となります。

 

変数を使ったループ処理の例

ここでちょっとしたループ処理を使い、変数の具体的な利用例を簡単に紹介します。ループ処理の詳細については別でご紹介します。

サンプルコード

Sub variableTest1()

Dim i As Long 'iという入物に数値を入れますという宣言

    i = 1 'i1を入れます

    Do Until i = 100 '①

        Cells(i, 1) = i  '②

        i = i + 1 '③

    Loop '④

End Sub

Do Loop というループ処理で、動作する順番は①→②→③→④→①→②・・・・・とループします。
①で使用しているUntil~になったら処理を終了するという条件。ここではi100になったらループ処理を終了するという意味になります。それまでは処理を繰り返します。
②は先程までと同様。最初はi1なのでセルA11が入力されます。
③でi2に変わります。
④はここでループ処理が終了の合図なので、①へ戻る。この時にi100に等しいかどうかをチェックして、100であればループ処理を終了します。この時点でi2のためループ処理は続行されます。

2回目の処理に入り、②のiには2が入るためセルA2に2が入力され、③でiが3に変わります。そしてまた①へ戻り、iが100になるまで処理を繰り返します。

つまりこのプロシージャを実行するとセルA1~セルA991~99の連番が入力されます。②の内容を変えればいろんなことができるようになります。

まとめ

プログラムにおいて変数というのは非常に重要で、これなしでプログラムを作成することは困難です。最後に紹介したループ処理の例をみていただければわかるかと思いますが、もし変数を使用せずに同じことをやろうとすると、99行の構文を手入力するしかありません。これが何十万行ともなると気が遠くなるでしょう。変数とループ処理を合わせれば、何十万でも何百万でも、終了条件を変更するだけで簡単に対応することが可能となります。ぜひマスターして応用しましょう。

 

おすすめ!!

本サイトでは常に最新機能を兼ね備えるMicrosoft365 PersonalのExcelを使用しております。旧バージョンでは使用できない便利な機能や最新関数が盛りだくさんなのでぜひ下記よりご購入ください。



新着記事

便利機能

2022/4/9

Excel-名前を姓と名に分ける【フラッシュフィル】の使い方

名簿などを作っている時に、名前を姓と名に分けて入力するか、スペースを空けて一つのセルに入力するか迷う時があります。後々後悔することもしばしばありますが、そんな時に便利なのがフラッシュフィルです。一つのセルに入力されている名前を姓と名に一瞬で分けてくれます。逆に姓と名が別々になっているものを一つにするこも可能です。実に簡単なので覚えておくと何かと便利な機能です。   Excel-フラッシュフィル 目次1 名前を姓と名に分割する2 別々になっている姓と名を結合する3 メールアドレスを分割・結合する4 ...

続きを読む

便利機能

2022/4/8

Excel-フィルター機能の使い方

エクセルのフィルター機能は膨大な量のデータベースから必要な条件に該当するデータだけを抽出する機能です。何万行というデータの中から「この条件に合うデータだけ抽出したい」という時に、目で見て抽出していたら何日かかるかわかりません。その時にフィルター機能を使うと一瞬で必要なデータだけが抽出できます。抽出したデータを基にいろんな分析ができるのがフィルター機能の醍醐味です。   Excel-フィルター機能 目次1 基本的な使い方2 SUBTOTAL関数を使った集計3 まとめ こんな時に便利 膨大なデータベ ...

続きを読む

便利機能

2022/4/8

Excel-入力規則の使い方

入力規則とはあらかじめセルに入力できる値を制限しておく機能です。入力する項目が限られている時はリスト化してマウスで選択するだけで入力することができます。また第三者に発注書などの資料を渡して入力してもらう際、予期せぬ入力をされてしまい、結果的におかしな資料になってしまうようなこともあるため、事前にセルに入力できる値を制限しておくことによりトラブルを未然に防ぐことができます。   Excel-入力規則 目次1 基本的な使い方1.1 【設定】1.2 【入力時メッセージ】1.3 【エラーメッセージ】1. ...

続きを読む

便利機能

2022/4/8

Excel ショートカット一覧【便利技収録】

基本的なコピー&貼り付けから、セルの移動・選択などマウス操作では時間がかかる操作も、ショートカットを使えば一瞬で操作が完了します。ここでは比較的よく使用するショートカットを紹介しますので、ぜひ覚えて活用してください。 参考 印刷用は下記よりダウンロード可能です。 ・ショートカット早見表(縮小版A4用紙1枚)JPG ・ショートカット集(拡大版A4用紙9枚)PDF   エクセル-ショートカット集 目次1 ファイル操作2 検索 / 置換3 入力 / 挿入 / 削除 / 編集4 ワークシート操作5 コピ ...

続きを読む

関数・数式

2022/4/8

Excel【INDEX】【MATCH】の使い方

INDEXは検索関数の一つで、VLOOKUPよりは知名度は低い関数ですが、柔軟な検索が可能となっており、VLOOKUPではできない検索も可能となります。INDEX単体で使ってもあまり意味がなく、MATCHなどとセットで使うのが基本だと覚えてください。MATCHの使い方も一緒に解説します。 エクセル関数-INDEX 目次1 INDEX関数の使い方1.1 基本的な使い方1.2 MATCH関数と組み合わせて使う1.3 領域番号を使って複数の表を切り替えて参照する2 MATCH関数の使い方2.1 完全一致の検索2 ...

続きを読む

-VBAマクロ

© 2024 Excelエクセルを基礎から学び 上級者へ