上級者を目指す人へおすすめ「ExcelVBA実戦のための技術」
「入門レベルでは決して足りない実務に必須のスキルとは ExcelVBA 実戦のための技術」という書籍を拝読しました。いや~~、すごかったです! 物理的にも厚いのですが熱量もアツイです! 読んでよかった!!
ExcelVBAで上級者を目指すのなら
こちらの本は、VBA関連の書籍を多く出版されている沢内晴彦さんの著書です。
なんと456ページ! 辞書ー! でも12章に分かれていて各章は独立しているので、知りたい部分を重点的に読むだけでもかなり活用できると思います。大ベテランの方が執筆されているので、ほんとうに細かい部分まで緻密に書かれていて唸るしかありませんでした。
各所で「3年目の新人プラグラマー村田くん(25)」と「ベテラン指導員早川さん(48)」が会話をしながら進んでくのですが、わ、わたし…軽く10年もやってるのに、村田くんとほぼ似たようなリアクションでしたよ!? 早川さんの指導の的確さと言ったら!!!
早川さん「これはどう?」
村田くん「知ってます! こうですよね!(得意気)」
早川さん「じゃあそれのココの意味は?」
村田くん「アッ、わかりません……、」
こんな感じ…。私、完全に村田くんに感情移入してた…。もう村田(25)って名乗りたい……。
まがりなりにも自著がある人間なのに大丈夫か!? と心配になってたのですが読み進めるうちに知ってる部分も出てきてちょっとホッとしました。知識に偏りがある…! というか、私は完全に独学でやってきて、自分でできる範囲のことをがんばって勉強はしてきたつもりだけど、ちゃんとした「指導」を受けたことはないんだ、ということを痛感しました。
逆に言えば、この本を読んだことで、今まで独学、手探り、そのような状態で頑張ってきたものに対して、「コードレビューをしてもらった」「チームプログラミングのノウハウを教えてもらえた」みたいな「指導してもらえた!」感覚があります。満足度が高い…。
内容のレベルとしては難しい部類だと思うので、対象読者は「自力でコーディングして目的のものを作ることができる」というスキルが前提かなと。そこからさらに、コードの保守性・メンテナンス性を上げたいとか、チームで共有したいとか、プログラマとして他の言語でも活躍したいとか、ステップアップしたい方にはぜひおすすめできる本だと思います。
内容紹介
それでは、ちょこっと中身を覗きながらご紹介します。
写真は許可を得て掲載させていただいております。
Chapter1 実務の場面でこそ絶対に必要な「VBAの基本」とは
村田くん(25)の勢いが可愛いんですけど、実際のところ、VBAは「すごくかんたんに始められる!」メリットが大きいので、「詳しいことを知らなくても動くものが作れる!」というレベルのままになってしまうケースはとても多いと思うんですよね、自戒もこめて。
そんなヌルさを第1章からするどく切り込む、かなり硬派な走り出しです。
Chapter2 「構文」についての理解を実務レベルにまで引き上げる
制御構文や命名規則、データ型などのお話。私もVariantはあんまり使わないほうがいいものなのかな、と思っていたのですが、早川さんが「Excelはセルになんでも入っちゃうから、Variantを上手に使おう」と仰ってて、なるほどー! と思いました。
それから、組み込み定数でvbから始まるのはVBA共通、xlから始まるのはExcelVBA独自など、知らずに使ってたなぁってことがたくさん…。すごい……。
Chapter3 「ワークシートとセル」を、とことん効率的に扱うために
私「えっ、そうじゃないんですか?」 完全に村田(25)状態である…。
この章は本当に、ふだん何気なく使ってるからこそ「そこまで知らなかった!」ということだらけで。SheetとWorksheetsの違いとか…!(お恥ずかしい) 省略されてるプロパティを知っていると良いとか、表を高速に処理する配列の具体的な使い方とか、すんごいためになることばかりでした!
Chapter4 複数処理を前提とした「ブック」の操作を極める
ActiveWorkBookとか、曖昧なもののまま使わずにきちんとオブジェクト変数に入れるといいですよね! この章はなんとか村田くんにならずに頷いて読めました!! 私も最初の頃はActive~って使ってたこともあったんですが、開くと同時に変数に入れちゃえればそっちのほうがめちゃくちゃ便利だし可読性もぜんぜん違う! あるあるです。
サンプルコードもたくさん載ってるんですが、ファイルサーバー上のブックが開かれてるか確認するコードがものすごくスマート!! 勉強になります…!
Chapter5 「VBA関数」には工夫の余地が多々あるが、使うことにこだわってはダメ
か、関数のオーバーライドもどき!? すっっごい!! 複数の値を返す関数!? そんなことが?? えっ正規表現って使えるの?? と、驚きの連続でした…。自作関数のOptionalも、知ってはいたけどここまで具体的に解説してくれてるのはすごい…。
それと個人的に驚いたのがMsgBoxの引数の仕組み…、引数の使い方は知ってても仕組みを考えたことはなかったです……ビット演算……
Chapter6 「図形とグラフ」の操作は可読性とメンテナンス性が鍵
Shapesのあたり! ふわっとして曖昧に使ってたあたり!! シートやセルのほうでRangeってあるのにShapeRangeとかShapes.RangeとかChartObjectとかChartとか似た名前のものがたくさんあるんですよね!! そのあたりの違いを細かく解説してくださっていて、本当に本当にありがたい…図形のオブジェクト名の挙動とか! 知らなかった!!
あと、この章の最後に「可読性・メンテナンス性の高いコードを書くには」という節があって、ここはもうVBAにさわったときから読みたかった。10年前に戻りたい。村田くん(25)になりたい。ホントならすべての初学者はここから入ってほしい。
Chapter7 「印刷・ページ設定」にこそVBAが必要、という視点を持つ
プログラムを組む人間が機能を知らないでいてどうする、という早川さんのお言葉カッコイイ…!
データ管理は表で、印刷は帳票に転記して、というデータベース的な考え方のスタイル、よくやってます。Excelは自由度が高いからなんでもできちゃうのが逆に足をひっぱる要素になってしまうんですよね。それでも帳票のシートに変更が加わったときのために、参照用のワークシートを用意するとか!! これは素晴らしい、目からウロコでした…!
Chapter8 「ExcelとAccessの連携」: 様々なデータを柔軟かつ効率的に取得する
これは私、著書がある手前、わからないとは言えない章だぞ…! (゚A゚;)ゴクリ
「事前バインディング」「実行時バインディング」のお話は、私も過去にブログで書いたことがあって、しかしそれ以上に詳しく、切り替えの具体的な方法まで載ってるので大感激! SQLやトランザクションについてもしっかり載ってます!
Chapter9 可読性と開発効率を跳ね上げる「クラスモジュール」の活用
クラスモジューーール!! アツイ!! 私もこんな記事を書いておりますが、本当にExcelVBAでクラスモジュールの情報って少ないと思ってるんです。こんなにしっかり解説してある書籍は本当に珍しいと思います! ありがたい…!!
検索機能を持たせることもできるみたいで、もう一度勉強しなおさなきゃ。
Chapter10 ユーザー視点のプログラムに仕上がるかどうかは「イベント処理」の使い方次第
イベント処理って正直なところユーザーフォームばかり使っていて、シートやブックのイベントってほとんど使って来てなくて…また村田状態……、似たような名前のイベントの違いとかが細かく解説してあってめちゃめちゃ助かります!
それとこの章で興奮したのがRaiseEvent!! こんなのがあるんだすごい!! エラーを起こせるっていうのは知ってたんですが、イベントも自分で起こせるんですね…。
Chapter11 「ユーザーインタフェース」で実務レベルの使いやすさを実現させるための作法
ユーザーフォームの利便性についてや、ワークシートをユーザーインターフェースにする事例など。私の会社では後者が結構あるので、頷きながら読めました。ユーザーのレベルにもよると思うのですが、フォーム出すと構えちゃうオジサマがいらっしゃるのですよね。それにしても早川さんのレビューするどいいいいフゥゥゥゥ! 行列の挿入対策にセル範囲名を使うってのもすごいですね! いやー、思いつかなかった。
クラスモジュールを使ったコントロールのイベント処理、私も書いたことがありますが、この例も具体的で勉強になります。
Chapter12 エラー処理も含めた「高度なプログラミング」のためのテクニック
エラー処理というよりは例外処理が大事だと。実際行いたい処理のコードよりも例外処理のほうが多くてもあたりまえ。なるほどたしかに…。また、エラーを故意に発生させて制御することでコードがスッキリしたり!
他にもテキストの扱い、セキュリティやWinAPIにまで言及があって、ものすごく広範囲にまでカバーしていらっしゃるなぁと。テキストファイルの話、私は仕事では少なめの件数を毎日数回取り込み、みたいな処理を作ることが多くて速度って実はあまり気にしたことがなくて…でも何万件みたいなのを一発でって思ったら、しっかり考えとかないとダメなんだなぁ。
おわりに
非常に、ひじょうーーに、内容が濃くて深くて勉強のしがいがある1冊でした。
VBAって、なかなか誰かに指導してもらうことって少ないんじゃないかと思います。たいていは独学で、自分の仕事がちょっとでも時間短縮できればいいなというところから始める人も多いでしょうし。
きちんとしたコーディングルールに則った書き方を知らなくたって、プログラマとしての実務経験がなくたって、それでも自分の仕事を楽にする使い捨てのコードを書く程度なら、十分だったりするんです。
私が勝手に師と仰いでいるthomさんもこんな記事を書かれておりますが、
私は、ノンプログラマーが自分の仕事を遂行するのに十分だと判断した結果、初級レベルに留まることは悪い判断だとは思わない。
しかしVBAの場合は少し状況が異なる。上のフロアが存在し、行きたい人間がいるのに階段が無い。そういう状況に思えた。
VBAという言語は、確かに古い言語にカテゴライズされるかもしれないけれど、需要はまだまだあるし、もっと上手な使い方、使われ方があるはず、と私も思っています。それを求める人間にはとても良い書籍でした。
どうしても、他言語と比べるとVBAプログラマって馬鹿にされがちで、そういった風潮に私もだいぶ心を痛めていました。私はVBAが好きですし、これからもこの言語でお仕事をしていきたいので、もっともっと使い方を勉強して、少しでもネガティブなイメージを払拭することができたらいいな、と思っています。
ExcelVBAにおけるコーディングルールとか、デザインパターンの考察(MVCとか他にも適したのがあるとか)とかそういうの、自分でもぐるぐる考えたりしてはいるのですが、有識者の指針的な書籍とかもこれから出てきたらいいなぁー!
ExcelVBAに興味をお持ちの方は、こちらの記事もどうぞ!
- これからExcelのマクロを始めたいという方に!簡単な練習問題作りました。
- 私がExcelVBAでよく使う便利なコード・スニペットまとめ
- プログラム初心者さんへ贈る、エラーが起きたら試してみて欲しいこと
- ExcelVBAのクラスモジュールって何?という人向けの使い方まとめ
書籍を執筆しています。
コメントは承認制ですので、反映までしばらくお待ち下さい。(稀にスパムの誤判定にて届かないこともあるようですので、必要な際はお問い合わせからお願い致します。)
YouTubeでQ&Aコンテンツを企画しています
運営しているYouTubeチャンネルで、ご相談やご質問を募集しています。動画のコメントやお問い合わせページからお気軽にご相談をお寄せください。