標準モジュールのPublicな変数とPublicなプロシージャを使う

スコープ、参照できるかどうかの話も含む。イミディエイトと標準モジュールは別のモジュールと考える。

標準モジュールにあるPublic宣言した変数とPublicなプロシージャは、どこからでも呼び出せる。Sheet1モジュールからでもイミディエイトからでも呼び出せる。

次図のようにPublicな変数a,ssとmainプロシージャ、Privateなaaプロシージャを書き、イミディエイトで使う。

Private宣言したプロシージャをイミディエイトから直接呼び出すことができないが、Publicなmainプロシージャ内でPrivateなaaプロシージャを呼び出している(mainプロシージャからaaプロシージャに実行が移動する)。

カテゴリー: 2 VBEを使うための基本操作と知識 | コメントする

SubはFunctionの機能縮小版

私は、なるべくFunctionにする。というのは、入力(引数)と出力(戻り値、関数値)がはっきるするからだ。Functionプロシージャの処理内であちこちのデータを変更することはしない。あちこちのデータを変更する場合は、Subを使う。

以下のようなイメージ。

  1. Subプロシージャは、処理
  2. Functionプロシージャは、変数と同じ

どちらも何らかの処理はするが、以下の違いがある。

  1. Subプロシージャは、戻り値がない
  2. Functionプロシージャは、戻り値を返すことができる。返さなくてもいい。

Functionプロシージャは値です。宣言すると時も型を指定することができる。
bb関数をLong型とする場合「Function bb(x) As Long」と定義する。bb関数は計算式やセルの中で使える。
次の図は、2つのプロシージャを標準モジュールに定義している。どちらも、引数xをそのままイミディエイトに出力する。関数bbの方は、引数xに1を加算した結果をbbに入れる。これで関数に値が入る。

次図ようにFunctionは、値として扱える。

カテゴリー: 2 VBEを使うための基本操作と知識 | コメントする

プログラミング用フォント Myrica

Myrica (ミリカ)。ダウロードして使う。拡張子ttcをダブルクリックして「インストール」ボタンを押す。

他のフォントと違いがわかるのが、数字のいち1、小文字のエルl、大文字のアイI。大文字のおーo、数字のゼロ0。 見やすいと思う。このフォントはミリカではありません。

カテゴリー: 1 「開発」タブとVBE | コメントする

関数値(戻り値)と( )の関係

関数/Functionモジュールはある値またはオブジェクトという変数でもある。Left関数は値なので変数でもあるので「関数値」とか「関数の戻り値」、「関数の返り値」と言える。Left(“abc”,2)は「ab」の入った文字列型の変数でもある。そのためLeft(“abc”,2) & “x”という式が使える。

プロシージャに渡すデータは「引数(パラメータ)」を使う。Left、Right関数を例に説明する。

LeftもRightも2つの引数を渡す必要がある。戻り値を得るには()を付ける必要がある。イミディエイトで戻り値を見るために先頭に?がいる。イミディエイトでは先頭の「?」または変数への代入「=」と()はセットで扱うと記憶する。以下は、イミディエイト。

?vba.Left("abc",2)             '文字列"abc"の左から2文字を取り出し、?でPrintする
ab
?vba.Left("abc",2) & "x"      ' ?vba.Left("abc",2)は「ab」の値を持つ文字列変数でもある
abx
aa=vba.Left("abc",2)           '変数aaにLeft関数の戻り値を入れる。
?aa                       '変数aaをPrintする
ab
?aa & vba.Right("abc",2)  '変数aaと文字列"abc"の右から2文字を取り出し、&で文字をつなぐ
abbc

関数の機能は、「パラメータ(引数)を渡し、処理した結果を返す」。

イミディエイトでvba.leftと入力すると自動メンバーの表示でLeftと先頭が大文字になる。コードモジュール内で書くとvbaもVBAに変換されるが、ここイミディエイトでは大文字小文字の変化は無い(入力の補正)。入力が正しいか判断したい場合は、自動メンバー表示を利用してvbaのように親に当たるオブジェクトかライブラリ名を書く。

戻り値と必要としない場合、()を付けない。また、戻り値を受けないので先頭に?はいらない。以下はイミディエイト。なんとエラーにもならない!

vba.Left "abc",2             '文字列"abc"の左から2文字を取り出し処理するが、戻り値は無い

戻り値がいるのでこのような使い方はしないが、()で戻り値を得ることを理解する。

カテゴリー: 2 VBEを使うための基本操作と知識 | コメントする

マウスの位置のプロシージャを実行する

次図のmainもbbも()カッコの中の引数が無い。つまり、引数なしの場合はマウスで実行できる。引数が無ければ名前に関係なくマクロとして登録、実行できる。

マウスの位置のマクロ(プロシージャ)を実行する

VBEの実行ボタンは、カーソルの位置にあるプロシージャを実行するが、プロシージャーと関係の無い、例えばイミディエイトにカーソルある場合は、次図のように、マクロ名選択のダイアログボックスが表示される。ここに表示されるリストは、引数がないプロシージャだけ。

VBEの実行ボタンで見えるのは引数の無いプロシージャーの一覧

Excel本体の開発タブのマクロのボタンも同様。

Excel本体のメニュー/開発/マクロ  引数の無いプロシージャーを一覧する

まとめるの以下のようにプロシージャーを実行(テスト)できる。

  1. 引数が無い場合は、マウスカーソルをプロシージャ内のどこかの行に置いて実行ボタン
  2. 引数がある場合は、イミディエイトにプロシージャー名と引数を書いてエンターキーで実行
練習:引数の無いSubプロシージャとFunctionプロシージャを作り、実行ボタンでプロシージャを実行する。
カテゴリー: 2 VBEを使うための基本操作と知識 | コメントする