プローシジャとマクロ(2)::システムトレード完全攻略(エクセル活用術)

システムトレードのトップへ > VBA > VBA入門  >プローシジャとマクロ(2)

プローシジャとマクロ(2)

マクロはVBAではプロシージャと呼びます。プロシージャは文章でいうところの段落部分にあたります。マクロとプロシージャの違いはマクロがエクセルの自動記録で作成されたのに対して、プロシージャは人間の手で作成されたものと理解するのが、分かり易いかと思います。



段落は一文一文で成り立っています。一文とはその文で意味が完結しているという意味です。例えば、「もし明日晴れたのなら」だけでは一文とはいえません。意味が完結していないからです。「もし明日晴れたのなら、洗濯しよう」が正しい一文です。VBAでも同じです。VBAでは完結した最少単位の文を「ステイトメント」と呼んでいます。VBAで正しいという意味は、その一文だけでもプログラムが正しく作動するということです。そして、いくつかのステイトメントをまとめて表したものがプロシージャということになります。もちろん場合によっては1文のみのプロシージャーもあります。どのステイトメントをどうやってまとめるかはその人次第です。しかし他人が分かるように、後で追跡しやすいように、効率のいいようにステイトメントをまとめる必要があります。

1つのステイトメントで1つのプロシージャの場合


システムトレードとエクセル


これでも立派なプログラムです。実行するとタイトル通りの結果になります。



1つのプロシージャにステイトメントが2つある場合


システムトレードとVBA


プロシージャの名前は何のプログラムか分かるように日本語にするのがお勧め。かっこつけて英語っぽくすると後で探すのに大変になり、後悔する。タイトルで何のプロシージャか一目で分かるのがGood!



次は、1から20までの番号を振り罫線と枠線を引く作業を自動化するためのプロシージャです。前回の「マクロで日常業務を自動化する(1)」と同じ結果になるのを確認してください。


システムトレードとプロシージャ


「マクロで日常業務を自動化する(1)」のマクロよりかなりシンプルになって、量も減ったのが分かります。量が減った最大の原因は、マクロ記録には「デフォルト値までも記録してしまう」という欠点があるので、結果的に長くなり、手打ちの方が文が短くみえるからです。デフォルト値というのは、例えばセルの書式のフォントだけを変えたいマクロを作った場合、フォント名、スタイル、色などのその他の設定項目まで詳細に記録されるということです。上記のプロシージャではステイトメント4から9の部分が大幅に減った部分です。このVBAはステイトメント9つで構成されています。その内1と2が数字に関するプロシージャで、残り7つは罫線に関するプロシージャです。



一般的にマクロ記録には4つの限界(欠点)があるといわれています。



1.デフォルト値が記録されて、結果的に読みにくく、量が多い分処理も遅れます。


書式設定 by システムトレード


マクロ記録の場合、セルの書式設定をする場合は、上のユーザーフォームを開く必要があります。マクロ記録中にこのユーザーフォームを開いて、フォントサイズをデフォルトの11から16に変える作業だけしたいとしても、その他のフォント、スタイルなどのデフォルト値まで記録され、結果長いコードになります。



2.無駄な操作も記録される。


prosijya_pic4.jpg


上(手打ち)と下(マクロ記録)のプロシージャの実行結果は全く同じです。



3.汎用性のあるマクロが作成できない。

例えば罫線の範囲を20×20から200×200に簡単に変更出来ない。VBA(手打ち)なら変数を使うなどの対処で簡単にできます。



4.条件判断や繰り返しを行うマクロは作成できない。

これが出来るとVBAで何でもできるようになる。例えばVBAでインターネットエックスプローラさえ操作できる。エクセルでゲームも作れる。



次に上表のプロシージャを大きく3つに分けてみます。つまり数字を打つステイトメント(1と2)のステイトメントと罫線・枠線を引くステイトメント(3から9)のとそれらを合わせるプロシージャです。なぜそのような無駄をするかといえば、バラバラにしておいた方が後で使い回しが出来るからです。また更新作業、バグの修正作業などもやりやすくなるからです。例えば罫線・枠線のプロシージャの場合、もっと汎用性を高めて範囲を自在に変えれれば別のプロシージャと組み合わせが可能になるかもしれません。また数字を振るプロシージャも同じです。それに分けて方が見やすいという利点も見逃せません。


1から20までの番号を振るプロシージャ


システムトレードとVBA



罫線・枠線を描画するプロシージャ


システムトレードと罫線



「1から20までの番号を振るプロシージャ」と「罫線・枠線を描画するプロシージャ」を呼び出すプロシージャ


systemtrader's site



プロシージャから別プロシージャを呼び出す時は、「Call + 呼び出したいプロシージャの名前 」で簡単に呼び出せます。3つに分けた場合、最後のプロシージャを「親プロシージャ」、最初の2つを「子プロシージャ」と呼ぶ時があります。しかしイメージとししては、親子関係というよりも飲食店内の親方と弟子のような師弟関係といった方が理解しやすいかもしれまん。師弟関係のあるプロシージャはお互い協力し合って1つの作業を完成させます。一方で同じ作業を分担しあわないで完成させることもできます。この場合は親方1人の個人商店です。

例えば、「天ぷら御膳を作る」という作業があるとします。これを師弟関係で「天ぷら御膳を作る」という作業を完成させるとこうなります。





Sub 親方()

海老3本揚げる 

ナス1本揚げる

かき揚げ1つあげる

白身魚を揚げる

Call 弟子A ’弟子Aを呼ぶ

Call 弟子B ’弟子Bを呼ぶ

End Sub





Sub 弟子A()

ご飯を盛りつける

小鉢を盛りつける

End Sub





Sub 弟子B()

刺身盛りを作る

刺身盛りを御膳にセットする

End Sub





つまり、天ぷら御膳を作るのに親方は天ぷらを揚げてると同時に、弟子A、弟子Bにそれぞれ決まった形の付け合わせなどのセットを指示している感じです。天ぷらが出来次第、天ぷら御膳の盆は弟子A→弟子Bに移り、完成となります。


エクセルdeシステムトレード




これを親方一人でした場合のプロシージャは当然1人で全部の作業をこなすことになります。





Sub 親方()

海老3本揚げる 

ナス1本揚げる

かき揚げ1つあげる

白身魚を揚げる

小鉢をセット

ご飯をセット

刺身盛りを作る

刺身盛りをセット

End Sub




と、このようになります。2つを比べてみても、長い長いプログラムを組んでみないとなかなか部品化のメリットは感じてもらえません。その中にあっても比較的短いプログラムを組んでいてもメリットの感じるものに「プログレスバー」があります。「プログレスバー」は引数という考えを理解するのにも大変な助けになります。これは別の機会にまた説明します。


セルレーダー最新版ダウンロードした(^▽^)?

人気ブログランキングへ





1位取れたら未公開プログラム沢山吐き出すので応援のポチ2つしてね(≧ω≦)

投稿者 システムトレーダー壱式 : 2008年04月13日 23:24



トラックバック

このエントリーのトラックバックURL:
http://systemtrader.info/cgi/mt/mt-tb.cgi/86

コメント

コメントしてください




保存しますか?


//-->