今回は、そのVBAプログラムの動作確認を行なう方法について、詳しく説明します。
標準モジュールに書いたプログラムを呼び出して実行するには、いくつか方法があります。
1.VBAのプログラム内から呼び出して使う。
2.VBEのイミディエイトウィンドウで実行する。
3.Excelのワークシート上で関数として使う。
1については、課題でも登場するので、軽く説明する程度にして、今回は2と3に重点を置いて解説します。
【1.VBAのプログラム内から呼び出して使う。】
基本的には、以下のような使い方になります。
Dim filePath As String
Dim tmpText As String
filePath = "C:\mailPG\Text\step1.txt"
tmpText = readTextFile(filePath)
Debug.Print tmpText
*「\」はWindowsでは円記号のことです。
ユーザー定義関数のreadTextFileは、引数にテキストファイルのフルパスを指定すると、内容を読み込んで、戻り値として文字列を返します。
Functionプロシージャ側の定義
Public Function readTextFile(filePath As String) As String
省略
readTextFile = str
End Function
そこで変数tmpTextで、戻り値を受け取っています。データ型も文字列型で同じにしています。
あとは変数tmpTextをプログラムの中で利用できます。
変数filePathに代入するフルパスの値を変えれば、別のファイルも読み込めます。
ただしテキスト形式のファイルに限ります。テキスト形式ならHTMLタグでも大丈夫です。
上の使用例では、確認のため、「Debug.Print」でイミディエイトウィンドウに表示していますが、これは無くてもかまいません。
【2.VBEのイミディエイトウィンドウで実行する。】
標準モジュールに書いたプログラムを一番簡単にテストできるのが、この方法です。
(1)イミディエイトウィンドウに以下のように入力し、「Enterキー」で実行してください。
?readTextFile("C:\mailPG\Text\step1.txt")
この関数の引数は、文字列型で定義しているので、ファイルのフルパスを「"」(ダブルクォーテーション)で囲っている点に注意してください。
また先頭の「?」(クエスチョンマーク)を忘れないようにしてください。
イミディエイトウィンドウでは、「?」の後に指定した「関数の戻り値」や、「変数の値」を表示する仕組みになっているからです。
(2)イミディエイトウィンドウにテキストファイルの内容が表示されました。
もしイミディエイトウィンドウが表示されていない場合は、以下の手順で表示できます。
VBEのメニューから「表示 → イミディエイトウィンドウ」
【3.Excelのワークシート上で関数として使う。】
実はユーザー定義関数は、Excelにあらかじめ用意されている標準の関数と同じように、ワークシート上でも使うことができます。
(1)動作確認のため、新しいワークシートを挿入します。
(2)例えば、「A1」セルの計算式に、以下のように入力します。
=readTextFile("C:\mailPG\Text\step1.txt")
先頭の「=」(イコール)を忘れないようにしてください。
ワークシート上では、セルに計算式を設定する場合は、「=」を付ける仕組みになっています。
(3)テキストファイルの内容が表示されました。
でも横長で見難いですよね。
(4)「A1」で「セルの書式設定」を変えると、以下のように見やすくなります。
セルの書式設定
・配置タブ 縦位置 上詰め
・配置タブ 文字の制御 折り返して全体を表示する
(5)動作確認が済んだら、テストで使用したワークシートは、削除してください。
(6)今回は動作テストなので、Excelファイルの変更点を保存する必要はありません。
以上のように、ユーザー定義関数を作れるようになると、Excelのワークシート上で出来ることが広がります。
【補講】
ここで重要なポイントは、簡単な関数名と引数を指定するだけで、複雑な処理を行ない、その結果を得られることです。
今回は十数行程度の短いプログラムでしたが、数百行、数千行に及ぶ複雑なプログラムの結果を得ることも可能です。
それをたった1行の関数の呼び出しだけで行なえるのです。このようなことが、ユーザー定義関数を作るメリットです。
既存の関数や制御文、変数、定数などを上手く組み合わせて、いかに新しいユーザー定義関数を作り、便利にできるかというのが、プログラマーの腕の見せ所です。