文字列の抽出と計算 3.VBA:自分だけの関数を作る ①

はじめに

前回は、「正規表現」によるパターンマッチングで、文字を抽出しました。
infoment.hatenablog.com

今回も、前回の内容を改良してみましょう。

今回のテーマ

前回と同じテーマです。
一つのセルに、3桁の数字が3つあります。これらは、半角スペースで区切られています。この数字について、真ん中のグループの和を求めてみましょう。
f:id:Infoment:20180619063141p:plain


ユーザー定義関数

今までのマクロは、行や列のレイアウトが変わると役に立たなくなる場合がありました。そこで対策として、ワークシートで使用できる関数を自作し、行や列の増減に自動で追従する方法を紹介します。

Function Calc2(r As Range) As Long
    Calc2 = Mid(r.Value, 5, 3)
End Function

今までは、
 Sub 名前()
  処理
 End Sub
でした。

今回は、
 Fnuction 名前(引数) as 名前の型
  名前=処理(引数)
 End Function
になっていることに注意してください。

今回、Calc2 という関数を作成するにあたり、( ) の中に「変数 r 」というRange オブジェクトを指定しています。繰り返しになりますが、Range オブジェクトは、一つ以上のセルそのものを扱う際に使用します。

このように、関数に与える変数を「引数(ひきすう)」と言います。引数は複数セットすることが出来るため、複雑な処理を行うことも可能になります。

また逆に、引数を指定せずに作成した場合は、引数によらず同じ値になります。
例)

  • =Today()
  • =Now()
  • =PI()

それでは、作成した関数をワークシートに入力しましょう。

f:id:Infoment:20180628211512p:plain

引数としてセル(この場合はA2)を指定しているため、行や列の増減に追従して「A2」が自動で変化するようになりました。

f:id:Infoment:20180628211848p:plain

おわりに

今回の方法に対する評価(私見)は、以下の通りです。

メリット :

  • 行や列の増減に、自動対応するようになった。

デメリット:

  • 他のブックにコピーした場合、コピー先に同じユーザー定義関数がなければエラーになる。

今まで作成したものと組み合わせることで、さらなる高機能化が可能です。

(おわり)