プロシージャの構造化 (呼び出し元に戻る)

通常mainプロシージャが仕事の単位で、A、B、Cプロシージャなどは仕事の流れのそれぞれの処理を行う。各処理はプロシージャ単位だが、呼び出したプロシージャの処理を終えると必ず呼び出し元に戻るという仕組みがある。そのためmainのプロシージャで全体の流れを見ることができる。

プロシージャの構造化、建物化

個々のプロシージャは、スクロールしなくていいい程度の行数にすると読みやすい。また、一つのプロシージャに多くの機能を含めず、小さなプロシージャを組み合わせることで大きな仕事ができるように作る。例えば、データと処理と書式の設定は別のプロシージャにする。

次図は、4つのプロシージャを作り、mainプロシージャからsub1、sub2を呼び出し、sub2からsub3を呼び出している。mainプロシージャを実行すると、イミディエイトにsub1、sub2、sub3の順に出力される。

次図は、標準モジュールに上の図のコードを書いて実行した例。F8で一行一行実行順序を確認する。

必ず呼び出し元に戻るのが「構造化プログラミング」の手法です。以下の効果がある。

  1. mainで全体の処理の流れがわかる。
  2. コードを書く時は、各プロシージャの処理に集中できる
  3. 処理の分解や処理順番の変更がしやすい。

また、If文などの制御文も構造化の手法になる。構造化=メンテナンス性アップだ。

なお、私はSubプロシージャの「main」という名前は、Excelのファイルの中の全マクロを実行させるためのプロシージャと決めている。こうすることでExcelファイルごとに全体を実行するためのマクロ名を探す必要が無くなる。

作業分解、作業分割

「困難は分割する」、「簡単な例に置き換える」

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

そもそもプロシージャはいるの?

1つや2つのことなら2,3行で手順で済むが大掛かりになると考えられる範囲を小さく、プロシージャで行数を小さくする。 「困難は分割せよ」 。

  1. 分割による読みやすさ
  2. 呼び出し時にデータを渡す、データを受け取る仕組み

プロシージャの構造化 (呼び出し元に戻る)

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

自分のプロジェクトは参照設定しなくても使える(当たり前?)

当たり前といえば当たり前です。

次図は、自分のプロジェクト名「VBAProject」を指定して標準モジュールのaaプロシージャを呼び出すコードを書くところ。 VBAProject と.ドットでリストが見えると使える!ということ。

VBAProjectを付けなくても自分のプロジェクト内のプロシージャaaは、単にaaで呼び出すことができるし、VBEのメニュー/ツール/参照設定をする必要も無い(当たり前すぎるので無視して下さい)。

さて、

Excelライブラリ、VBAライブラリは名前が変わることはありません。しかし、自作のライブラリですから名前の変更ができます。プロジェクト名の変更のことです。プロジェクト名=ライブラリ名です。ライブラリの中にあるモジュールやオブジェクト(クラス)の名前も変えることができます。

言いたいの当たり前のことではなく、皆さんが使っているExcelやVBAのライブラリって何????じゃなくて、皆さんも作っているんでよ!!!!!ていうことです。

Module1に書いたコード

Public data

Sub main()
    VBA.MsgBox 12
End Sub
カテゴリー: 2 VBEを使うための基本操作と知識 | コメントする

入力を楽にする自動メンバー表示

入力時は、vbaかexcel(またはapplicationオブジェクト)のライブラリ名を入れてから必要な関数/メソッドやプロパティなどを選択すると入力が楽になる。

オブジェクトは種類が多くて覚えられない。例えば、C付きの型変換の関数の場合は、CInt、CLng、CDbl、CStrだが、C付きの型変換の関数は、省略しているため書きにくい。DateとByteだけはそのまま。Integer->Int、Long->Lng、Boolean->Bool、Double->dbl、Single->Sng、String->Str、Currency->Cur、Variant->Var。ただ、Conversionが書ければドットで自動メンバー表示する。

Conversionの正確なスペルがわからなくてもvba.coまで書ければ探すことができる。

つまるところ、ほとんどがCから始まると記憶しておけばvba.cだけでもでもいい。

コードの入力結果が長くて見にくい場合は、VBA.Conversionの部分を削除してもかまわない。関数は、ライブラリ名VBAやモジュール名Conversionを必要としない。
MSFormsやOfficeもあるが、vbaとexcelの2つを覚えておけば、自動メンバー表示から選ぶことができる。

  1. VBAライブラリなら、「vba.」とドットまで書くとリストが見える。
  2. Excelライブラリなら、「excel.」とドットまで書くとリストが見える。Applictionからでもいい

このサイトの文書ではvbaやexcelなどのライブラリ名やApplicationなどのオブジェクト名を付けたり、付けないこともあるが、入力が楽な方を選んで下さい。

練習:イミディエイトでexcel.(ドット)やexcel.Application.(ドット)やapplication.(ドット)で自動メンバーを確認する。

これらは、Excelが起動するとメモリ上にあるExcel本体のオブジェクトApplicationは、F2オブジェクトブラウザで確認できる。vbaproject.(ドット)やvbaproject.Sheet1.(ドット)やsheet1.(ドット)はプロジェクトエクスプローラーで確認できる。

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

オブジェクトブラウザ F2 と検索例

オブジェクトブラウザ の検索は、一部でも思い出せる単語があればいい。知りたい機能の単語を使う。VBAに慣れれば少しずつオブジェクトやプロパティの名前を覚えるというより使って覚える。

オブジェクトブラウザの見方を説明する。
次図は、関数typenameを検索した。

TypeNameは、Functionとあるように関数で、String型/文字列を返すことがわかる。VBAライブラリのInfomationをクリックするとModuleとあるので標準モジュールに書かれているFunctionプロシージャであることがわかる。
DimやPublic、Explicit、Integer、Booleanなどは検索できない。ステートメントや型名は、オブジェクトでは無いためだ。

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