マクロに汎用性を持たせるためには、設定値を簡単に変更できることが必要だ。
たとえば大量のExcelファイルを読み取って結果を一覧として保存するようなマクロの場合は、読み取りパスをどこかに保存しておけば毎回ダイアログから選ばせる必要がないし、Excelの一覧表から個別のExcelシートに転記していくような場合はその出力フォルダのパスを保存しておくと利用する方は楽だ。
ところでその設定をどこに保存するかというのが今回のテーマである。
下表のように、保存場所によってそれぞれメリット、デメリットがある。
保存場所 | 編集の容易さ | 可搬性 | 更新対応 | 実装の容易さ |
シート | ◎ | ◎ | × | △ |
外部ファイル | △ | △ | ○ | ○ |
レジストリ | × | × | ◎ | ○ |
コード内 | × | ◎ | × | ◎ |
この評価は私の個人的な所感であるが、それぞれの評価基準について以下で解説する。
編集の容易さ
これは利用者が設定を変更するのが簡単かどうかである。
シートなら慣れたExcel上で簡単に書き換えられる。外部ファイルでもテキストなどの簡単な形式ならなんとかできるがXMLファイルなどになるとある程度の知識が要求される。レジストリになると、専用のUIでもなければ設定変更は難しく、コード内の定数などになるとマクロの編集が必要になる。
可搬性
これは、そのファイルを設定ごと持ち運べるかである。レジストリは基本的にそのユーザーに保管されるので、別のPCへの移動が難しい。また、外部ファイルにするとExcelファイルとの相対パスを維持する必要があるので面倒である。
更新対応
バージョンアップしたマクロを配布したときに、設定が残るか消えるかである。
実装の容易さ
マクロを作る側が実装する際の難易度である。
ここでなぜシートが△なのか疑問に思われたかもしれないが、シートに設定を保存するには色々悩みがつきまとう。たとえば後から行を1つ挿入すると、設定が保管されているセルがズレてしまうし、ユーザーによってシート名が書き換えられたり、シートの順番が変わったりすることもある。
プログラマー自身が、新しい設定値を特定箇所に挿入したくなることもある。
その点、外部ファイルやレジストリは基本的にプログラマーが意図したとおりに値を取り出すことができるので、悩みは少ない。
まとめ
設定の保存方法は色々あるが、一長一短なので「私はこれ」と決めずにどの方法もしっかりマスターして使い分けられるようになるのが良いと言える。