📒

VBA用語整理

2021/04/12に公開

マクロ有効ブック

.xlsmの拡張子を持つファイル。
このファイルの中ではVBAのスクリプトを実行・保存することができる。
ちなみに.xlsxのファイルでもVBEまでは開ける。

開発タブ

VBAに関するものとその他のアドインやXMLに関する機能がまとまったタブ。
一番左にあるVisual BasicをクリックすることでVBEを開くことができる。
またVBAはノーコード的な使い方も可能でマクロの記録をクリックすると動作の記録が開始され、記録を終了するまでのエクセルの操作をマクロとして保存しマクロのボタンから実行することが可能です。マクロの記録はデフォルトではセルの位置まで記録されるため同じ動作を繰り返し複数のセルに対して行うことができないのですが、相対参照で記録を使い記録時のカーソル位置を基準とした参照位置をとることができるので記録した処理を繰り返セルようになる。

VBE

Visual Basic Editorのことで開発タブのVisual Basicを押すと起動する。
VBEにはいくつかのウインドウを持ち、それらはペインのように表示できる。

  • プロジェクトエクスプローラー(1)
    エクセルファイル・エクセルシート・標準モジュール・ユーザーフォーム・クラスモジュールなどを階層構造で表示するウインドウ。
  • プロパティウィンドウ(2)
    選択されているモジュールやユーザーフォームのプロパティを表示するウィンドウ
    ユーザーフォームのオブジェクトについては細かいプロパティまで見ることができる。
  • コードペイン(3)
    VBAのスクリプトを記述する場所。
    ツール->オプション->エディタの設定から色やフォント・フォントサイズなどを調整することが可能。
  • イミディエイトウィンドウ(4)
    Debug.Printを使うとここに値が表示される。
    ?で始めると変数の表示や簡単な式の実行をすることができる。
    デバッグ・テストなどでよく使われる。
  • ローカルウインドウ(5)
    実行しているプロシージャから見える変数を全て表示する。
    配列の中身やオブジェクトのプロパティまで表示できるが引数を必要とするプロパティは表示できない。
    Stopステートメントもしくはブレークポイントで止めないと確認ができないので注意。
  • ウォッチウインドウ(6)
    ローカルウィンドウと同様にStopステートメントもしくはブレークポイントで処理を中断しているときに変数などの中身をかくにんできる。
    ローカルウィンドウと異なる点は表示する変数はユーザーが指定すること、そして特定の変数が任意の値になったときに処理を中断させることができるため、条件付きブレークポイントとして使うことができるところにある。
    またローカルウィンドウでは見れなかった引数を必要とするものも値をみることができるためローカルウィンドウと合わせて使うと便利。

モジュール

コードを記述することができるスペース。
ファイルに付随するシートモジュール・ブックモジュールの他に、VBEの挿入のドロップダウンメニューから以下の3つのモジュールを追加で挿入できる。

  • 標準モジュール
    コードを記述して実行できるモジュール。
    コードはプロシージャ単位で記述し実行する。
    ユーザーフォームやクラスモジュールなどを合わせて使うことで高度な処理を記述できる。
    ユーザーフォームやクラスモジュールにも様々な処理を記述できるが、基本的にコードの始点と終点はこの標準モジュールになる為、標準モジュールなしのそれぞれ単体では実行はできない。
  • ユーザーフォーム
    様々なボタンやテキストボックスを組み合わせてオリジナルのフォーム画面を作ることができる。
    ボタンが押されたときなどユーザーフォームにおけるイベントに対する処理をコードで記述することができる。
    標準モジュールから呼び出す形で使われる。
  • クラスモジュール
    様々なデータやそれに関連する操作を一つにまとめたもの。
    他のプログラム言語で実装されているようなクラスの継承はVBAではできない。
    クラスはその内部の操作を外部から隠蔽することができるためコードの安全性を高めることができる。
    • プロパティ
      財産・所有物・特性などの意味を持つ、クラスを表すデータ。
      そしてGet, Let, Set, からなる外部からクラスの変数を隠蔽する一連の機能をまとめたものとして呼ばれる
    • メソッド
      標準モジュールのプロシージャとほぼ同じ

プロシージャ

VBAにおける処理の単位はプロシージャとなる。
主にSubプロシージャとFunctionプロシージャからなる。
クラスでよく使われるPropertyプロシージャも実は標準モジュールなどでも使える。
VBEのボタンから作成できる。手書きも可能。

  • Subプロシージャ
    基本的な処理を構成する単位。
    単体での実行が可能。
Sub Sample1()
	Dim i As Long
	i  = 10
	MsgBox i * 10
End Sub
  • Functionプロシージャ
    値を受け取り処理をして値を返す、関数の機能を提供するプロシージャ。
    単体での実行はできないが、ワークシート関数としてSUMAVERAGEなどと同じように使うことができる。
Function AddFnuc(ByVal arg1 As Long,ByVal arg2 As Long) As Long
	AddFunc = arg1 + arg2
End Function
  • Propertyプロシージャ
    クラスモジュールにおいて使われることがほとんどであるが、クラスモジュールの中でしか使えないわけでない。
    出力専用のGet、入力専用のLet、両用できるSetのステートメントを付けて使う。
    基本的にはクラスモジュールで使われるが標準モジュールや、ユーザーフォームなどでも使用可能。

    以下はシートモジュールでシートネームを扱うプロパティの例。

Get
Property Get GetName() As String
	SheetName = "WorkSheet:" & Me.Name
End Property
Let
Property Let SetName(sName As String)
	Me.Name = sName
End Property

Discussion