エラー表示をしないようにするために、
・ISERROR関数とIF関数を利用する
・条件付き書式を利用する
という2種類の方法をご紹介しました。
VBA(Visual Basic for Applications)のわかる方なら、エラー表示をさせないように、ワークシート関数をラップしたユーザー定義関数を作成するというのも有効な方法でしょう。
ワークシート側では通常のワークシート関数を利用するのではなく、エラー表示回避処理の施されたユーザー定義関数を利用するのです。
エラー表示をしないように、というご質問をもっともよくいただくのは、VLOOKUP関数ですのでVLOOKUP関数をラップしたmyVLOOKUPというユーザー定義関数を作成してみます。
Function myVLOOKUP(objKey As Range, objArea As Range, intCol As Integer, Optional blnFlg As Boolean = True) As Variant
Dim vntRet As Variant
vntRet = WorksheetFunction.VLookup(objKey, objArea, intCol, blnFlg)
If IsError(vntRet) Then vntRet = ""
myVLOOKUP = vntRet
End FunctionFunctionステートメントが、引数を4つ取る関係上長くなっていますが、冷静に眺めていただくと並んでいる引数は、ワークシート関数のVLOOKUP関数とまったく同じです。
「Optional blnFlg As Boolean = True」という部分は、第4引数をVLOOKUP関数と同様に省略可能とし、省略された場合は「True」と同様の動作をさせるための記述方法です。
Functionステートメントをこんな風に記述することによって、このmyVLOOKUP関数はワークシート関数のVLOOKUP関数と全く同じように使えるわけです。
実際の処理をしている部分は、
「vntRet = WorksheetFunction.VLookup(objKey, objArea, intCol, blnFlg)」
ですが、やっていることはワークシート関数のVLOOKUP関数に、受け取った引数をそのまま渡して、結果を変数vntRetに入れているだけです。
一番重要なエラー回避の部分が、
「If IsError(vntRet) Then vntRet = ""」
で、
「WorksheetFunction.VLookup(objKey, objArea, intCol, blnFlg)」で受け取った値がエラーなら、変数に空白文字列を代入するという処理です。
以前ご紹介したエラー表示を回避する方法は、IF関数を使う方法にせよ、条件付き書式を利用するにせよ、ワークシート側でこれと同様の処理を行っていたわけです。
ワークシート関数をラップしたユーザー定義関数を作成するという方法は、いつでもおすすめできるというものではないと思いますが、Excelで業務アプリケーションを作成するような場合には、検討に値する一つの方法じゃないかと思います。
もちろん、一つのワークブックの中である部分はここでご紹介したmyVLOOKUP関数を使い、別の箇所では通常のVLOOKUP関数を使うなんてことをしたら混乱するだけですから、VLOOKUP関数は使わずにmyVLOOKUP関数を使うというコーディングルールを徹底する必要があります。
また他の関数でも、エラー表示回避処理の必要なものは基本的にユーザー定義関数にするというルールにした方が恐らく混乱は少ないじゃないかと思います。
- Newer:すべてのプログラムがスクロールしないように
- Older:グリッド線を表示したい
Home » エクセルマクロ・Excel VBAの使い方 » ユーザー定義関数 » エラー表示をしないように