VBAで関数を扱う場合、あらかじめ用意されている関数と自分で作る関数があります。私の中で大まかに分けると3種類で、ワークシート関数・VBA関数・Function関数になります。それぞれの特徴をまとめて行きたいと思います。
ワークシート関数
- Excelのシート関数を使う
- 一部使用できない関数もある
- Ctrl+Spaceを身に付ける
SUM、COUNT、VLOOKUP等EXCELを代表するシート上でも使われる関数です。全てではありませんが、VBAでも使用する事が出来ます。
ワークシート関数の検索時に覚えておきたいショートカットが「Ctrl+Space」で、覚えておくと非常に便利です。何文字入力してからでも大丈夫ですし、何も入力していない状態からでも使えす。使用する関数が決まったら「Tab」を押すと選択する事ができます。
「WorksheetFunction.」まで入力して「Ctrl+Space」を押すと使用できる関数の一覧を知ることができ、文字列操作や日付の関数はワークシート関数ではなくVBA関数使を用する物が多いです。
Sub ワークシート関数()
Cells(6, 1) = WorksheetFunction.Sum(Range("A1:A5"))
End Sub
注意点として、シート上で行うとエラーで表示される場合があると思いますが、VBAの場合はエラーになると処理が停止してしまいます。
VBA関数
- VBA独自の関数もある
- ワークシート関数と同じ名前でも動作が違う物がある
VBAに最初から備わっている関数です。大文字から小文字への変換や日時操作など様々な種類の物がありますので、自分で関数を作る前に検索しておく方が良いといえます。
ワークシート関数とVBA関数のどちらにも存在している関数もありますので、ややこしい部分もあり、動作も微妙に違ったりしているので、引数をよく確認して使う様にしてみましょう。ちなみに私が最初に混乱していたのは「REPLACE」です。。。
VBA関数の場合は最低限の引数でReplaceを使用するとシート上で使用するSUBSTITUTE関数と同じ動きになります。
Sub REPLACE関数() Range("B2") = WorksheetFunction.Replace(Range("A2"), 1, 1, "a") Range("B3") = Replace(Range("A3"), 1, "a") End Sub
Function関数
- 自作する関数
- ワークシート・VBAにある場合はそちらを優先する
Function関数はワークシート関数とVBA関数で探しても見つからない場合に自分で作る関数と思ってください。プロシージャとして作成しておくと戻り値を返してくれるため、自分なりの計算を繰り返したりする際に使用する事になります。
下の例で行くとfunc1()という自作した関数を呼び出し、計算したfunc1を戻り値としてTotalという変数に代入する流れになっています。
Sub 計算() Dim Total As Long Total = func1() MsgBox Total, Title:="計算結果" End Sub Function func1() As Long func1 = Range("A1") * Range("A2") / Range("A3") '555(戻り値) = 111×10÷2 End Function
まとめ
3種類ある関数をそれぞれ紹介してみました。各々で使い方が異なってきますので、まずは既存の関数があるかどうかを探し、なければ自分で作ってみるのもいいと思います。処理を行うには必須となる物ですので、是非覚えてみてください。
お読みいただきありがとうございました。