※ 下記レビューはあくまでも個人的な感想です。
2015年4月17日に発売された「EXCEL VBA 業務自動化 [ビジテク] 仕事の効率を劇的に上げるノウハウ 2013/2010/2007対応」を早速購入してきました。
作者はExcel MVPであり“動かす会”会長として有名な近田伸矢氏と、同じくExcel MVPであり「やってみよう!Excel VBAで業務改善!」の作者でもある武藤玄氏、そして数々のExcel書籍の著者として知られる早坂清志氏の三名で、本書の概要や目次、サンプルコードは下記ページから見ることができます。
・EXCEL VBA 業務自動化 [ビジテク] 仕事の効率を劇的に上げるノウハウ 2013/2010/2007対応(近田伸矢 早坂清志 武藤玄)
http://www.shoeisha.co.jp/book/detail/9784798139371
読んで良かったと思う点
本書は、Excel、特にVBA界隈では知らない人はいないんじゃないかと思うくらいの豪華な3名による共著です。
タイトルの通り、本書は仕事の効率化に重点が置かれていて、業務でありがちな処理をマクロやExcelの標準機能によって作業効率を上げる、あるいは自動化を行うための手法について解説しています。
上記リンク先の目次にもある通り、OutlookやAccessデータベース(mdb,accdb)との連携、業務におけるユーザーフォームの活用方法など、幅広い内容について取り扱っていて、一見するとマクロ初心者の方には理解しづらいようにも感じますが、「開発」タブの表示方法やVisual Basic Editorの開き方、マクロの実行方法まで解説されているので、全くのマクロ初心者の方が読んでも、ある程度ついていける内容となっています。
(もちろん、VBAマクロに全く触れたことが無い方には、武藤氏の著作「ストーリーで学ぶ Excel VBAと業務改善のポイントがわかる本」の方がお薦めではありますが・・・)
第1章では、業務におけるブックの扱い方の注意点や効率よく作業するためのショートカットキー、VLOOKUP関数の使い方といった、マクロ以外のノウハウが解説されているので、マクロに慣れていない方でも入り込みやすい導入部分と言えます。
第2章からは実践的なVBAマクロの説明が続きますが、掲載されているコードには詳しい解説が付いているので、“じっくり”読めば、コードの各行がどのような役割、動きをするものなのか理解できるだろうと思います。
(解説部分が長くて逆に読みづらく感じる・・・、そんなこともあるわけですが、解説が全く無いよりは良いのではないかと。)
掲載されているサンプルコードは、そのまんま実務で使うことはできないだろうと思いますが、部分的に書き換えたり応用することで、実務に即活かせそうです。
そういった面からも、本書は“業務で日常的にExcelを使っている実務者の方向きの本”だと言えます。
読んで気になった点
本書を読んで、私がまず気になった点は“コーディングスタイルがバラバラになっている点”です。
例えば変数の名づけ方ですが、「Dim a As Object」のように適当な名前になっていたり、「Dim myQT As QueryTable」のように頭に“my”を付ける形になっていたり、「Dim UriageNo As String」のようにローマ字表記になっていたりと、統一されていません。
型にしても、ある章ではVariant型の変数の型が省略されているけれど他の章では省略されていなかったりと、こちらも統一されていません。
これは著者の方が複数人であるため仕方が無いのかもしれませんし、私個人の好みの問題でもありますが、読み手としてはコードの書き方が統一されていた方が読みやすいだろうと思います。
次に気になった点は、上で書いた通り本書は幅広い内容について取り扱っていて、これが本書の良さでもあるのですが、幅広く扱うことによって、逆に説明が手薄になっている部分がある点です。
例えば第3章でExcelからWord文書を読み込むマクロが紹介されているのですが、この部分ではWordのオブジェクトについて詳しい説明が載っていません。
Set ObjWord = CreateObject("Word.Application") 'Wordを起動する ObjWord.Visible = True 'Wordを表示する 'テキスト全文を取得 Set MyRange = ObjDoc.Range(Start:=ObjDoc.Words(1).Start, End:=ObjDoc.Words(ObjDoc.Words.Count).End)
Wordマクロに慣れている方であれば上記程度の説明で問題はありませんが、不慣れな方にとっては上記コードは理解しづらいでしょう(特にExcelとWord、両方に存在している「Range」オブジェクト部分)。
上で書いた通り、サンプルコードの解説は詳しく書かれているのですが、第7章のOutlook操作の部分も含めて、Excelからの他Officeアプリケーション操作部分については説明が足りないように感じます。
そのため、本書はある程度Excel以外のOfficeアプリケーションやVBAマクロを知っている方が読んだ方が理解しやすいでしょう。
重箱の隅をつつく的な何か。
以下はその他雑感です。
- 未使用の変数
- 処理が冗長?
- 親オブジェクトが省略されている。
- 拡張子の取得ができない。
- ファイルの個人情報が残っている。
第3章-03「テキストファイルの任意の行を抽出する」のコードで出てくる変数「MyRtn」、これは使われていないので宣言不要だと思います。
第3章-06「ExcelからWordドキュメントを開く」のコードにおいて、Word文書のテキスト取得部分が
Set MyRange = ObjDoc.Range(Start:=ObjDoc.Words(1).Start, _ End:=ObjDoc.Words(ObjDoc.Words.Count).End)
となっていますが、
Set MyRange = ObjDoc.Range
や
Const wdMainTextStory = 1 Set MyRange = ObjDoc.StoryRanges(wdMainTextStory)
でも事足りたのではないかと思います。
また同じコード内で、
StrText = Replace(MyRange, vbCr, vbLf)
となっていますが、これはMyRange = WordのRangeオブジェクトの既定メンバーである「Text」プロパティが省略されていることが分かっていないと理解しづらいだろうと思います。
本書のサンプルコードの多くは「Range(“E1”)」「Cells(r, 1)」のように、親であるワークシートやブックが省略されています。
省略しないとコードが長くなってしまうので仕方がないのかもしれませんが、「Excel/VBAクリニック 親オブジェクトを省略できない罠」に書かれているような問題もありますし、個人的には省略しない方が好みです。
第3章-04「リネームしながらファイルをコピーする」のコードにおいて、ファイルの拡張子取得分が
kkcs = Mid(OpenFileName, InStrRev(OpenFileName, "."), 5)
となっていますが、拡張子の文字数を決め打ちしてしまっているので、「ODCDATABASEFILE」のような長い拡張子のファイルでは不具合が生じます。
Mid関数を使うのであれば、下記のようにlengthパラメータを省略した方が良いでしょう。
kkcs = Mid(OpenFileName, InStrRev(OpenFileName, "."))
(個人的にはFileSystemObjectオブジェクトのGetExtensionNameメソッドの方が好きですが・・・)
第1章でブックに残されている個人情報を削除する手順が載っていますが、サンプルファイルには、作成者や保存者の氏名が残ったままになっているファイルがあります。
執筆者を判別するためにわざとそうしているのかもしれませんが、これらのファイルプロパティは削除しておいても良かったのではないかと思います。
以上、後半はこまかーーいツッコみが多くなってしまいましたが、上で書いた通り、“本書は実務者の方にはお薦めできる本”です。
大型の書店では取り扱っていると思いますので、気になる方は是非手に取って読んでみてください。
この記事へのコメントはありません。