« 以下に携帯RSSリーダーに関する愚見を述べる | Main | システム最適化RPGというジャンルを考えてみた »

2007.04.16

気の利いたExcelマクロの作り方

一時期、Excelのマクロ(VBA)はウィルスの温床みたいに言われていたが、信頼できる配布元であれば、実に強力で、かつスピーディに作れるため、このところ多用し始めている。

しかし、スピーディに作れるからといって手を抜きすぎると、知らない人が使う時に面倒な事になる(いきなりスクリプトの編集画面が出てパニックを起こす)ので、押さえておくべき要所をメモしておく。

1.シートに使い方が載っている

最近はツールメニューから選んでいるスクリーンショットを貼り付けている。使い方を書いたシートは枠線を消しておくと表計算っぽくなくてポイント高い。

2.長くかかる処理はステータスバーに進捗を表示する。

C言語などで作れば一瞬で終わる処理もExcelの手にかかると、まるでフリーズしたかのような様相を呈する。これについては、

 Application.StatusBar = "第1段階 作業中"

などと1行書いておくだけで、とりあえず安心できる。ただしマクロの最後に

 Application.StatusBar = false

と書いておかないと、ステータスバーが元に戻らなくなるので注意。

なお最後にfalseではなく、処理時間を表示すると、特大ファイルを処理するのを思いとどまってくれるという効果を期待できる。(しばらくステータスバーが元に戻らないが)

 StartTime = Timer
 '''処理'''
 FinishTime = Timer
 MsgBox "処理時間:" & ((StartTime - FinishTime) Mod 3600) & "秒"

3.エラー処理している。できれば、フォーマットのチェックする別マクロを用意する

別のファイルを処理するマクロというのが、多分、最も需要があるのだと思うが、たまにとんでもない形式のファイルを処理させようとしている方々に遭遇する。そういうときに適切なメッセージを送らないとスクリプトの編集画面が出てきてパニックを起こすので、せめてOnError Go Toは必須にしておく。

詳細はこちらのURLで。

http://support.microsoft.com/kb/213637/ja?spid=1741&sid=361

4.定数や動作条件はシート上で設定する

これは最近、思いついた。

それまで、ソース上にdebug=trueとか書いていたがExcelの場合、シート上の値を拾ってこれるので、シートで説明つきで定数を定義する。

動作条件についてはInputBoxなどで選択できるようにしてもいいかもしれないが、Excelのマクロで前回の処理内容を記憶させて、というのは大技の部類に入ると思うので(よく知らないけど・・・)、シートをiniファイルっぽく使うのが楽な気がする。1のテクニックとあわせてもよい。

5.印刷プレビューで終了

これも最近、思いついた。

処理終了後にMsgbox("終了しました")っていうのは、よく見るが、マクロ終了後に必ず印刷するようであれば、印刷プレビューまでマクロで持っていくのが親切だと思う。次の一文を書けばよい。

 ActiveWindow.SelectedSheets.PrintPreview

もちろん、印刷プレビューが不要な場合は、4のテクニックでユーザ自身が設定変更できるようにする。

--

あと、いろいろあった気がするが、また別の機会に。

--

そういえば、おすすめの本って、ないんだよなぁ。。。

|

« 以下に携帯RSSリーダーに関する愚見を述べる | Main | システム最適化RPGというジャンルを考えてみた »

Excel」カテゴリの記事

Comments

Post a comment



(Not displayed with comment.)


Comments are moderated, and will not appear on this weblog until the author has approved them.



TrackBack

TrackBack URL for this entry:
http://app.cocolog-nifty.com/t/trackback/4282/14704177

Listed below are links to weblogs that reference 気の利いたExcelマクロの作り方:

« 以下に携帯RSSリーダーに関する愚見を述べる | Main | システム最適化RPGというジャンルを考えてみた »