当ブログでも以前書評を書いた「Excel VBAの神様 ボクの人生を変えてくれた人」の著者である大村あつし氏は、Amazonの作品一覧を見ても分かる通り、数多くのVBA参考書籍(以下VBA本)を執筆されています。
数ある著書の中で最も有名なのは「かんたんプログラミング」シリーズだと思いますが、最も高額な値段がついているプレミアム本といえば、何と言っても「Excel VBAによるWin32 APIプログラミング入門」です。
本書はVBA本であまり扱われることのないWin32 APIに焦点をあてたもので、2016年1月時点でも約1万円(定価2,894円)で売られています。
(以前はもっと高値で取引されていたものなので、これでも安く感じられます。)
もちろん、VBA本マニア(嘘)な私も本書を所持しています。
(私が購入したときは1万円もしていなかったと思いますが、いくらで買ったのかまでは覚えていません・・・。)
Excel VBAでラクラク Win64 APIプログラミング
Win32 APIを中心に扱っているVBA本は、2016年現在でも大村氏の著書以外では全くと言っていいほど見かけないわけですが、先日大村氏のツイートで64ビット版のAPI、Win64 APIに対応させた書籍が販売開始されたことを知りました。
『Excel VBAでラクラクWin64 APIプログラミング』の販売が開始になりました。 https://t.co/lzhhZtzolL Amazonで2万円(時に10万円)で取引されていた自著を元に、完全にWin64 API対応させました。VBAの総仕上げにどうぞ!
— 大村あつし (@ash_omurah) 2016, 1月 12
販売価格は税込み4,800円、先述の「Excel VBAによるWin32 APIプログラミング入門」の半額で購入することができます。
これは買わざるを得ない!
アフィリエイトでよく目にするインフォトップというのが実に不安にさせてくれますが、本を出しているのは大村氏なのできっと大丈夫でしょう!!
・・・というわけで、さっそく買ってきました。
購入方法はいたってシンプルで、インフォトップの購入画面から各情報を入力し、決済をするだけです。
支払方法は、クレジット、銀行振込・郵便振替、コンビニ決済、BitCashが選べますが、私は手軽なコンビニ決済(手数料別途216円)にしました。
(コンビニ支払い後、すぐに入金確認の連絡が届かなかったのがまた不安にさせてくれましたが、しばらく待っていると無事に連絡が届きました。)
今回販売が開始された「Excel VBAでラクラク Win64 APIプログラミング」は電子書籍となっていて、入金確認が取れると、インフォトップのサイトからZipデータとしてダウンロードすることができます。
このZipファイルの中には、書籍本体となるPDFファイルと、書籍内で紹介されているサンプルコードがExcelファイルとして入っています。
PDFファイルには保護が掛けられていないので、自分で好きなように印刷できるようになっているのは実に嬉しいですね!
紙で読みたい人は自分で製本
電子書籍は文字列検索もでき、手のひらサイズの端末で手軽に読めて便利なのですが、私はどうにも苦手です。
なので本書も製本して読むことにしました。
上の写真が出来上がったもので、近所の印刷屋さんに持っていったら、1,000円程度ですぐに製本してくれました。
(印刷からすべてお願いすると結構な値段になってしまうので、カラー印刷だけは自分でやって、製本だけお願いしています。)
うーん。グレイト!
これで読みやすいです。
内容について
本書は基本的に「Excel VBAによるWin32 APIプログラミング入門」を64ビット化したリニューアル版で、取り扱っている内容もほぼ同じです。
もちろん、64ビット対応ということで、Office 2010で追加された「PtrSafe」キーワードや「LongPtr」型についても取り上げられているのですが、読んでいて気になる点がちらほらと・・・。
たとえば、p.58の上の方には、
C言語では、引数「lpBuffer」のデータ型は「LPTSTR」で宣言されていますが、VBAにはそのようなデータ型はありません。そこで、String型に変換して宣言しています。同様に、データ型「UNIT」はLong型に変換されています。
とあるのですが、そのすぐ下では、
GetWindowsDirectory 関数は「UNIT」のデータ型を返すことがC言語の宣言書式からわかります。そこで、「Function GetWindowsDirectory」の戻り値のデータ型をVBAのLongPtr型に変換しています。
となっています。
p.61にある、C言語とVBAのデータ型の対応一覧表も
HWND、HDC、HMENU などの Windowsのハンドル:Long
となっていたり、Declare宣言で戻り値の型をLongPtrにしているにも関わらず、Long型の変数で受けていたりと、LongPtrにしなくて良いところをLongPtrにし、逆にLongPtrにしなくてはいけないところをLongにしている箇所が結構あります。
また、画面のキャプチャーもWindows 10のものがあれば、Windows XPのままになっている部分もあり、Windows 8.1以降いつ廃止されてもおかしくはないGetVersionEx関数が紹介されているなど、Windows 8.1やWindows 10といった現在主流の環境には沿っていないであろう記述も見かけます。
恐らくは、ベースとなった「Excel VBAによるWin32 APIプログラミング入門」の原稿を置換(Long → LongPtr)、部分的に加筆・修正したためにこのような内容となったのだろうと思いますが、読み手としては新旧環境がごちゃごちゃになっているために、混乱してしまうかもしれません。
・・・と言っている私もWindows APIについては不勉強なので、私の認識が誤っているのかもしれません。
(Win64 APIについては資料も少ないしー…。APIあんまり使わないしー…、などと言い訳もしつつ)
おわりに
.NETが普及し、さらにMicrosoft Officeのクロスプラットフォーム化も進んだ今日では、前身となった「Excel VBAによるWin32 APIプログラミング入門」が出版された2002年頃に比べると、VBAからWindows APIを呼び出す機会は減っているだろうと思います。
そんな中登場した本書はとても貴重な一冊だと言えるのですが、個人的には、本書を買うのであれば、むしろ元となっている32ビット版向けの本(このリンクは「Excel VBAによるWin32 APIプログラミング入門」の改訂版電子書籍)を買うことをお薦めします。
2016/2/2 追記:
大村氏のブログによると、32ビット版の電子書籍の販売は終了してしまったようです。
…が、氏のブログにある通り、
“64ビット版の書籍を購入することで32ビット版の書籍を無料で貰える”
とのことです。
32ビット版の書籍を希望される方は、ぜひ氏のブログ記事をご参照ください。
こちらであれば64ビット版のOSやOfficeを意識する必要はないし、そもそも、大抵の人が使っているOfficeは32ビット版であるため、APIの呼び出しもこちらの本の方が参考になるでしょう(古い環境を前提としているので、先述のGetVersionEx関数なども気にならない)。
「いや、私はやっぱり64ビット版のOfficeを使う。そしてAPIをガンガン呼び出したい!」という方は、まずは下記のようなMicrosoftが出している情報を調べることから始めてみてはいかがでしょうか。
(と言っている私もWin64 APIについてはよく知らないので勉強しなくては・・・!)
- 64 ビット版 Office について
- http://blogs.technet.com/b/office_jp/archive/2010/05/05/64-office.aspx
- Microsoft Office の 32 ビット版と 64 ビット版を選択する
- https://support.office.com/ja-jp/article/2dee7807-8f95-4d0c-b5fe-6c6f49b8d261
- Office 2013 の 64 ビット版
- https://technet.microsoft.com/ja-jp/library/ee681792.aspx
- 64 ビット Visual Basic for Applications の概要
- https://msdn.microsoft.com/ja-jp/library/gg264421.aspx
- Office 2010 の 32 ビット バージョンと 64 ビット バージョンとの互換性
- https://msdn.microsoft.com/ja-jp/library/ee691831.aspx
- Declare ステートメント
- https://msdn.microsoft.com/ja-jp/library/gg278581.aspx
- コンパイラ定数
- https://msdn.microsoft.com/ja-jp/library/gg264614.aspx
- このプロジェクトのコードは、64 ビット システムで使用できるように更新する必要があります
- https://msdn.microsoft.com/ja-jp/library/gg251723.aspx
- 64 ビット環境で実行する VBA マクロで明示的に戻り値の型を宣言する必要があります。
- https://support.microsoft.com/ja-jp/kb/2210978
- Office Talk: Working with VBA in the 32-bit and 64-bit Versions of Office 2010
- https://msdn.microsoft.com/ja-jp/library/ff700513.aspx
- Developing Outlook 2010 Solutions for 32-Bit and 64-Bit Systems
- https://msdn.microsoft.com/ja-jp/library/gg549122.aspx
- Office 2010 Help Files: Win32API_PtrSafe with 64-bit Support
- https://www.microsoft.com/en-us/download/details.aspx?id=9970
この記事へのコメントはありません。