※本ブログのページには広告主との提携による広告や宣伝、プロモーションが含まれます。当ブログを経由しての商品の購入や、サービス申し込みが発生すると、それらの提携企業からの成果報酬を受けとる場合があります。

エクセルVBA|変数の宣言と値やオブジェクトを代入する基本の使い方

エクセルVBAに限らず、プログラミングを学んでいる人は必ず『変数』というものを知ることになります。マクロやプログラムにおいて、変数を使ったものとそうでないものを比較すると、プログラミングのスキル面だけでなく、その機能の汎用性にも大きな差がでます。

例えば、実行ボタンを押すと「〇〇さん、おはようございます。」とメッセージを表示するマクロがあるとして、〇〇さんの部分に”ネコ”という決まった値を指定すると、そのマクロでは必ず毎回「ネコさん、おはようございます。」となります。これでは、”ネコ”さんにしか挨拶しないマクロになってしまいます。
このような場合、例えば「ネコさん、おははようございます。」の「ネコさん」の部分を『変数』に置きなおせば、変数の値に応じた人に対応したあいさつ文を表示するマクロとなるわけです。

マクロやプログラムは便利な機能を提供するものですが、それを利用する人は不特定多数です。そのため、ユーザーごとの環境に役立つものを作ろうとすると『変数』を使うことが必須だと言えます。なぜなら、ユーザーによって環境や、得たい結果が異なることが一般的だからです。

本記事では、ExcelVBAの『変数』について解説していきます。『変数』は、ExcelVBAでマクロをつくるスキルを上げるだけでなく、他のプログラミング言語を習得する上でに知識にも繋がります。これからプログラミングを学ぼうと考えている人や、マクロ開発のスキルアップを目指す人はぜひ参考にしてください。

『 変数 』はとても便利はものだよ。マクロをつくるためには必須の知識だよ。

エクセルVBAの変数とはどういったものか

はじめに変数とは何?といった疑問がありますが、Wikipediaによれば以下のとおりです。

エクセルVBAの変数とは

個人的にはこの説明で理解することが難しかったので、関連する本やインターネットの記事を参考にしたものでよくつかわれていた表現が以下のとおり

変数は値を入れておく箱

簡単にいえば、変数は学生のときにならったXをつかった文字式の「X」のようなイメージだと言えます。ただし、文字式でならった「X」と異なる点として、変数は数値のみでなく、文字やオブジェクトと呼ばれるものなどもしまっておくことができ、状況に応じて書きかえたり、取り出したりと便利につかえるものと覚えておくと良いでしょう。

つたない文章の説明だけだと伝わりにくいので、以下イラストで紹介します。

こちらのイラストには変数名AからCがあります。
それぞれの変数には数字の「1」・文字列の「カレー」と「2022年」を代入する予定で準備します。

エクセルVBAでは、変数をつかうときに何を代入する型の変数であるかを明示的に予約しておく必要があります。数値を入れるためには整数型を、文字を入れるためには文字列型で予約(宣言)しますが、変数(箱)の型と入れる値が異なるものであった場合は、エラーが発生することに注意が必要です。

プログラミング言語によっては、変数の型を宣言しなくてよいものもあるよ。


値を代入する箱として挙げられるものとして、こちらの記事で紹介する「変数」以外にも、「定数(ていすう)」と呼ばれるものが存在します。定数は変数のように代入した数値や値を変更ができません。変更ができないのであれば、箱をつかうことをせずとも、数値や文字列を直接指定すればいいのでは?と考えてしまいますが、定数の効果的な使用方法はほかの記事で紹介しています。
\下記のリンクより記事を読むことができます/

次からは、ここまでの説明をふまえて変数を宣言する方法について紹介していきます。

エクセルVBAで変数の宣言の書きかた

エクセルVBAで変数をあつかうためには、先に変数を宣言をする必要があることを紹介しました。また、変数の宣言では、その変数がどのような値を代入する予定であるかを指定します。エクセルVBAで変数を宣言するためには、VBEのコード入力画面にて以下のように書きます。

構文

Dim 変数名 As データ型

プロシージャのなかで変数を宣言した場合が以下のコードになります。

変数の宣言
Sub test()

    Dim 変数名 As データ型

End Sub

変数の宣言では、Dimキーワードを使います。Dimキーワードに任意の変数名を書き、Asキーワードでどういったデータ型を代入する変数であるかを指定します。変数名は任意で指定できますが、以下のようなルールがあります。また、データ型には変数に代入する値の種類の型名を指定します。

プロシージャの中で変数を宣言した場合、宣言したプロシージャの中でのみ有効な変数が作成できます。
プロシージャとは、Sub〇〇() から End Sub までの間のひとつのプログラムの単位のことです。変数は、宣言の方法によって適用範囲(スコープ)を指定することができます。

ここでは詳しく解説しませんが、変数はプロシージャのなかでの宣言のほかにモジュールの宣言セクションと呼ばれる場所で宣言することもできます。これらの方法で宣言した変数はモジュールの範囲や、プロジェクト全体を適用範囲として指定する宣言ができます。

標準モジュール
Option Explicit

'~~~~~~~~~~~~~~

'ここが宣言セクション

'~~~~~~~~~~~~~~

Sub Sample_Macro() 'サンプルマクロという名前のプロシージャ

    '変数名「variable1」という数値型の変数を宣言して、variable1に1を代入する
    Dim variable1 As Integer
    variable1 = 1
    
    '変数名「variable2」という文字列型の変数を宣言して、variable2に文字列を代入する
    Dim variable2 As String: variable2 = "1行で変数の宣言と値の代入もできる"

    'メッセージボックスで1を表示する
    MsgBox variable1
    
    'メッセージボックスで「1行で変数の宣言と値の代入もできる」を表示する
    MsgBox variable2
    
End Sub 'End Subまでが1つのプロシージャ

また、変数の値が保持される期間のことを「変数の有効期限」といいますが、こちらも適用範囲と同じく宣言する方法によって期限を指定できます。上記のサンプルマクロのように、通常どおりプロシージャのなかで宣言した場合は、プロシージャのおわりであるEnd Subに到達したあとに変数の値が破棄されます。

まとめると、変数には適用範囲(スコープ)と「有効期限」があり、これらも変数の宣言の方法によって変えることができることを知っておいてください。

変数の適用範囲(スコープ)や有効期限の指定方法については、以下のリンクより読むことができますので合わせてご覧ください。

上記のリンクから参考記事を読むことができます。

ここまでで変数の宣言ができるようになりましたので、宣言した変数に値を代入したり出力したりなどしてみましょう。

独学だと中々スキルが身についた実感が湧かない。学習環境を見直してみませんか?

エクセルで繰り返しや転記作業で苦しい思いをした経験はありませんか?
今まで苦労してきたその作業を簡単なプログラムをおぼえるだけで解決できる可能性があります。
なるべくお金や時間をかけずにエクセルマクロVBAを習得したい人にはこちらの「1日速習講座」がおすすめです。

宣言した変数と代入する値の関係について

それでは、宣言した変数に値を代入し、変数の値を取り出す(出力する)マクロを実行してみます。

入力コード

Sub test()

    Dim A As Integer'整数型の変数Aを宣言する。
    Dim B As String, C As String'文字列型の変数BとCを宣言する。
    
    A = 1'変数Aに1を代入する
    B = "カレー"'変数Bにカレーを代入する
    C = "2022年"'変数Cに2022年を代入する
    
    Debug.Print A'イミディエイトウィンドウに変数Aを表示する
    Debug.Print B'イミディエイトウィンドウに変数Bを表示する
    Debug.Print C'イミディエイトウィンドウに変数Cを表示する

End Sub

こちらのマクロでは変数名A・B・Cを使います。変数Aは数値を代入する整数型、変数B・Cは文字を代入する文字列型で宣言しています。それぞれの変数に数値と文字列を代入して、イミディエイトウィンドウに出力するマクロとなっています。

実行結果

イミディエイトウィンドウに以下の結果が表示されます。

1
カレー
2022年

それぞれの変数に代入された値が表示される

整数型の変数に文字列を代入した例

続いて、変数で宣言した型と異なる値を代入するマクロを書いて実行してみます。

入力コード

Sub test()

    Dim A As Integer
    
    A = "カレー"

    Debug.Print A

End Sub

上記では変数の宣言で「 A 」という名前で、整数型(Integer)にしています。
※Dim は Dimension(寸法)の略です。

文字列である”カレー”を変数「 A 」に代入するコードを書いています。
これを実行しようとすると。

実行時エラー’13’:
型が一致しません。

このようなエラーが発生します。

VBAで変数を使用するときは、事前に変数名とその変数がどの型であるかを指定する必要があり、指定のものと異なるなる値を代入しようとするとエラーが発生する点に注意が必要です。

これは引越の荷造りなどで、ダンボール箱に「服」「アクセサリー」「本」「おもちゃ」などのラベルづけをイメージすると理解しやすいと思います。

エクセルVBAにおける変数宣言時の型の種類について

エクセルVBAで変数をつかうためには、変数の宣言をする必要があることを説明しました。さらに変数の宣言は、変数名とその変数であつかうデータ型を指定する必要があります。

それでは変数のデータ型と種類を表で紹介します。ここで紹介する内容を全ておぼえる必要はありませんが、それぞれの型がどのような値をあつかうことができるものであるか、ざっくりと知っておくと良いでしょう。

データ型の種類と代入できる値について
データ型 説明 代入できる値
Intger 整数型 -32,768~32,767の整数
Long 長整数型 -2,147,483,648~2,147,483,647の整数
Single 単精度浮動小数点数型 負の値:約-3.4×10(38乗)~-1.4×10(-45乗)
正の値:約1.4×10(-45乗)~1.8×10(38乗)
Double 倍精度浮動小数点数型 負の値:約-1.8×10(308乗)~-4.0×10(-324乗)
正の値:約4.9×10(-324乗)~1.8×10(308乗)
String 文字列型 “カレー”、”東京”などの文字列
Date 日付型 日付:西暦100年1月1日~西暦9999年12月31日
時刻:0:00:00 ~ 23:59:59
Object オブジェクト型 ワークブック・ワークシート・セル範囲などのオブジェクトを代入可能
Variant バリアント型 万能型(なんでも代入することができる)

バリアント(Variant)型は万能なので、どういったものでも代入できますが、その分コンピューターのメモリをたくさん使います。
例えるなら、普段持ち歩くようなイヤフォンや眼鏡などを専用ケースではなく、むき出しで海外旅行用のスーツケース入れている状態です。近所の買い物に行くために大きなケースは不向きなので、なるべく準備した箱(変数)にどのような値を代入するものかを想定し、適切なデータ型を宣言することで無駄なメモリ消費を抑えた効率の良いプログラムになります。

変数を宣言するときは『 Dim 変数名 As データ型 』と書くんだね。

変数を1つずつ宣言して、管理するのは面倒くさい。

エクセルVBAで変数をまとめて宣言し、管理する方法として「 配列 」があります。配列は変数のかたまり(ブロック)のようなものなので、たくさんの値を管理する場合に便利に使えるものです。大量のデータを処理するマクロをつくるときは、とても便利につかえるため高度で規模の大きな処理ができるようになります。

多くの変数を使ったマクロをつくるときは、配列をつかうことを検討しましょう。配列の宣言方法や基本的なつかいかたについて詳しく知りたい人は、こちらの記事をご覧ください。

上記のリンクから参考記事を読むことができます。

エクセルVBAで変数をつかったマクロの作り方

エクセル(Excel)VBAでは、変数に代入するためのデータ型を想定して宣言時に指定します。宣言したデータ型以外の値を代入してしまうとエラーが発生しますので注意が必要です。

ここからは、それぞれのデータ型の変数を宣言して値の代入と出力をするマクロを紹介していきます。なるべくシンプルなコードにしていますので、これからマクロを作ろうと考えている人は参考にしてください。

エクセルVBAってどうやってはじめるかわからない。準備ができていない人は以下の記事を参考にしてください。準備するものはMicrosoftExcelだけなので、手順に従って設定をするだけなので5分程で完了します。

エクセル(Excel)VBAで変数を宣言する

ここではそれぞれのデータ型で変数を宣言したものをあつかってみます。

入力コード

Sub vartest()

    '変数の宣言
    '「Dim 〇〇 as データ型」で宣言する
  '※〇〇は変数名
    
  Dim i As Integer'整数型
    Dim j As Long'長整数型
    Dim k As Single'単精度浮動小数点数型
    Dim l As Double'倍精度浮動小数点数型
    Dim m As String'文字列型 
    Dim n As Date'日付型
    Dim o As Boolean'ブーリアン型(真偽値)
    Dim p As Object'オブジェクト型
    Dim q As Variant'バリアント型

End Sub
先頭に ‘ がついている行はコメントアウトと言って、VBAのコードとして認識されなります。

こちらのプロシージャ「vartest」は、変数を宣言するだけのマクロになります。
変数名i~qの9つの変数をそれぞれのデータ型で宣言しています。それぞれの変数は、宣言しただけの状態なので初期値となっている状態となっています。それぞれのデータ型変数の初期値は以下のとおりです。

変数で宣言できるデータ型と初期値
データ型の種類 変数名 初期値
Intger(整数型) i 0
Long(長整数型) j 0
Single(単精度浮動小数点数型) k 0
Double(倍精度浮動小数点数型) l 0
String(文字列型) m ””
Date(日付型) n #0:00:00#
Boolean(ブーリアン型(真偽値)) o False
Object(オブジェクト型) p Nothing
Variant(バリアント型) q Empty値

変数は宣言したデータ型によってちがった初期値が入っているね。

これまで変数の宣言方法・データ型・初期値と紹介してきましたので、次からそれぞれのデータ型の変数の宣言と値の代入と出力をするマクロを紹介していきます。

VBA変数のデータ型|整数型(Integer)

まずは整数型(Integer)についてですが、こちらは「インテジャー」と読みます。整数型(Integer)の変数は「-32,768~32,767」の整数を代入することができるデータ型です。
サンプルマクロでは、この整数型(Integer)の変数を宣言して、数値の1を代入・出力をしてみます。

マクロで実行したいこと

整数型(Integer)の変数を宣言して、整数1を代入・出力する

入力コード

Sub vartest()

    '変数の宣言
    '「Dim 〇〇 as データ型」で宣言する
  '※〇〇は変数名
    Dim i As Integer

  '変数に値を代入する
    i = 1
    Debug.Print i

End Sub

実行結果

実行結果としてイミディエイトウィンドウに以下を表示します。

1

Debug.Printなのでイミディエイトウィンドウに実行結果が出力されます。
上記のリンクから参考記事を読むことができます。

VBA変数のデータ型|小数型(Single)

つづいて単精度浮動小数点数型(Single)についてですが、代入できる数値は「約-3.4×10(38乗)~-1.4×10(-45乗)正の値:約1.4×10(-45乗)~1.8×10(38乗)」のデータ型です。
サンプルマクロでは、この単精度浮動小数点数型(Single)の変数を宣言して、数値の0.5を代入・出力をしてみます。

マクロで実行したいこと

単精度浮動小数点数型(Single)型の変数を宣言して、小数0.5を代入・出力する

入力コード

Sub vartest()

    '変数の宣言
    '「Dim 〇〇 as データ型」で宣言する
  '※〇〇は変数名
    Dim k As Single

  '変数に値を代入する
    k = 0.5
    Debug.Print k

End Sub

実行結果

実行結果としてイミディエイトウィンドウに以下を表示します。

0.5

Debug.Printなのでイミディエイトウィンドウに実行結果が出力されます。

VBA変数のデータ型|文字列型(String)

こんどは文字列型(String)をみていきます。代入できる文字数はお使いのパソコンにもよりますが、64ビット版のパソコンならざっくり20億文字以上となります。これだけの文字数の代入が必要なケースはかぎりなく少ないとは思いますが、この文字数の理由を深掘りするとメモリだの、バイトだのとすごく難しい話になってくるため、専門的な知識が豊富で説明上手なブロガーさんに任せることにします。

膨大な文字数を代入できるので、安心して使えるものと知っておけば大丈夫です。
それではサンプルマクロに、この文字列型(String)の変数を宣言して「カレー」を代入・出力をしてみます。

マクロで実行したいこと

文字列(string)型の変数を宣言して、カレーを代入・出力する

入力コード

Sub vartest()

    '変数の宣言
    '「Dim 〇〇 as データ型」で宣言する
  '※〇〇は変数名
    Dim m As String
    
  '変数に値を代入する
     m = "カレー"
    Debug.Print m

End Sub
文字列を代入するときは””(ダブルクォーテーション)で文字列を囲む

実行結果

実行結果としてイミディエイトウィンドウに以下を表示します。

カレー

Debug.Printなのでイミディエイトウィンドウに実行結果が出力されます。
上記のリンクから参考記事を読むことができます。

VBA変数のデータ型|日付型(Date)

こちらでは日付型(Date)をみていきます。日付型(Date)であつかえる値は「西暦100年1月1日~西暦9999年12月31日時刻:0:00:00 ~ 23:59:59」です。こちらも文字列型と同じで現実的な業務であつかう値としては十分過ぎる許容量となっています。

マクロで実行したいこと

日付(Date)型の変数を宣言して、文字列、日付リテラル値、シリアル値で日時を代入・出力する

入力コード

Sub vartest()

    '変数の宣言
    '「Dim 〇〇 as データ型」で宣言する
    '※〇〇は変数名
    Dim Sample_Day1 As Date, Sample_Day2 As Date, Sample_Day3 As Date
    Dim Sample_Day1_1 As Date, Sample_Day2_1 As Date, Sample_Day3_1 As Date

   '文字列で変数に日付を代入する(時間なし)
    Sample_Day1 = "100年1月1日"
    Debug.Print Sample_Day1
    
    '文字列で変数に日付を代入する(時間あり)
    Sample_Day1_1 = "100年1月1日 0:00:01"
    Debug.Print Sample_Day1_1
     
    'リテラル値で変数に日付を代入する(時間なし)
    Sample_Day2 = #12/31/9999#
    Debug.Print Sample_Day2
    
    'リテラル値で変数に日付を代入する(時間あり)
    Sample_Day2_1 = #12/31/9999 11:59:59 PM#
    Debug.Print Sample_Day2_1
    
    '日付シリアル値で変数に日付を代入する(時間なし)
    Sample_Day3 = 1
    Debug.Print Sample_Day3
    
    '日付シリアル値で変数に日付を代入する(時間あり)
    Sample_Day3_1 = 1.0000115741
    Debug.Print Sample_Day3_1


End Sub

VBAで日付を代入するときの記述方法は3つあります。
まずは文字列で代入する書きかた、次に日付リテラル値で代入する書きかた、さいごにシリアル値で代入する方法となります。文字列型で入力する場合は「”」ダブルクォーテーションで、日付リテラル値の場合は「#」シャープを値の両端をつけて書きます。実行結果を確認してみましょう。

正確に日付の代入をするのであれば、日付リテラル値で書くことがおすすめ。

実行結果

実行結果としてイミディエイトウィンドウに以下を表示します。

Debug.Printなのでイミディエイトウィンドウに実行結果が出力されます。スラッシュで表記され日付と認識されています。

※シリアル値とはVBAで日付や時刻を数値で管理しているもので、1899年12月31日を1とした数値です。同じようにエクセルにもシリアル値が存在しますが、エクセルでは1900年1月1日を1としていて、VBAとは異なるものとなります。このような違いがなぜあるのかというと、エクセルは1900年が閏年と誤って想定されていたことが原因となります。

シリアル値がVBAとは異なるものであることや、エクセルのシリアル値の想定誤りついて詳しく知りたい人は、以下にMicrosoftのWebページのリンクを掲載しますのでそちらを参考にしてください。

・Excel では、1900 年が閏年であると誤って想定されています

・WorksheetFunction.EoMonth メソッド (Excel)

日付型の変数を使ったマクロでは、実務的にも多くの場面で使われそうなマクロをもう一つ紹介します。

マクロで実行したいこと

日付(Date)型の変数を宣言して、Date関数やNow関数で現在の日付や時刻を代入・出力する

入力コード

Sub vartest()

    '変数の宣言
    '「Dim 〇〇 as データ型」で宣言する
    '※〇〇は変数名
   
    'Date関数で取得した値は変数名ToDayに、Now関数で取得した値は変数名NowTimeに代入する
    Dim ToDay As Date, NowTime As Date

    '今日の日付を変数に代入する(Date関数)
    ToDay = Date
    Debug.Print ToDay
    
    '今日の日時を変数に代入する(Now関数)
    NowTime = Now
    Debug.Print NowTime

End Sub

エクセルと同じくVBAにも関数が多数存在します。このサンプルマクロではDate関数で現在の日付、Now関数で現在の日時を取得して変数に代入しています。

実行結果

Date関数では現在の日付、Now関数では現在の日時の取得ができるため、値を変数に代入してイミディエイトウィンドウに出力できることが確認できました。

VBA変数のデータ型|ブーリアン型(Boolean)

ブーリアン型(Boolean)の変数をあつかったマクロを書いてみます。ブーリアン型(Boolean)であつかえる値は「True」または「False」の真偽値で、初期値は「False」となります。ブーリアン型(Boolean)の変数では状態の判定などでつかうことができます。

マクロで実行したいこと

ブール・ブーリアン(Boolean)型の変数を宣言して、Trueを代入・出力する

Boolean型変数の初期値はFalseとなります。

入力コード

Sub vartest()

    '変数の宣言
    '「Dim 〇〇 as データ型」で宣言する
    '※〇〇は変数名
    Dim Sample_switch As Boolean

   'Boolean型変数の初期値を出力する
    Debug.Print Sample_switch
      
    'Boolean型変数の値をTrue更新する
    Sample_switch = True '文字列ではないため、Trueにダブルクォーテーションはつけない
    Debug.Print Sample_switch

    'Boolean型変数の値に判定式の結果を代入する(璧と壁の字がちがうためFalse)
    Sample_switch = "完璧" = "完壁"
    Debug.Print Sample_switch

    'Boolean型変数の値に判定式の結果を代入する
    Sample_switch = 10 = 2 * 4 + 2
    Debug.Print Sample_switch

End Sub
ブール・ブーリアンの真偽値(True or False)は文字列ではないので、””はダブルクォーテーションは不要。

実行結果

実行結果としてイミディエイトウィンドウに以下を表示します。

Debug.Printなのでイミディエイトウィンドウに実行結果が出力されます。
上記のリンクから参考記事を読むことができます。

VBA変数のデータ型|オブジェクト型(Object)

オブジェクト型(Object)のサンプルマクロを書いていきます。オブジェクト型(Object)は「ワークブック・ワークシート・セル範囲」などのオブジェクトが代入できます。

マクロで実行したいこと

オブジェクト(Object)型の変数を宣言して、ワークシート(”Sheet1”)のセル範囲(A1セルからA5セル) を代入して、セルに入力された値とセルのアドレス・個数を出力する

緑色に着色した部分がオブジェクトとして変数に代入。
A1セルとA5セルの値をデバッグプリントで表示することで、指定のセル領域が変数に代入されたことを確認します。

入力コード

Sub vartest()

    '変数の宣言
    '「Dim 〇〇 as データ型」で宣言する
    '※〇〇は変数名
    Dim Sample_Cell As Object

    'Object型変数にセル範囲を代入する(Setをつけなければエラーが発生する)
    Set Sample_Cell = ThisWorkbook.Worksheets("Sheet1").Range("A1:A5")
    
    Debug.Print Sample_Cell.Range("A1").Value '代入した範囲のA1の値を表示する
    Debug.Print Sample_Cell.Range("A5").Value '代入した範囲のA5の値を表示する
    Debug.Print Sample_Cell.Address '代入したセル範囲のアドレスを表示する
    Debug.Print Sample_Cell.Count '代入したセル範囲のセルの個数を表示する

End Sub

他のデータ型の変数に値を代入するときと異なり、オブジェクト型を代入するときは、変数名の前にSetをつけないと以下のエラーが発生します。

実行時エラー’91:
オブジェクト 変数または With ブロック変数が設定されていません。

実行結果

実行結果としてイミディエイトウィンドウに以下を表示します。

A1セルに入力されている値である「1」とA5セルに入力されている値「メッセージボックスでピカピカピカチュウ」が表示されていることから、オブジェクトからセルに入力された値を取り出しています。さらに、オブジェクト変数からアドレスを取り出して出力した結果「$A$1:$A$5」が、セルの個数を出力した結果として「5」が返ってきています。

変数に代入した値の更新(書きかえ)

これまでの内容で変数の宣言・値の代入と出力ができました。マクロでは、変数に代入した値をなにかしら加工や書きかえをおこなうことがありますが、ここでは変数の値を書きかえるマクロを作成し、実行してみたいと思います。

マクロで実行したいこと

整数型(Integer)の変数を宣言して、一度代入した値を書きかえて(更新)改めて出力する

入力コード

Sub vartest()
    '変数の宣言
    '「Dim 〇〇 as データ型」で宣言する
    
  '変数名iという整数型(Integer)の変数を宣言する
    Dim i As Integer
    
    '変数に値を代入する
    i = 1
    Debug.Print (i)
    
     '変数の値に数値を足す
    Debug.Print (i + 9999)
    Debug.Print (i)
    
    '変数の値を書き換える(更新する)
    i = 9999
    Debug.Print (i)

End Sub

こちらのサンプルマクロでは、整数型(Integer)の変数を宣言し、数値の「1」をしています。注目してもらいた点は、”Debug.Purit(i + 9999)“で、出力結果として合計値の10000が返ってきている部分ですが、これは変数に代入された値「1」に9999が加算された結果が出力されているだけなので、変数に代入された値そのものは書きかわっていません。
変数「i」が書きかわっているタイミングは、i = 9999のコードが実行されたタイミングです。

実行結果

1
10000
1
9999

デバッグプリントで9999を足した値を出力しても、変数「i」の値を書きかえているわけではない。

数値だけでなく、文字列型(String)の変数でも値の書きかえ(更新)はできます。

マクロで実行したいこと

文字列型(String)の変数を宣言して、一度代入した値を書きかえて(更新)改めて出力する

入力コード

Sub vartest()

    '変数の宣言
    '「Dim 〇〇 as データ型」で宣言する
    '※〇〇は変数名
    '文字列型の変数「Sample_name1~3」の宣言と値を代入を1行で実行する
    Dim Sample_name1 As String: Sample_name1 = "ミッフィー"
    Dim Sample_name2 As String: Sample_name2 = "うさこ"
    Dim Sample_name3 As String: Sample_name3 = "ナインチェ"

    '変数と文字列をつなげてイミディエイトウィンドウに出力する
    Debug.Print Sample_name1; " は "; Sample_name2; " ちゃんで "; Sample_name3; " です。"
    
    '変数Sample_name1~3の値を書きかえる(更新)
    Sample_name1 = "メラニー"
    Sample_name2 = "ダーン"
    Sample_name3 = "スナッフィー"
    
    '変数と文字列をつなげてイミディエイトウィンドウに出力する
    Debug.Print Sample_name1; " と "; Sample_name2; " と "; Sample_name3; " は ミッフィーのなかまです。"
        
End Sub

文字列型(String)の変数を3つ作成して、デバッグプリントでつなげて文章を出力しています。その後で変数に代入していた文字列を書きかえた後で改めてつなげて文章を出力します。

実行結果

文字列型(String)の変数に代入した値が書きかえられ、文章が正しく出力されていることがわかります。

エクセルVBAで変数をつかったマクロでできること

変数が使えるようになると、VBAでできることの幅が大きく広がります。そのすべてを紹介することは難しいため、基本的な処理をいくつか紹介します。

変数をつかった計算や文字列の結合などの操作

ここでは変数を使って出来ることを簡単な具体例をつけて3つ紹介します。

  • 変数を数値をつかった計算
    • 変数と数値をつかった四則演算の結果を出力するマクロ
  • 変数と変数をつかった計算
    • 変数と変数をつかった四則演算の結果を出力するマクロ
  • 変数で文字列結合
    • 変数と文字列をつなげた結果を出力するマクロ

変数のメリットは、状況に応じて値を書きかえられるところだね。

「変数」と「数値」で足し算・引き算・掛け算・割り算・余りを計算するマクロ

ここでは四則演算(足し算、引き算、掛け算、割り算)と余りを求めてみます。

マクロで実行したいこと

数値型の変数を宣言して、変数の値と数値をつかって計算する

入力コード

Sub vartest()
    '変数の宣言
    '「Dim 〇〇 as データ型」で宣言する
    Dim Price As Long
    
     '変数に値を代入する
    Price = 100
    Debug.Print (Price)

     '変数の値に数値を足す
    Debug.Print (Price + 10) '100+10
     
     '変数の値から数値を引く
    Debug.Print (Price - 20) '100-20
    
     '変数の値に数値を掛ける
    Debug.Print (Price * 3) '100*3
    
     '変数の値を数値で割る
    Debug.Print (Price / 25) '100÷25
     
     '変数の値を数値で割った後の余りを求める
    Debug.Print (Price Mod 25) '100÷25の余り

End Sub

実行結果

実行結果としてイミディエイトウィンドウに以下を表示します。

100
110
80
300
4
0

上から順に、変数の値、足し算、引き算、掛け算、割り算と余りが出力されました。

「変数」と「変数」で足し算・引き算・掛け算・割り算・余りを計算するマクロ

変数と数値をつかった計算と同じく、変数と変数でも実行可能です。

マクロで実行したいこと

数値型の変数を宣言して、変数の値と変数の値をつかって計算する

入力コード

Sub vartest()
    '変数の宣言
    '「Dim 〇〇 as データ型」で宣言する
    '※〇〇は変数名
     
    '変数を宣言して値を代入する
    Dim Var_Price As Long: Var_Price = 100
    
    '~変数は複数同時に宣言ができる~
    '・宣言方法1:全て長整数型(Long)になる
    Dim Var1 As Long, Var2 As Long, Var3 As Long, Var4 As Long
    
    '・宣言方法2:Var8のみ長整数型(Long)で他はバリアント型(Variant)になる点に注意
    Dim Var5, Var6, Var7, Var8 As Long
    
    '複数の変数に値を代入する
    V