Callステートメントはプロシージャーの部品化に必須項目 エクセルVBA最速理解

vbacalleyecatch

プロシージャー実行中に他のプロシージャーを呼び出すことの出来るCallステートメントについてです。
エクセルVBAプログラムを簡潔に組み立てるポイントにもなります。
部品化したコードを利用する上では欠かせません。

 

こんにちは、じゅんぱ店長(@junpa33)です。

 

エクセルVBAコードでプログラムを作成する中で、

プログラムが長く大きくなればなるほど、実行コードの部品化が重要になってきます。

その中で、よく似た実行コードの重複記述も問題です。

プログラムの長大化対策として、親プロシージャーの中に子プロシージャーが部品として入っているというのもよく普通にあります。

コード組み立ての中で、プロシージャーを部品化させるために知っておく必須項目が、「Callステートメント」になります。

 

Callステートメントの使い方

 

Callテートメントの使い方は、基本的には難しくありません。

Callステートメントを使えば、親プロシージャー実行中に、簡単に子プロシージャーを呼び出し実行させることが出来ます。

ただ1点だけ注意点があるとすれば、

コード記述する時の書き方(構文)についてです。

 

Callステートメントの構文

 

Callステートメントの構文

  •  Call プロシージャー名 [ (引数) ] [ ]内は省略可能
Call キーワード 省略可能です。
指定して、引数を使用するときは「(引数)」を省略できません。
プロシージャー名 呼び出すプロシージャー名 指定は必須です。
引数 使用しないときは省略可能です。

 

Callステートメント 書き方(記述方法)の注意点

 

呼び出すプロシージャーは、

引数なし・・・・Sub 〇〇〇実行 () ————————End Sub
引数つき・・・・Sub ▲▲▲実行 ( ◆  As ●●● ) ——–End Sub  とします。

可不可 記述方法 理由
実行可能 Call 〇〇〇実行 構文通り
実行可能 〇〇〇実行 Callキーワードの省略
実行可能 Call ▲▲▲実行 ( □ ) 構文通り
実行可能 ▲▲▲実行 □ Callキーワードの省略
実行不可 ▲▲▲実行 ( □ ) Call省略時に引数に()カッコが付いている

 

Callキーワードの省略表記の非推奨について

Callキーワードを省略せずにプロシージャ名を記述すれば、

コードの点検時にも別のプロシージャを呼び出していることが分かりますので、

その意味で、そのプログラムがより分かりやすくなったと言えます。

Callキーワード表記は「出来るだけ分かりやすく記述することが望ましい。」という観点では「表記を推奨」ということです。

 

Callキーワード省略時の 呼び出しプロシージャー表記について

基本的に、Callキーワードの省略の功罪は、プログラムコード作成は「出来るだけ分かりやすく記述することが望ましい。」という観点からの判断によるものです。

では、自分が作成したエクセルVBAプログラムは、どのような使用状況になるのか?誰がメンテナンスしていくのか?を考えてみましょう。

もし、コードメンテナンスも自分中心であれば、「要は、自分が分かればよい」が中心の考え方でいいとなるでしょう。

このブログサイトでは、基本 Callキーワードを省略して記述しています。

 

メンテナンス的に言うと、実務的には、「Call」という文字を付けるか付けないかよりも、

「呼び出したプロシージャー」がどこに記述されているかを明確にすることの方が重要だからです。

 

このブログでは、「Call Module3.〇〇〇実行」から「Call」を省略して「Module3.〇〇〇実行」と記述をしています。

これによって、呼び出したプロシージャー「〇〇〇実行」は「Module3」にあるということがすぐわかるようにしています。

つまり、別に「Call」がなくても「Module3」と書けば、プロシージャーを呼び出していることは普通にわかるので、Callキーワードを省略しているということです。

ユーザーフォームモジュールでは特に、
イベント発生時のコード記述で、何処にあるプロシージャーを呼び出しているかを明示しておくことにも有用です。

 

Callステートメントの使用例

 

使用例として、引数が無い場合とある場合について説明します。Callキーワードを記述する方法です。

引数を使わない場合でも、呼び出しプロシージャ内で使っている変数を利用したい場合は、

モジュール変数やグローバル変数化して利用することもできます。

Subプロシージャーを呼び出す

 

サンプルコードは、

セルB3にアクティブセルの「行番号+列番号」の値を表示します。

呼び出し先のSubプロシージャでは、セルB3のセルの色を「33番 スカイブルー」に指定します。

コード
Option Explicit

Sub 呼び出しテスト1()
    Dim Num As Integer
        Num = ActiveCell.Row + ActiveCell.Column
        Range("B3").Value = Num
        Call セル着色
End Sub

Sub セル着色()
    Range("B3").Interior.ColorIndex = 33
End Sub

vbacall002

 

引数付きSubプロシージャーを呼び出す

 

サンプルコードは、

セルB3にアクティブセルの「行番号+列番号」の値を表示して、

更にセルの色を「行番号+列番号」の値に合致するカラーインデックス色に変更します。

呼び出し先のSubプロシージャでは、セルB3のセルの色を決定するコードを実行します。

コード
Option Explicit

Sub 呼び出しテスト2()
    Dim Num As Integer
        Num = ActiveCell.Row + ActiveCell.Column
        Range("B3").Value = Num
        If Num > 57 Then Num = 0
    Call CColor(Num)
End Sub

Sub CColor(ByVal n As Integer)
    Range("B3").Interior.ColorIndex = n
End Sub

vbacall001

 

Callステートメント使い方のまとめ

 

他の言語でも同じですが、エクセルVBAでのプログラム作成は基本的に、

重複の少ない、簡潔な、分かりやすいVBAコード組み立てを目指さないといけません。

そのための方策の1つとして、エクセルVBAのプログラムコードを部品化して利用するということがあります。

その重要な役割を果たすのがCallステートメントだということです。

 

エクセルVBAの中には、Callステートメントの他にも、こういった「呼び出し」に関わるステートメントやプロシージャやメソッドがあります。

VBAのスキルアップに合わせて順次それらを習得して行きましょう。

 

 

エクセルVBAの独習には動画学習という方法もあります。 目と耳両方を使って学習することでさらに勉強効率を上げることもできます。

Udemy1eyecatch エクセルVBA初級者がUdemyで動画学習する講座おすすめ5選と無料講座の上手な使い方。

 

エクセルVBAを独習するのに参考書は欠かせません。 参考書選びは自分に合った「相棒」にできるものを選んでいきたいです。

vbastudyeyecatch002 エクセルVBAを独学で習得する!ために大切な7つのポイントを解説します

 

今回の記事はここまでです。   最後までご覧いただき有難うございました。

 

vbaborder1eyecatchVBAでセルに罫線を設定する 位置・線種・太さ・色vbarowseyecatchVBA Rowsプロパティの範囲選択と関連のメソッドvbadeleteeyecatchVBA DeleteとClearの使い分け 削除とクリアの違いを最速理解vbacurrentregioneyecatchCurrentRegionは範囲取得プロパティ 連続データをまとめて掴むSpecialCellseyecatchSpecialCellsメソッドは特定のセルを選択する多機能ツールVBAFunctioneyecatchFunctionプロシージャーの働きと使い方 ユーザー定義関数もここ知れOK!vbacalleyecatchCallステートメントはプロシージャーの部品化に必須項目 エクセルVBA最速理解vbacharactereyecatchaCharactersプロパティで文字列中の一部の文字の書式設定や加工をするvbafontsyseyecatcha文字の書式の設定方法 Fontプロパティで装飾操作ができるVBAFormateyecatchFormat関数を書式設定のテッパン関数にする!実務での書式と重要5例vbaintfixeyecatch数値の整数部分を完全分離 Int・Fix・Abs・Sign関数で出来る使い方vbarndeyecatchRnd関数で乱数を取得。使えない戻り値を加工して利用度を上げるVBAコードvbaroundupdowneyecatchRoundUpとRoundDown関数の使い方。数値の切り方に注意が必要ですvbaroundeyecatchRound関数の毒針。VBAで数値を四捨五入する時の注意点vbamaxminaveeyecatchMax・Min・Averageワークシート関数で最大値・最小値・平均を求めるvbainsteeyecatchInstr関数・InstrRev関数は文字列を検索する。ファイルパス取得に威力vbareplaceeyecatchReplace関数は文字列を置換・削除する利用度の高い関数vbaselectcaseeyecatchSelect Case 条件分岐の使い方。ステートメントの基本はコレ。VBAValeyecatchVal関数の使い方はデータ型不一致の解決策。値を文字列型から数値型へVBAStringeyecatchString関数の使い方は文字を指定した数だけ並べることが出来る

 

<記事内容についての告知>VBAコードの記述記事においては、その記述には細心の注意をしたつもりですが、掲載のVBAコードは動作を保証するものではりません。 あくまでVBAの情報の一例として掲載しています。 掲載のVBAコードのご使用は、自己責任でご判断ください。 万一データ破損等の損害が発生しても当方では責任は負いません。