「学問のすすめ」みないな。
Excelの標準モジュールに作った関数は、セルの中で使える。
ユーザー定義関数(自分で作る関数)を作るためには以下の知識が必要です。
- プロシージャが書ける
- 引数が使え、型を知っている
- セルの処理、Range,Cells、Offsetが使える
- WorksheetFunction関数、VBA関数がある程度使える
- 条件分岐、繰り返し処理ができる。
- 条件式が書ける
SUMIFやVLOOKUPなどのワークシート関数(Excel/エクセルに組み込まれている関数)は、何かやりたいことがあって使うのだが、自分が作ったわけではないので処理内容を確認しながら進める。以下の手順でワークシート関数を使う。
- 使えそうなワークシート関数を探す
- 使い方をチェック、期待する処理ができるか確認する。調査能力がアップするだけでプログラム力では無い。
一方、自分で関数を作ることができれば以下の手順で関数を作る。
- 入力と出力を決める。入力は引数でセルか値を渡す。出力はFunctionプロシージャの戻り値。
- 処理手順を標準モジュールに書いてFunctionプロシージャを作る
「???ができるワークシート関数はどれかな?」って探すのではなく、自分で作るので自作関数とかカスタム関数、ユーザー定義関数とか言う。
(プログラムする)利点
- セルの中に長い式を書かなくていい。最重要!
- 処理内容がコードにとして見える
- VBA学習のスタート課題として使える。これで力を付ける。
- VLOOKUP関数など複雑なワークシート関数の使い方を覚えなくていいし、ユーザー定義関数/自作関数の作成はスキルアップになる。作れば作るほど技能がアップする。
(プログラムする)欠点としては、プログラムやVBA関数を知らない人には読めない、修正、引き継ぎが出来ない点。「他の人が修正できないが!」というクレーム。
再計算の対象にするためユーザー定義関数内にApplication.Volatileを挿入する必要がある。一般的に動作が遅くなると言われるが更新されないクレーム回避策になる。
一般的なExcel使いの人の意見でスキルを止めてはいけない。使いやすい関数を提供してあげえればいい。
一般的に、INDEXやVLOOKUPなどを組み合わせるような式は読みにくい。メンテナンスする点からも、「引き継ぎ」に関して大抵は引き継げるほど簡素では無いはずだ。Excelのセルの中のコードを読むのって難しい。じゃない?
比較的簡単でセルの中を見れば処理内容が分かる程度ならExcelのワークシート関数を使う。どちらを使うかの判断は、「どちらが読みやすいか」だが、練習の場合は単純でもユーザー定義関数を作ればいい。