Home » エクセルマクロ・Excel VBAの使い方 » ユーザー定義関数 » エラー表示をしないように

対象:Excel97, Excel2000, Excel2002, Excel2003

エラー表示をしないようにするために、
ISERROR関数とIF関数を利用する
条件付き書式を利用する
という2種類の方法をご紹介しました。

VBA(Visual Basic for Applications)のわかる方なら、エラー表示をさせないように、ワークシート関数をラップしたユーザー定義関数を作成するというのも有効な方法でしょう。

ワークシート側では通常のワークシート関数を利用するのではなく、エラー表示回避処理の施されたユーザー定義関数を利用するのです。

[スポンサードリンク]

エラー表示をしないように、というご質問をもっともよくいただくのは、VLOOKUP関数ですのでVLOOKUP関数をラップしたmyVLOOKUPというユーザー定義関数を作成してみます。

▼エラー表示を回避する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 Function

Functionステートメントが、引数を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関数を使うというコーディングルールを徹底する必要があります。

また他の関数でも、エラー表示回避処理の必要なものは基本的にユーザー定義関数にするというルールにした方が恐らく混乱は少ないじゃないかと思います。

関連語句
自作関数,エラーの非表示, #N/Aを非表示, #N/Aを表示しない, #DIV/0!を表示しない, #DIV/0!エラー, #DIV0エラー, エクセルのエラー値を非表示に

[スポンサードリンク]

Home » エクセルマクロ・Excel VBAの使い方 » ユーザー定義関数 » エラー表示をしないように

「ユーザー定義関数」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.