Excel VBA の基本

【VBE記述のポイント】モジュール・プロパティ・メソッド・変数

VBAでマクロを書くための基本的なことを説明します。

  • VBAを構成するモジュールとプロシージャ
  • 操作対象のオブジェクト
  • オブジェクトの詳細を表すプロパティ
  • オブジェクトの動作を指示するメソッド
  • 数値や文字の代わりとなる入れ物となる変数

これらについての話になります。

初めての人にとっては、非常にわかりにくい、イメージしづらい言葉が続きます。

最初から覚えようとしなくて大丈夫です。
「そういう言葉があったなー」
程度でOKです。

これからVBAを学んでいく過程で、何度もこれらの言葉に遭遇するはずです。
その時、ここに戻って読んでみる。
その繰り返し。

そうすることによって、頭にイメージとして残るようになります。

モジュール と プロシージャ の関係

VBAでマクロを書くときは VBE (Visual Basic Editor) でその記述を行います。

VBE とは
「Excel や Access のプログラムを製作する場所」
とイメージしてください。
このブログの「VBE って何?」の記事も参考にしてください。

https://pac.tobira55.com/excel-vba-three-word/

Excel では「開発」タブを押して、左の「Visual Basic」を押します。
又は Altキーを押したまま、F11キーを押します。

いづれかでVBEが表示されます。

既にマクロが作られている画面では下記のようになっています。


VBAを構成する2つの要素に「モジュール」と「プロシージャ」があります。

「プロシージャ」とは一つのマクロが成り立つ最初の単位です。
ちょっとわかりにくいかもしれませんね。

「仕組みの中で動作するプログラムの最小単位のこと」ということになります。

一つ以上のプロシージャが集まって、一つの「モジュール」を形成します。

このモジュールは一つの場合もあれば、複数作られることもあります。

標準モジュールの挿入

プログラムのコード書くためには、あらかじめ「モジュール」を作る必要があります。

モジュールには「標準モジュール」「フォームモジュール」「クラスモジュール」があります。

フォームモジュールにつきましては、別途後述します。
クラスモジュールを使えば、より高度なプログラミングができます。

しかし「標準モジュール」だけで実用的なプログラミングを作ることは十分可能です。
まずこの「標準モジュール」をしっかり使えるようにしてください。

標準モジュールは上部の 「挿入タブ(I)」 をクリックします。
現れたドロップダウンから「標準モジュール(M)」をクリックします。

これで標準モジュール設定されます。

標準モジュールの削除

いらなくなった標準モジュールを削除する方法です。

削除するモジュールにカーソルを合わせ右クリックします。

現れたドロップダウンから「Module1の開放」をクリックします。
(削除するモジュールが Module2 の場合は「Module2の開放」をクリック)

「削除する前にModule1をエクスポートしますか?」で出ます。
これは標準モジュールを保存するかどうかの選択を意味します。

<いいえ>を選択します。
これで標準モジュールは削除されます。

削除しようとする標準モジュールを別のブックに移動し利用したいときは、この標準モジュールをエクスポートします。

オブジェクト

操作の対象となる物を「オブジェクト」といいます。

ただ単に「セルのA1に100が入力されています」と言っても、セルA1はいろいろあります。

Excelには「売上管理.xlsm」や「体重記録.xlsx」とかいろいろなタイトルのものがあり、それぞれにセルA1はたくさん存在します。

「売上管理.xlsm」一つをとってもSheet1からSheet5とかのように、複数のシートが存在するかもしれません。
そうなれば セルA1 は5つ存在するわけです。

ですから「売上管理.xlsm」の「Sheet1」のセルA1を100とするには、

オブジェクト1.オブジェクト2.オブジェクト3.Value=100
(売上管理)    (Sheet1)    (セルA1)

このように対象物の「オブジェクト」を上位からたどって指定します。
上位のオブジェクトの後、ピリオドで区切って下位のオブジェクトを指定します。

Workbooks(“売上管理”).Worksheets(“Sheet1”).Range(“A1”).Value=100

このようになるわけです。

この上には、Applicationオブジェクトという最上位のオブジェクトがあります。
Excel全体を表すものです。
しかしブックやシート、セルを指定するとき普通は省略します。

しかし、ブックやシートを省略する場合があります。
その場合はアクティブ(現在開いて使っている)のブック・シートを対象にしていると判断できる場合です。

Range(“A1”).value=500
とあれば、現在開いているシート(アクティブシート)のセルA1が500ということになります。

イメージとしてとらえられたでしょうか。

プロパティ

「プロパティ」とはそのオブジェクトの「性質」や「特徴」を示すものです。

たとえばセルというオブジェクトでも

Value セルの内容
Name セル範囲の名前
Address セル範囲のアドレス
Row 行番号
Column 列番号

といろいろあります。

オブジェクト .プロパティ
Range(“A1”).Value

このようにオブジェクトとプロパティの間にピリオドが必要です。

Range(“A1”).Value = 150
これは「セルA1の内容を150に設定する」という意味になります。

メソッド

プロパティはオブジェクトの性質を表すものですが、「メソッド」はオブジェクトの動作を指示するものになります。

オブジェクトに対し動作を指示する「命令」といえます。

Range(“A1”).Select (選択する)
Range(“A1”).Delete (セルを削除する)
range(“A1”).Clear  (データや書式を削除する)
その他いろいろあります。

動作を細かく指定するために、メソッドの中には引数を指定できるものもあります。

ここでは「メソッド」とはこういうものだというイメージを持つ程度で大丈夫です。
これから実際に使っていく過程で、一つ一つ具体的に理解できるようになります。

変数

VBA でコードを入力するとき 変数 はよく使います。
便利です。

「変数」とは値(あるいはデータ)を格納できる「入れ物」だとよく言われます。
数値を変数に格納すれば、通常の数値計算と同じように計算できます。

また数値をそのまま使って書かれたコードより、変数を使って書かれたコードの方が分かりやすいといったメリットもあります。

次の例で説明します。
4000円(税抜き)の商品の2割引きセール
消費税10%での購入価格の場合

Range(“A1”).Value = 4000*0.2
Range(“A2”).Value = 4000 – Range(“A1”).Value
Range(“A3”).Value = Range(“A2”).Value * 0.1
Range(“A4”).Value = Range(“A2”).Value + Range(“A3”).value

これを
値引率 = 0.2
消費税率 = 0.1??
「値引率」「消費税率」はともに変数

Range(“A1”).Value = 4000*値引率
Range(“A2”).Value = 4000 – Range(“A1”).Value
Range(“A3”).Value = Range(“A2”).Value * 消費税率
Range(“A4”).Value = Range(“A2”).Value + Range(“A3”).value

ちょっと見た目は変わらないようですが、値引率や消費税率が変更になったときは、コード内の数値を書き換えるより、変数の数値を書き換えた方が簡単です。

変数を使用するときは
「今から〇〇という名前の変数を使用する」
ということをプログラムの中で宣言してから使用します。

変数はそこに入れる値の大きさや種類によって、さまざまな型(「データ型」といいます)「変数のデータ型」に分類されます。

主だったものとしては

データ型 別名 利用法
Integer 整数型 あまり桁数の多くない整数を扱うときに使用する。
Long 長整数型 Integerより桁数が多いときに使用する。
Currency 通貨型 主に金額計算などに利用され、桁数の大きい数値を扱うときに使われる。小数点第4位まであつかえるので、誤差の少ない計算を行いたいときにも利用できる。
Date 日付型 日付データを扱うときに利用する。
String 文字列型 文字列を扱うときに利用する。コード番号など、一見数値のようでも文字列として扱いたいときにも使われる

この他「Single」「Double」「Variant」などがありますが、一通りVBAに慣れた段階で勉強することで大丈夫です。

変数の宣言方法は

Dim 変数名 as データ型
Dim 変数名 as データ型 , 変数名 as データ型 , 変数名 as データ型


のような書き方をします。

この他「オブジェクト型変数」等もありますが、これから実際に使うたびに説明することにします。

とにかく「変数」といっても、知ろうとすればかなりの奥深さがあります。
実際にVBAを使っていく段階で知っていくことの方が、効率的でわかりやすいです。

今の段階ではアバウトな理解で問題ありません。