ワークシート関数で限界を感じた時は

Excel を使いこなしていくと「ワークシート関数だけではちと厳しいかな」と限界を感じるときがあると思います。 そんな時は気軽に VBA で関数を作っちゃいましょう。 作った関数はワークシート関数と同様に呼び出すことができます。 VBA 自作関数の書き方と呼び出し方を簡単に説明します。 (Excel 2007 以降を想定しています)

Visual Basic Editor を表示する

以下の手順で Visual Basic Editor を表示します。

  1. Office ボタン (一番左上) から選べる「Excel のオプション」-「基本設定」で「[開発]タブをリボンに表示する」をチェックします。 続いて新たに表示された「開発」タブより「Visual Basic」を選択します。
  2. Visual Basic Editor が起動するので、そこから「挿入」-「標準モジュール」を選びます。

ここまでで以下のように「Module1」が挿入されます。 この Module1 に関数を書いていくことになります。

Visual Basic Editor

関数を書いてみる

VBA の文法等について書き始めると収拾がつかないので、簡単にサンプルコードを書いてみます。 Visual Basic Editor の「Module1 (コード)」ウィンドウに以下のコードを書きます。 単純に 10倍の値を返す関数です。

Function myfunc(m)
  myfunc = m * 10
End Function

VBA function

あとはシートに戻ってワークシート関数と同様に呼び出すだけです。

call the function

簡単ですよね!

おまけ

ちなみに VBA のコードの中からワークシート関数を呼び出すには、以下の形式を使います。

WorksheetFunction.ワークシート関数名

例えば、SUM(A1:A10) と同じことをしたい場合は以下のようになります。

Function sum_a()
  sum_a = WorksheetFunction.Sum(Range("A1:A10"))
End Function

範囲を表すのに Range 関数を使ったりするので、全く同じ感覚で使えるわけではないですが、VBA からワークシート関数を呼べるのは知っておくと良いと思います。 Range とか Cells とか Select とか使い始めるとどんどん VBA にハマっていくわけですが、ハマりたい人はとっかかりとしてこのあたりの記事を読むと良いかと思います。