特殊な計算をよく使うが、そのつど関数や数式を組み合わせて計算するは面倒─。もしそう思うことがあるなら、自分独自の関数を作ってみてはどうだろう。マクロを使うと、オリジナルの関数を簡単に作ることができるのだ。こうしておくと、複雑な計算も、すぐに呼び出して利用できる。

 ここでは、セルに入力されている日付から起算して、「2カ月後の末日」を計算するオリジナル関数「月末日」を作成する(図1)。

図1 マクロを使うと、シートで利用できるオリジナルの関数も作成できる。ここでは、引数で指定した日の「2カ月後の末日」を計算する関数を作成してみよう
図1 マクロを使うと、シートで利用できるオリジナルの関数も作成できる。ここでは、引数で指定した日の「2カ月後の末日」を計算する関数を作成してみよう
[画像のクリックで拡大表示]

関数の書き方は注意が必要、3カ月後の1日の前日を計算

 入力するマクロのコードは図2の通り。通常のマクロとはコードが異なるが、作成方法は同じだ。VBE画面を開き、過去に作成したマクロの下に、コードを入力すればよい。

図2 実際のコードが上図。関数の場合は、通常のマクロとは書き方が異なるので、注意しよう
図2 実際のコードが上図。関数の場合は、通常のマクロとは書き方が異なるので、注意しよう
[画像のクリックで拡大表示]

 オリジナル関数の書き方のポイントは3つ。まずオリジナル関数は、「Sub」ではなく、「Function」で始まる。これに続けて関数名を入力したら、第2のポイント「引数」だ。計算に必要な引数を、カッコの中で指定する。ここでは、変数「起算日」を引数として受け取るので、「起算日 AsRange」と記載する[注]。

 最後のポイントが、計算結果。関数は、必ず計算結果がセルに表示される。そのためには、マクロの中で、「関数名に計算結果を代入する」という式を入れる必要がある(図3)。

図3 関数の場合は、「Function」と「End Function」の間に計算内容を書く。シートの関数式から受け取る引数は、関数名に続くカッコの中で、変数名とデータ形式で指定する。最終的な計算結果を、「=」を使い関数名に代入するという式を入れる必要もある
図3 関数の場合は、「Function」と「End Function」の間に計算内容を書く。シートの関数式から受け取る引数は、関数名に続くカッコの中で、変数名とデータ形式で指定する。最終的な計算結果を、「=」を使い関数名に代入するという式を入れる必要もある
[画像のクリックで拡大表示]

[注]ここでは、データ形式にセルそのものを表す「Range」型を指定した