パーツに分けて作ろう。(1)

マクロを組むのにある程度慣れてくると、様々な処理をこなすプロシージャを作成するようになってきます。
それにともなって、プロシージャの行数も増えてきます。
プログラムを組む作業というのは、「作成し、エラーを取り除き、・・・」ということの繰り返しです。
ところが、行数が増えてくると、どの部分が原因で正常に処理されないのか、わかりにくくなってきます。
そんなときに必要なのが、処理ごとのパーツに分けて作成するということです。
パーツに分かれていれば、動作チェックも簡単に済みますし、何より原因を特定するのが簡単です。

1.サブプロシージャを作る。

 プロシージャ「実行」は、サブプロシージャとして、「値のチェック」を呼び出して処理をし、
 「色を付ける」で基準点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)塗ります。
 

2.引数のあるサブプロシージャを作る。

 上のサブプロシージャは、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 ここで、値をもらって処理しています。