【Excel-VBA】Call文の使い方!「定義」の使い方とCall表示がない記述方法

2020年2月1日

 

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

ユーザー
ユーザー
Call文って、どうやって使うんだろう?

 

そこで、そんなCall文の悩みそして使い方を解決していこうと思います。

Call文とは・・・「Call文+サブルーチン」

Call文とは・・・

Call文:「Call + サブルーチン名」

のことを言います。

そもそもCall文とは、どいうものを指すのか画面からそのイメージを作っていきましょう。

下記画面をご覧ください。

 

Sub Mainというサブルーチンを実行したとしましょう。その処理を実行していくと、黄色い部分の「Call +Move_Call」というのに出会います。

しかし、これが何を指すのかというと、その下に記載されている、「Private Sub Move_Call()」というサブルーチンを作っており、ここに飛んでくださいね。ここを呼び出してください。という意味を示しています。

 

つまり、Call文というのは、その他のサブルーチンを呼び出すというものなのです。

 

サブルーチン化が必要な理由とは

それでは、どうしてこのサブルーチン化を行い、Call文として呼び出すようなことが必要になるのでしょうか?

仕組みを実装する時には、同じModule内に同一サブルーチン内にプログラムを記述すれば、それほど簡単なことはありません。

<サブルーチン化が必要な主な3つの理由>

  • 同じソースを何度も記述することは見栄えも良くない
  • メモリーを消費してしまう
  • 見やすくすることで見る人にもわかりやすい

 

同じプログラミングの記述は、必ず存在します。そんな時にサブルーチン化することで、同じソースを何度も記述することを防いだり、後からの引き継いだ方でも見やすいソースを心がけることが業務を円滑に進むためのポイントになります。

 

これは、日本語と同じです。

「私が、今から外に出てて御飯を食べに行きます。車で出かけて、・・・・・・・・・買い物をした後で、外にラーメンを食べに外出しにいきます。

 

管理者
管理者
同じ日本語が何度も並んだら、それさっきも聞いたよ~。ってなりますよね~。

 

だから、同じ内容はサブルーチン化してしまうんです。

 

ただどうしてそれがいけないのか?

というと、いけない分けではありません。見栄えが悪く、後からソースを追う人にも非常に大変になるためです。

そのため、サブルーチン化しておくことで、あとで同一プログラムを書く手間を省くこともできるので、しっかり頭で構造化しながら、プログラミングしていくことが非常に大切になります。

またこれを「構造化プログラミング」とも言うんです。

こんなことを考えながら、プログラミングができるといいですね。

 

Call文の定義の使い方

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

ユーザー
ユーザー
そもそも「定義」って、なんでしょうか?

 

「定義」とは・・・・

Call文で呼び出したい時に、そのサブルーチンにジャンプする時に使用します。

 

定義の利用目的

定義は主に、別のサブルーチンに記載したところを瞬時に移動できるので、そのCall文をデバッグして、中身を確認する時に利用します。

 

定義の使い方

それでは、定義の使い方について解説していきましょう。

下記をご覧ください。

Module1に記載されるCall文】

【定義の使い方】

「Call文の上にカーソルセット」 ⇒ 「右クリック」⇒「定義」 ⇒ 「Call文のサブルーチンにジャンプ」

 

Call 文の上にカーソルを当て、右クリックをして下さい。「定義」を選択します。すると、そのCall文の定義にジャンプします。

 

■【Module2に記載されるMove_Callのサブルーチンに移動】

 

ジャンプする前まで、Module1にありましたが、定義でジャンプしたことで、そのMove_Callは、Module2に記述しているため、こちらのModule2に画面が転移されます。

 

このようにして、サブルーチン内を確認する時に、この定義を使用します。

 

Call文なのにCall記述がない場合

またCall文として、サブルーチンに移動できるのに、「文頭にCall記述がない」という記述もあります。

下記をご覧ください。

 

 

 

 

IF文に見せかけていますが、実はこのTestMoveもCall文になります。

後ろの()で見分けが付きますが、この()がなくても、Call文になりますので、見分けるには経験が必要です。下の赤枠が答えです。

 

 

これは、慣れてくれば、わかるようになるので、ご安心下さい。

 

 

まとめ

このように、Call文による「定義」は、データがきちんと変数にセットできているのか、デバッグにおいて容易にサブルーチン間を移動できるため便利機能でもあります。

使用の仕方をしっかり理解して、正しくデバッグができるようにしていきましょうね。

デバッグの正しいやり方についても記載してますので、ご確認下さいね。

 

⇒【Excel-VBA】バグ解析に最適!上手なデバッグの仕方とブレークポイントの使い方