Office関連

「Excel VBAでラクラク Win64 APIプログラミング」(大村あつし著)レビュー

当ブログでも以前書評を書いた「Excel VBAの神様 ボクの人生を変えてくれた人」の著者である大村あつし氏は、Amazonの作品一覧を見ても分かる通り、数多くのVBA参考書籍(以下VBA本)を執筆されています。

数ある著書の中で最も有名なのは「かんたんプログラミング」シリーズだと思いますが、最も高額な値段がついているプレミアム本といえば、何と言っても「Excel VBAによるWin32 APIプログラミング入門」です。

本書はVBA本であまり扱われることのないWin32 APIに焦点をあてたもので、2016年1月時点でも約1万円(定価2,894円)で売られています。
(以前はもっと高値で取引されていたものなので、これでも安く感じられます。)

ExcelVBA_Win64API_01

もちろん、VBA本マニア(嘘)な私も本書を所持しています。
(私が購入したときは1万円もしていなかったと思いますが、いくらで買ったのかまでは覚えていません・・・。)

ExcelVBA_Win64API_02

Excel VBAでラクラク Win64 APIプログラミング

Win32 APIを中心に扱っているVBA本は、2016年現在でも大村氏の著書以外では全くと言っていいほど見かけないわけですが、先日大村氏のツイートで64ビット版のAPI、Win64 APIに対応させた書籍が販売開始されたことを知りました。

販売価格は税込み4,800円、先述の「Excel VBAによるWin32 APIプログラミング入門」の半額で購入することができます。

これは買わざるを得ない!
アフィリエイトでよく目にするインフォトップというのが実に不安にさせてくれますが、本を出しているのは大村氏なのできっと大丈夫でしょう!!

・・・というわけで、さっそく買ってきました。
購入方法はいたってシンプルで、インフォトップの購入画面から各情報を入力し、決済をするだけです。

支払方法は、クレジット、銀行振込・郵便振替、コンビニ決済、BitCashが選べますが、私は手軽なコンビニ決済(手数料別途216円)にしました。
(コンビニ支払い後、すぐに入金確認の連絡が届かなかったのがまた不安にさせてくれましたが、しばらく待っていると無事に連絡が届きました。)

今回販売が開始された「Excel VBAでラクラク Win64 APIプログラミング」は電子書籍となっていて、入金確認が取れると、インフォトップのサイトからZipデータとしてダウンロードすることができます。

このZipファイルの中には、書籍本体となるPDFファイルと、書籍内で紹介されているサンプルコードがExcelファイルとして入っています。
PDFファイルには保護が掛けられていないので、自分で好きなように印刷できるようになっているのは実に嬉しいですね!

紙で読みたい人は自分で製本

電子書籍は文字列検索もでき、手のひらサイズの端末で手軽に読めて便利なのですが、私はどうにも苦手です。

なので本書も製本して読むことにしました。

ExcelVBA_Win64API_03

ExcelVBA_Win64API_04

上の写真が出来上がったもので、近所の印刷屋さんに持っていったら、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についてはよく知らないので勉強しなくては・・・!)

関連記事

  1. Office関連

    Word 2013では文書にオンライン ビデオを挿入できるようになりました。

    ※ この情報はOffice 2013 カスタマー プレビュー版を元にし…

  2. Office関連

    各スライドに配置されたオートシェイプからテキストを取得するPowerPointマクロ

    各スライドに配置されたオートシェイプからテキストを抜き出す処理を考えて…

  3. Office関連

    Office クリップボードをマクロで操作する(UI Automation)

    以前MSAAを利用してOffice クリップボードを操作するマクロを書…

  4. アイコン一覧

    Office 2013 アイコン一覧(Q)

    ・Office 2013 アイコン一覧 NUM…

  5. Office関連

    メモ帳だけでOutlook用アドインを作ってみる。

    「SharpDevelopでExcel用COMアドインを作成する方法」…

コメント

  • コメント (0)

  • トラックバックは利用できません。

  1. この記事へのコメントはありません。

Time limit is exhausted. Please reload CAPTCHA.

最近の記事

アーカイブ

RapidSSL_SEAL-90x50
PAGE TOP