Last Modified: <%LastModified%>

Sc588(2) 情報科学特論 資料

 
 

マクロの記録・実行


Visual Basic Editor (VBE)


プロジェクトの構成


プロシージャ

Excelのマクロの実体は,標準モジュール内で定義された引数を持たない Public な Subプロシージャである.Subプロシージャは,以下の書式で書かれる.

[Public|Private] Sub プロシージャ名(仮引数の定義)

    ステートメント

    

End Sub

なお,[Public|Private] は,Public と Private のいずれかを選択する.省略も可能で,その場合は Public とみなされる.仮引数の定義 は,仮引数の名前と型を As で区切って対にしたものを,コンマで区切って並べる.引数がない場合(マクロなど)は,空となる(省略される - 括弧は省略されない).

Publicプロシージャは,同じプロジェクト内なら,他のモジュール(のプロシージャ)からも呼び出すことができるが,Privateプロシージャは,同じモジュール(のプロシージャ)からしか呼び出すことが出来ない.いずれにしても,他のプロシージャから呼び出す場合は,以下の書式でステートメントとして呼び出す.

プロシージャ名 [実引数, …]

なお,実引数は値を持ったであり,コンマで区切って並べる.これは,プロシージャに制御が渡ったときに,そのプロシージャの仮引数に引き渡される.

Publicプロシージャであっても,他のプロジェクト(のモジュールのプロシージャ)から呼び出すことは出来ないが,呼び出されるプロシージャが属するモジュールを,呼び出し側のプロジェクトで参照するように設定すれば,呼び出しが可能になる.これは,プロジェクトエクスプローラで呼び出し側のプロジェクトを選択し,「ツール」メニューの「参照設定」で設定できる.(→プロジェクトの構成)

プロシージャには,Subプロシージャの他に,値を返すFunctionプロシージャというものもある.これは,式中で,

プロシージャ名([実引数, …])

のような形で用いられる(実引数リストに括弧がつく).ただし,値を使用しない場合は,Subプロシージャと同様な書式で(ステートメントとして)呼び出すこともできる


変数の宣言・使用

数値,文字列,オブジェクト(→オブジェクトの表現)などのデータを格納するための場所として,変数を用いることができる.原則的に,変数は宣言によって定義され,代入ステートメントで値を代入され,中で用いられる.変数の宣言は,以下の書式で行なわれる.

[Public|Dim] 変数名 As 型(クラス)[, …]

宣言される変数は,宣言されるステートメントとその場所により,以下の3つのスコープ(変数の有効な範囲)を持つ.

名称 ステートメント 宣言場所 スコープ
パブリック変数 Public モジュールの先頭
(General)-(Declarations)
同一プロジェクト内
モジュールレベル変数 Dim モジュールの先頭
(General)-(Declarations)
同一モジュール内
プロシージャレベル変数 Dim プロシージャ定義内の先頭 同一プロシージャ内

また,パブリック変数も,パブリック(Public)プロシージャ同様,参照設定によって他プロジェクトからも参照可能になる(?未確認). (→Subプロシージャ)

オブジェクトを格納するための変数(宣言のとき,型としてクラスを与えたもの)は,オブジェクト変数と呼ばれる.オブジェクト変数への値の代入は,通常の代入ステートメントではなく,Setステートメントによって行なわれる.(→代入ステートメント)


代入ステートメント

変数プロパティの値を代入するステートメント.通常の変数(プロパティ)に値を代入する場合は,以下のLetステートメントを用いる.

[Let] 変数 = 

キーワードのLetは通常省略される

オブジェクト変数(プロパティ)にオブジェクトを代入する場合は,以下のSetステートメントを用いなければならない.

Set オブジェクト変数 = オブジェクト式

定数・変数Functionプロシージャの呼び出しプロパティ値を持つメソッド(の適用)を演算子で組み合わせたもので,何らかの値を取る.代入ステートメントの右辺や,プロシージャ等の実引数として用いられる.


制御ステートメント

プロシージャ中のステートメントは,通常,記述された順に実行されるが,その実行順序を制御するためのステートメントを制御ステートメントと呼ぶ.主なものを以下に示す.


Ifステートメント

[書式]

[解説]


Forステートメント

[書式]
ただし,<変数>には整数(Integer)タイプの変数を用い, <初期値><終値><増分>には,いずれも値が整数となる式を用いる. また,Next に続く<変数>は省略可能であるが, 省略しない場合,対応する For ステートメントのものと同じ変数を与える.

[解説]


For Each ステートメント

[書式]
ただし,<グループ>にはコレクションか配列(複数のデータ)を用いる. また,Next に続く<変数>は省略可能であるが, 省略しない場合,対応する For Each ステートメントのものと同じ変数を与える.

[解説]


Doステートメント

[書式]
ただし,<終了条件>は, 以下のいずれかの形をしている.
While <条件式>

Until <条件式>
また,<ステートメント列>中には, Exit Do ステートメントが含まれていてもよい.

[解説]


オブジェクトの表現

ExcelのVBAプログラム中では,Excelの「表計算部分」の種々のデータやデータブロックが,オブジェクトとして定義されている.(→オブジェクトの階層)

オブジェクトとは,データ型と,その型のデータに付随する属性値(プロパティ)やその型のデータに適用できる手続き(メソッド)をまとめて定義したものである.「データ型」に相当するものをクラスと呼び,その型のデータ実体をインスタンスと呼ぶ.通常,「オブジェクト」と呼ばれるのは,このインスタンスを指すことが多い.

インスタンスは,一般的に,複数の属性を持っている.これをプロパティと呼ぶ.同一のクラスに属するインスタンスは,共通のプロパティを持っているが,その値はインスタンス毎に異なってもよい.また,配列のように添え字を取るプロパティもある.プロパティの参照は,以下の書式で行なう.

オブジェクト表現.プロパティ名[(添え字, )]

また,特定のクラスのインスタンスにのみ適用可能な手続きを,メソッドと呼ぶ.通常のプロシージャと同様,実引数を取る場合もある.また,Functionプロシージャと同様に値を持ち,式中で使用できるメソッドもある.メソッドを呼び出す(オブジェクトに適用する)書式は以下の通りである.

[ステートメントとして]
  オブジェクト表現.メソッド名 [実引数, …]
[式の要素として]
  オブジェクト表現.メソッド名([実引数, …])

オブジェクトの表現は,以下の原則に従う.(→オブジェクトの階層)

ほとんどのExcelオブジェクトは,Applicationクラスの(唯一の)インスタンスのプロパティからの,プロパティの連鎖で参照(表現)できる.


オブジェクトの階層(Excelのオブジェクトとコレクション)

VBAには多種のオブジェクトが使われるが,Excel固有のオブジェクト(クラス)を以下の図に示す.図中のリンクに付された青い文字のラベルは,プロパティをあらわす.コレクションは,オブジェクトの集まりで,Itemプロパティでその中の1つを選べる.また,Countプロパティで,その要素数を得ることができる.


重要なプロパティとメソッド(プロシージャ)

Valueプロパティ
対象: Range
内容: セルの値を表わす.
Clearメソッド
対象: Range
機能: 各セルの内容を消去する.
Activateメソッド
対象: Range
機能: 単一のセルを選択する.
Selectメソッド
対象: Range
機能: セル範囲を選択する.
対象: Worksheet
機能: ワークシートを選択する.
CurrentRegionメソッド
対象: Range
機能: 選択範囲を拡大する.
Copyメソッド
対象: Range
引数: コピー先(Range)[省略可]
機能: セル範囲のコピー
対象: Worksheet
引数: Before:=コピー先(Sheet) または After:=コピー先(Sheet) [省略可]
機能: ワークシートのコピー
Moveメソッド
対象: Worksheet
引数: Before:=移動先(Sheet) または After:=移動先(Sheet) [省略可]
機能: ワークシートの移動
MsgBoxプロシージャ
引数: プロンプト(文字列),ボタン(vbMsgBoxStyle)[省略可],タイトル(文字列)[省略可],他
値: 押したボタン(vbMsgBoxResult)
機能: メッセージダイアログの表示
InputBoxプロシージャ
引数: プロンプト(文字列),タイトル(文字列)[省略可],デフォルト値[省略可](文字列),他
値: 入力したデータ(文字列)
機能: 文字列入力用ダイアログの表示
InputBoxメソッド
対象: Application
引数: Prompt:=プロンプト(文字列),Title:=タイトル(文字列)[省略可],Default:=デフォルト値[省略可](文字列),Type:=タイプ(数値)[省略可],他
値: 入力したデータ(Variant)
機能: 各種データ入力用ダイアログの表示

ユーザーフォームとコントロール

VBEにおいて,プロジェクトユーザーフォームを挿入することで,自作のダイアログを作成することができる.ユーザーフォームについて,要点をまとめておく.

各種コントロールについては,Visual Basicのドキュメントやヘルプを参照されたい.

また,一部のコントロールはワークシートに配置することもできる.


イベントとイベントプロシージャ

ユーザーフォームやコントロールワークブックやワークシートなどのオブジェクトは,そのオブジェクトに対する操作などを,「イベント」として捉えることができる.これらのイベントにイベントプロシージャを関連付けると,イベント発生時にそのプロシージャが実行される.

イベントプロシージャは,ユーザーフォームやワークブックやワークシートのコードウィンドウに記述され,イベントを発生するオブジェクト名とイベント名を下線でつないだ名前を持つ.

CommanButton1_Click

三浦欽也 (miura@mail.kobe-c.ac.jp) ・三浦研究室

戻る