Excelで自分だけのオリジナル関数を作ろう!(その2)

Excel VBA Tips集-4

はじめに

前回「ワークシートで使えるオリジナル関数を作るには(その1)」では与えられた数値を2倍するだけのシンプルなオリジナル関数を作成しました。「そんなん*2すればええやん!」って感じの原始的なMy関数です。

今回は、ワークシート全体を対象に任意の値を検索して、その値が入っているセルの番地を返す関数を作ろうと思います。

オリジナル関数の作り方

ワークシートで普通に使えるオリジナル関数はSubプロシージャーではなくFunctionプロシージャーで作ります。文法は以下の通りです。

Functionプロシージャーの文法

Function 関数名(引数 As データ型) As 戻り値のデータ型

    処理

    関数名 = 戻り値

End Function

関数は引数を受け取って、その値を加工し、戻り値という形で処理結果を出力します。例えば、SUM関数は引数に複数の数値を受け取り、それらを合計した値を戻り値として返します。

今回作るオリジナル関数

今回、作成する関数が受け取るのは、数値や文字列です。戻り値として返すのは、受け取った数値や文字列が入力されているセルの番地です。それでは早速サンプルコードを見てみましょう。

引数「data」をString型で定義し、戻り値のデータ型もString型にしています。引数をString型にしても数値を引数として受け取ることができます。

検索結果はRangeオブジェクト(セルを表すオブジェクト)なので、それを格納する変数として「foundCell」をrange型で宣言しています。

Cells.Find(What:=探したい値)と書くことで探したい値が入力されているセル(Rangeオブジェクト)が返ってきます。もし、探している値がワークシート上に存在しなければNothingという特殊なオブジェクトが返ってきます。Nothingはいわば空っぽのオブジェクトですね。

If foundCell Is Nothing Then」という部分がポイントです。「Is演算子」は比較演算子の一種で、2つのオブジェクトを比較して、同じならばTrueを、異なればFalseを返します。

変数「foundCell」には「Rangeオブジェクト」か若しくは、検索した結果、シートの中にお目当ての値が無い場合「Nothing」が入ります。そこで、変数foundCellNothingIs演算子で比較し、もしfoundCellの中身がNothingならば、検索した結果、該当の値は無かった旨をメッセージボックスで通知します。

逆にfoundCellになんらかのRangeオブジェクトが格納されていれば、そのセルが探している値の入っているセルなので、Addressプロパティを指定して、セルの番地を求めます。

後は、「関数名=戻り値」という文法に従って、セルの番地を返します。

ちなみに関数名はSerchのSで、S関数としました。酷い命名センスですがお許し下さい。また、このS関数。実戦では使い物にならないポンコツ関数ではありますが、その点もどうかご容赦いただければと思います(汗)。

実行結果

関連項目

 

使える!逆引きExcel VBA Tips集TOPに戻る

 

[AD]自分のペースでゆったり学ぶ Excel VBA

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA