今回は自作関数のテスト方法について、私のお気に入りの方法を紹介する。そもそもテストパターンを作成して関数毎にテストするなんて、現役のプログラマからしてみたら当たり前のことだと思うが、VBAの現場でそこまでキッチリテストしている人は少数派なのではないだろうか。エクセルVBAならではの方法だが、お手軽にテストできるので、もし自作関数に手を出した人は使ってみてほしい。Functionで宣言したユーザー定義関数はワークシート上から使用すことが出来るのはご存知だろうか。・EXCEL関数は良くわからないからVBAで書いてる。いう人もいれば(←昔の私です)・トラブルの元だから使うべきではない。いう人もいると思います。・使うべきではないが、便利なので仕方なく使う時もある。いう人もいるかもしれません。(←今の私です)使い方まずは自作関数のテスト方法をお見せします。検証には前の記事の自作関数の比較表を使いたいと思う。大した事をしているわけではなく、適当なシートにテーブルを定義(Ctrl+T)してA列にbasePath、B列にrefPath、C列にfsoを使った自作関数を呼び出す式、D列にゴリゴリ書いた自作関数を呼び出す式を書いただけだ。C列:=GetAbsolutePathNameExFso([@basePath],[@refPath])D列:=GetAbsolutePathNameEx([@basePath],[@refPath])これで、テストパターンをA列とB列に追記していくという、たったこれだけの作業でリアルタイムで一連のテストパターンの実行結果を表示してくれるツールの完成だ。なんなら適切な実行結果の列と、チェックする式を書けば、テストパターンの正当性も一目で分かるようになる。一般的なプログラミング言語のテストでは、別途ファイルを作成したりMergeしたりするのだと思うが、VBAではEXCEL一本で完結する。VBAの大きな強みなんじゃないかと思っている。VBAコードを直したら即座に更新がされることはないので、再計算(F9)を実行する必要がある点だけは注意してほしい。前のページで書いたfso.GetAbsolutePathNameのように、Excelに応答を返すのに時間のかかるコードが混ざっていると、フリーズして泣くことになるので注意したほうが良いと思われる。他のテスト方法との比較さて今更感はあるが、テスト作業をVBE上でやるとどうなるのだろうか。'C:\hoge\fuga\同じフォルダの.xlsxが返って欲しい。'C:\hoge\上のフォルダの.xlsxが返って欲しい。'C:\2つ上の.xlsxが返って欲しい。Subこの場合の問題点を適当に上げていく。コピペ後の書き換えミスやタイプミスが起こりやすい。テストパターンが増えるほど、イミディエイトが流れて効率が悪い。いってコメントアウトをしたり、解除したりするのも面倒。するよりもシートに書き出した方がマシだろう。先述のようにワークシート上から関数を呼ぶのに比べると、テストコード用のプロシージャを作らなければならない分、どうしても効率は落ちる。補足たまに再計算されなくなる時がある。Alt+Ctrl+F9またはAlt+Ctrl+Shift+F9・・・強制再計算を実施しましょう。VBAから行うときは、Application.CalculateFullユーザー定義関数を揮発性関数にする。これはあまりオススメしません。プロシージャにApplication.Volatileを記述すると事あるごとに再計算が実行される揮発性関数になります。ワークブックが破損する。ユーザー定義関数を使ったブックを保存して、閉じて、開き直すと破損していますと出やすい。関数が不完全だったり、計算が重いと出やすい気がする。開けないときはマクロを無効化してから開くと良いかも。アドインの関数と喧嘩する。同一の名称の関数が、アドインとブックに存在すると、関数の参照先はアドインが優先される仕様らしい。したがって、一度アドインとブックを開いた状態で保存し、アドインを開かずにブックを開いた時、破損していますと出ることがある。共有フォルダ等で複数のPCで共有する時に問題となりやすい。一度アドインにリンクされてしまった関数を直すのは置換でもできるが地味にめんどくさい。まとめワークシート用のユーザー定義関数を使うと、テスト用プロシージャを書く手間がかからず、手軽にテスト出来るので効率的に開発ができる。私はこのテスト方法を使えるようにするために、積極的に関数化をしていると言ってもいい。何時でも何処でもこのテスト方法が適切とは限らないので、選択肢の一つとして捉えていただければと思います。Tumblr関連記事2019-10-21Outlookでメール受信者がローカルパスをクリックできるようにするマクロを作ってみた本ブログ初のOutlook用マクロのご紹介。Part3游ゴシック大嫌いな同志諸君!お久しぶりです。今回はオートフィルタの設定範囲から任意の列のデータ部のRange...www.excel-chunchun.com週1回の更新を目指して活動中です。ヶ月)私がExcelを使っていて気になったことを記事に書いていきます。VBAを使い初めて、もう10年ほど経ちましたが、楽しくて楽しくて毎日自宅でもVBA書いてます。自作PCとかサーバー立てたりするのも好きなのでPCとかサーバーのことも書くかもしれません。記事の元ネタは主にTwitterの方で呟いてますので、最速で情報を仕入れたい方は是非フォローしてください。part12019-11-12SpecialFoldersの引数にString型変数を指定すると意図した通りに動かない2019-11-03ワークシート用ユーザー定義関数は使い方を誤ると危険である2019-10-28VBAのコメントの書き方の試行錯誤2019-10-27VBAでの広域コメントアウトの代替案2019-10-26VBAで戻り値のある複数シートをコピーする関数を作ってみた2019-10-22Outlookでメール受信者がローカルパスをクリックできるようにUNCパス化するマクロを作ってみた2019-10-21Outlookでメール受信者がローカルパスをクリックできるようにするマクロを作ってみた2019-10-20VBAでWin32APIの64bit対応自動変換プログラムを作ってみた2019-10-06ワークシート用ユーザー定義関数を揮発性にする方法2019-10-04VBAによる安定したワークシート用ユーザー定義関数の作り方2019-10-02VBA関数のライブラリ名やモジュール名の省略を検知するアイディア2019-09-29EnumWindowsを使って別プロセスのExcelを取得してみた2019-09-24エクセルマクロで野生のマグロを駆逐するミニゲームを作ってみた2019-09-19VBAでIIF関数が全ての項を評価してしまうのは当然である2019-09-16VBAの裏技?コロンで好きな位置にブレークポイントを設置する2019-09-15VBAのStopとDebug.Assertステートメントの違い2019-09-13VBAのInStr関数の不思議な挙動について調べてみた2019-09-08VBAで文字列中の文字をカウントする関数を作ってみた2019-08-31VBAで環境に依存しないWindowsMediaPlayerの使い方もっと見る最新記事(ハードウェア)2019-10-31Realforceを買ってみた。TS-932X-2Gを購入しました。広告プライバシーポリシースターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。