2022年一発目の記事はプログラムに関するものです。
よくサブルーチンということばを聞きます。それってなんでしょう。どんな時に使って、何が便利なのでしょうか。
サブルーチンを解説する記事はたくさんありますが、ここは私の言葉で説明してみましょう。
べた書きしていいの?
プログラムの前に、仕事の流れを考えていくと、次のようなことがよくあります。
販売一覧表の中から2021年12月のA商店の販売したものを抽出して請求書のテンプレートに貼り付けて印刷する。
これをプログラム的に考えると、次のようになります。
- 販売一覧表からフィルターする
- コピーする
- 請求書のテンプレートを開く
- 請求書のテンプレートに貼り付ける
- 印刷する
さらに、ExcelVBAとして考えるともっと長くなります。
- 一覧表があるシートを認識する
- 認識したシートにフィルターを設定し2021年12月のA商店のデータを抜き出す
- コピーする
- 請求書テンプレートをブックを開きつつ認識する
- 認識したブックの1シート目の指定された箇所に貼り付ける
- 印刷する
- 認識したブックを閉じる
この流れがA商店以外にも100店あったら、これを100回プログラムに書くことになります。ものすごいプログラムの行数になってしまいますね。
いつも同じでいいところとそうではないところに分ける
そこで、何回もべた書きで書くのではなく、いつも同じところはそのまま繰り返せばよくて、いつも違うところだけ指定してやればできるような構造にするといいですよね。
いつも違うところは、年、月、請求先の3つであること、その他は同じであることがわかります。
サブルーチンという専門工場を作る
なので、いつも違う部分を「指定できるもの」にした手順を作成したらわかりやすくなります。
- 一覧表があるシートを認識する
- 認識したシートにフィルターを設定し<指定年>、<指定月>の<指定請求先>のデータを抜き出す
- コピーする
- 請求書テンプレートをブックを開きつつ認識する
- 認識したブックの1シート目の指定された箇所に貼り付ける
- 印刷する
- 認識したブックを閉じる
このようにしたものがサブルーチンです。
サブルーチンに材料を指定して依頼する
このようにして作成したサブルーチンは呼び出しという形をとります。
例えば、上記のサブルーチンに名前を「請求書作成」と付けます。
そうすると、次のようにして、2021年12月の請求書を作成することができます。
- 請求書作成(請求年は2021年、請求月は12月、請求先はA商店)
この1行+サブルーチンの7行で請求書が作成できます。
この時点では、べた書きしたほうが7行なのでメリットはありません。
しかし、サブルーチンは何度も呼び出せるのです。
次の3行で、3請求先の2021年12月の請求書が印刷されます。
- 請求書作成(請求年は2021年、請求月は12月、請求先はA商店)
- 請求書作成(請求年は2021年、請求月は12月、請求先はB商店)
- 請求書作成(請求年は2021年、請求月は12月、請求先はC商店)
プログラムの長さは3+サブルーチンの7行の10行で済みます。
100件なら、100行+7行で済むのです。本来100件なら700行かかります。これは500件、1000件と増えていけば当然その分だけ行数をカットできます。
これがサブルーチンのメリットその1です。
サブルーチンは手順変更に強い
例えば、今は請求書を作成したら印刷しかしていないですが、それに保存の手順を加えたらどうでしょうか。
ベタ打ちで100件あった場合、100か所直さなければならないのです。
しかし、サブルーチンにしておけば、手順を書いてあるところは1か所なのでそこだけ直せばいいのです。
これがサブルーチンのメリットその2です。このメリットはまさにプログラムのメリットともいえるものです。
手順をブラックボックスにできる
完全なサブルーチンを作ってしまったら、そのサブルーチンは中身は意識せず、半永久的に使い続けることができます。その中身をメンテナンスする必要がなくなるのです。
簡単に呼び出して何かを為すことができるようにしておけば、それ以降に呼び出し方法や、サブルーチンの材料のみを意識しておけばよいのです。いわばブラックボックスにして、触る必要もないようにしておける、これもサブルーチンのメリットと言えます。
まとめ
私はサブルーチンのメリットは上記の通り3つあると思います。
- プログラムの行数を削減できる
これは、主にプログラム効率を上げるというプログラムを作成する人のメリット
- プログラムを変更するのに一部だけ変更すればよい
これは、主にプログラムのメンテナンス性を上げるという変更者のメリット
- 手順のプログラムを覚えておかなくてよい
これは、遠い将来に渡り、そのプログラムを変更しながら使い続ける人へのメリット
このようなことからプログラム内の同じような手順のものはサブルーチン化する、ということが必要とされているのです。
コメント