Excel-VBAで良く目にする「Call文」。
しかし、実際Call文を目にしても、どんなものが書かれているのかわからない方も少なくありません。

Call文って、どうやって使うんだろう?
そこで、そんなCall文の使い方を解決していこうと思います。
Call文とは・・・「Call文+サブルーチン」
Call文とは・・・
Module内の線で区切られている一つ一つのプログラムのことをサブルーチンといい、このサブルーチンを呼び出す手法が、Call文です。
つまり、同じようなプログラミングの記述は、サブルーチン化して呼び出すようなコーディングを取り入れることで、プログラミングの記述を簡略化するのにも使えるということです。
Call文は、下記のような方法で記述して呼び出すことが可能です。
ポイント
Call文:「Call + サブルーチン名」
のことを言います。そもそもCall文とは、どいうものを指すのか画面からそのイメージを作っていきましょう。
下記画面をご覧ください。
Sub Mainというサブルーチンを実行したとしましょう。
その処理を実行していくと、黄色い部分の「Call +Move_Call」というのに出会います。
しかし、これが何を指すのかというと、その下に記載されている、「Private Sub Move_Call()」というサブルーチンを作っており、ここに飛んでくださいね。ここを呼び出してください。という意味を示しています。
つまり、Call文というのは、その他のサブルーチンを呼び出すというものなのです。
サブルーチン化が必要な理由とは
それでは、どうしてこのサブルーチン化を行い、Call文として呼び出すようなことが必要になるのでしょうか?
仕組みを実装する時には、同じModule内に同一サブルーチン内にプログラムを記述すれば、それほど簡単なことはありません。
<サブルーチン化が必要な主な3つの理由>
- 同じソースを何度も記述することは見栄えも良くない
- メモリーを消費してしまう
- 見やすくすることで見る人にもわかりやすい
同じプログラミングの記述は、必ず存在します。そんな時にサブルーチン化することで、同じソースを何度も記述することを防いだり、後からの引き継いだ方でも見やすいソースを心がけることが業務を円滑に進むためのポイントになります。
これは、日本語と同じです。
「私が、今から外に出てて御飯を食べに行きます。車で出かけて、・・・・・・・・・買い物をした後で、外にラーメンを食べに外出しにいきます。
同じ日本語が何度も並んだら、それさっきも聞いたよ~。ってなりますよね~。

同じ文章であれば、それなどの指示語で表現して内容を簡略するはずです。同じ表現は何度も繰り返さない。これと同じことをするのが、「サブルーチン化」です。
だから、同じ内容は何度も使わずにサブルーチン化して呼び出ししまう分けなんです。

ただ何度も記述することがどうしていけないの?
ポイント
<サブルーチン化する2つのメリット>
- 見栄えが悪くなる
- 後から修正を加える場合のメンテが非常に楽になる
ただダラダラソースが長くなり、見栄えが悪く感じるようになります。またプログラム開発はソース記述量も膨大です。なるべく同じ表現は何度も記述せず呼び出すような記述をしていく方が、後から修正を加える場合、後々ソースのメンテナンスが楽になります。

後からソースを追う人にも非常に大変になるためです。
そのため、サブルーチン化しておくことで、あとで同一プログラムを書く手間を省くこともできるので、しっかり頭で構造化しながら、プログラミングしていくことが非常に大切になります。
またこれを「構造化プログラミング」とも言うんです。
こんなことを考えながら、プログラミングができるといいですね。

Call文の定義の使い方
続いて、Call文の「定義」の使い方について覚えておきましょう。

そもそも「定義」って、なんでしょうか?
「定義」とは・・・・
Call文で呼び出したい時に、そのサブルーチンにジャンプする時に使用します。
定義の利用目的
「定義」は主に、別のサブルーチンに記載したところを瞬時に移動できるので、そのCall文をデバッグして中身を確認する時に利用します。
定義の使い方
それでは、定義の使い方について解説していきましょう。
下記をご覧ください。
■【Module1に記載されるCall文】
【定義の使い方】
「Call文の上にカーソルセット」 ⇒ 「右クリック」⇒「定義」 ⇒ 「Call文のサブルーチンにジャンプ」
Call 文の上にカーソルを当て、右クリックをして下さい。「定義」を選択します。すると、そのCall文の定義にジャンプします。
■【Module2に記載されるMove_Callのサブルーチンに移動】
ジャンプする前まで、Module1にありましたが、定義でジャンプしたことで、そのMove_Callは、Module2に記述しているため、こちらのModule2に画面が転移されます。
このようにして、サブルーチン内を確認する時に、この定義を使用します。
Call文なのにCall記述がない場合
またCall文として、サブルーチンに移動できるのに、「文頭にCall記述がない」という記述もあります。
下記をご覧ください。
大きな赤枠の中にある赤枠も、Call文の記載はないですが、、実はこのTestMoveもCall文になります。
後ろの()で見分けが付けることができますが、この()がなくてもCall文になりますので、見分けるには経験が必要です。
これは、慣れてくればわかるようになるので、しっかりと経験を積むことが大切です。
まとめ
このように、Call文による「定義」は、データがきちんと変数にセットできているのか、デバッグにおいて容易にサブルーチン間を移動できるため便利機能でもあります。
使用の仕方をしっかり理解して、正しくデバッグができるようにしていきましょうね。
デバッグの正しいやり方についても記載してますので、ご確認下さいね。
➡【Excel-VBA】バグ解析に最適!上手なデバッグの仕方とブレークポイントの使い方
-
【Excel-VBA】バグ解析に最適!上手なデバッグの仕方とブレークポイントの使い方
続きを見る