『パーフェクト Excel VBA』を読んだので書評を書いてみました。仕事で Microsoft テクノロジを使用するので、Excel VBA を学ぶいい機会だと思い勉強してみました。プログラミング経験者にオススメの本です。
第1章 イントロダクション
VBA という歴史の長い言語をとりまく環境について説明されています。プログラミング経験者としては、JavaScript を体系的に学ぶときの感覚に近いのかなと思いました。特殊な書き方や仕様が存在している中、Good Parts を選んで使っていくようにしなければならない言語という感覚です。
この章を読んだら、Excel VBA でどんなことができるのかを知るために、名簿管理ツールを開発するチュートリアルになっている「第14章 アプリケーション開発」を読むことをオススメします。ただし、macOS の Excel 2019 for Mac (Version 16.41) では、ユーザーフォームが使用できなかったため、チュートリアルを完遂できませんでした。Windows の Excel を使用してチュートリアルに挑戦してみてください。
第2章 式と値
一般的なプログラミング言語の入門書と同様に式と値から始まります。このあたりはプログラミング経験があれば流し読みするだけで十分な内容です。
基本的に静的型付けですが、バリアント型は動的型付けになります。型推論してくれるわけではないので、バリアント型は避けるのがよさそうです。変数宣言と代入が同時にできないので、ちょっと書き方は冗長になりますね。With ステートメントが多用されるのはそれゆえでしょうか。
第3章 ステートメント
ステートメントの章では、スコープや識別子、変数、定数、配列などが説明されています。
対象によってデフォルトスコープが異なってくるので、Private や Public は明示した方がよさそうです。
識別子は大文字小文字を区別しません。VBE は、大文字で宣言済みの識別子はすべて大文字に、小文字で宣言済みの識別子はすべて小文字に変換してしまいます。Person クラスのインスタンス変数に person という識別子を使用すると、VBE が Person に変換してしまいます。本書では、my をプレフィックスとして付与したり、頭文字1文字にしたりすることで回避しているようです。どちらも個人的には好みではないので、_ をポストフィックスとして付与することで回避することにしました。なお、VBA の仕様上、識別子のプレフィックスに _ は使用できません。
第4章 フロー制御ステートメント
フロー制御ステートメントの章では、一般的なフロー制御に使用されるステートメントが説明されています。
特徴的なのはエラー処理でしょうか。エラー処理は例外っぽいものかなとも思ったのですが、例外とは少し違う機能のようです。エラー処理が必要なところで使いながらベストプラクティスを模索していくことになりそうです。
With ステートメントは本書で多用されています。「第14章 アプリケーション開発」でも With ステートメントが多用されており、かなりの数の With と End With を記述することになります。個人的な感覚としては、With ステートメントはネストが深くなり可読性があまり良くない気がしているので、個人的なコードを書くときは避けようかと思いました。
第5章 プロシージャ
プロシージャの章では、Sub プロシージャや Function プロシージャ、Property プロシージャ、引数の構文などについて説明されています。
プロシージャにはいくつか種類がある中で、呼び出し方にも独特な規則があり、中々悩ましい構文です。
また、引数も参照渡しがデフォルトということで、毎回 ByVal と付与するかどうか考えてしまいます。個人的なコードを書くときには、引数は読み取り専用で使用するので、面倒だから付与しなくてもいいかなと思ってしまいます。
第6章 モジュール
モジュールの章では、標準モジュールやシートモジュール、ブックモジュール、ユーザーフォーム、クラスモジュールなどについて説明されています。種類が多くて混乱します。
オブジェクト指向プログラミングにおけるクラスとして使用できるクラスモジュールがあります。ただ、本書で継承については説明されていません。Implements ステートメントで継承に相当する機能が実現できるようです。
第7章 プロジェクトとライブラリ
プロジェクトとライブラリの章では、プロジェクトやアドイン、ライブラリなどについて説明されています。特殊に感じるところもありますが、頻繁に設定するものではないので、実際にプロジェクトを設定したり、ライブラリを追加したりするときに本章を読み返すのがよさそうです。
第8章 VBA ライブラリその1
VBA ライブラリの VBA 関数についての章です。VBA 関数は、VBA ライブラリの標準モジュールに含まれる Function プロシージャや Property プロシージャで、戻り値を持つもののことだそうです。VBA 関数リファレンスという雰囲気の章なので、流し読みして必要に応じて本章を開きましょう。
第9章 VBA ライブラリその2
VBA ライブラリのクラスについての章です。VBA ライブラリには、Collection クラスと ErrObject クラスが含まれています。コレクションとエラーの章とも言えます。
コレクションは VBA を活用する上で重要な機能だと思います。Java や C# を書いているとコレクションを多用するので、VBA でコードを書くときもコレクションを多用することになりそうです。自作コレクションを作成する手順が非常に独特なので、自作コレクションを作成するときは本章を眺めながら進めるのがよさそうです。
エラーは例外のように使用できそうです。On Error GoTo Rescue というようなステートメントをエラーが発生しうるコードの直前で記述し、Rescue ラベルのある行からエラー処理を実行できます。Ruby におけるメソッドレベルの rescue っぽくなりますね。エラー定数などをどこかにまとめて宣言しておくといいのでしょうか。そのあたりについては、まだよい使い方がわかりません。
第10章 配列の操作
VBA ライブラリに含まれない標準機能である配列を操作する関数についての章です。特殊な存在であることを除けば一般的なリファレンスの章なので、流し読みして必要に応じて本章を開きましょう。
第11章 Excel ライブラリ
Excel を操作する Excel ライブラリの章です。Excel VBA を使用する主目的は Excel の操作だと思うので重要な章ではありますが、リファレンスとして使用するのがいいと思うので、流し読みして必要に応じて本章を開きましょう。
第12章 MSForms ライブラリ
ユーザーフォームとコントロールを作成するための MSForms ライブラリの章です。ユーザーが入力できるフォームを簡単に作成できます。Excel VBA が人気なのは、この機能があるからなのではないかと思うくらい強力な機能です。ただし、macOS の Excel 2019 for Mac (Version 16.41) では使用できませんでした。Enable VBA Support for creating and editing UserForms (not the Data Form) にコメントがたくさん付いているように、Excel for Mac での対応も熱望されているようです。
第13章 Scripting ライブラリ
ファイルシステムと辞書を操作する Scripting ライブラリの章です。リファレンスとして使用するのがいいと思うので、流し読みして必要に応じて本章を開きましょう。
第14章 アプリケーション開発
Excel VBA で名簿管理ツールを作成するチュートリアルの章です。Excel VBA で何ができるのかを知ることができるので、通読して最後にやるよりも、第1章を読んだら一度やってみるといいのではないかと思います。繰り返しになりますが、macOS の Excel 2019 for Mac (Version 16.41) では、ユーザーフォームが使用できなかったため、チュートリアルを完遂できませんでした。Windows の Excel を使用してチュートリアルに挑戦してみてください。
『パーフェクト Excel VBA』は、プログラミング経験者が体系的に Excel VBA を学ぶときに最適な一冊でした。また、ある程度 Excel VBA を使いこなしている人にも読んでいただきたい内容になっていました。歴史のある VBA はクセの強い言語に感じられることも多かったのですが、社内利用するような簡単なデータ管理アプリケーション開発や業務アプリケーションのプロトタイピングなど Excel VBA が生きる場面は今後も多そうですね。