マクロを組むのにある程度慣れてくると、様々な処理をこなすプロシージャを作成するようになってきます。
それにともなって、プロシージャの行数も増えてきます。
プログラムを組む作業というのは、「作成し、エラーを取り除き、・・・」ということの繰り返しです。
ところが、行数が増えてくると、どの部分が原因で正常に処理されないのか、わかりにくくなってきます。
そんなときに必要なのが、処理ごとのパーツに分けて作成するということです。
パーツに分かれていれば、動作チェックも簡単に済みますし、何より原因を特定するのが簡単です。
プロシージャ「実行」は、サブプロシージャとして、「値のチェック」を呼び出して処理をし、
「色を付ける」で基準点5に満たないセルに赤い色を付ける処理をします。
メインプロシージャ「実行」には、サブプロシージャを呼び出す命令だけが書かれています。
このように記述すると、後でプロシージャを見たとき、すっきりとわかりやすいですね。
Sub 実行() Call 値のチェック ←@ Call 色を付ける ←A End Sub |
@ サブプロシージャを呼び出しています。 (このプロシージャは、実際にはありません。) A サブプロシージャを呼び出しています。 (下のプロシージャです。) |
Sub 色を付ける() Dim R As Long For R=1 to 10 ←B If Cells(R,1)<5 Then Cells(R,1).Interior.ColorIndex=3 ←C Next R End Sub |
B 1行目から10行目までを繰り返し処理します。 C 5点未満の時、セルを赤く(3)塗ります。 |
上のサブプロシージャは、1列目の処理はできますが、ちょっと使いにくいところがあります。
そこで、もう少し汎用性のあるものに改良してみましょう。
やりたいこととしては、
@どの列でも、実行できるようにしたい。
A基準点が変えられるようにしたい。
B色も変えられるようにしたい。
と、これだけの機能を盛り込もうと思います。
それには、引数を使ってサブプロシージャを作成します。
引数を使ったサブプロシージャを作ると、自由度がぐっと上がります。
Sub 実行() Call 色付け(1,5,3) ←@ Call 色付け(2,7,4) ←A Call 色付け(3,3,6) ←B End Sub |
以下は、サブプロシージャを呼び出した処理です。 @ 1列目で、5点未満を赤(3)にする処理をします。 A 2列目で、7点未満を黄緑(4)にする処理をします。 B 3列目で、3点未満を黄色(6)にする処理をします。 |
Sub 色付け(列 As Integer,基準 As Integer,色番号 As Integer) ←C Dim R As Integer For R=1 to 10 If Cells(R,列) < 基準 Then Cells(R,列).Interior.ColorIndex = 色番号 ←D Next R End Sub |
C 引数として、列の場所と、基準点と、セルの色を設定しています。 D ここで、値をもらって処理しています。 |