compactcalendar.rb

David Seah さんという方が考案した「Compact Calendar」という Excel シート型のカレンダーがあって、仕事でサブプロジェクトごとの中長期的なスケジュールを検討するときとかに使ったりして重宝してる。なかなか便利です。

"David Seah - Compact Calendar for 2007"
http://davidseah.com/blog/compact-calendar-for-2007/

"手軽で使い勝手の良いCompact Calendar 2007 (でぃべろっぱーず・さいど)"
http://dev.chrisryu.com/2006/12/compact_calendar_2007_1.html

で、そろそろ 2008 年版のカレンダーが欲しいなーてことで、自動生成するスクリプト書いてみた。これで好きなだけカレンダーが作れます。

http://dishhh.jp/wk/compactcalendar/compactcalendar.zip

一応、これ使って生成した 2008 年版のカレンダーも置いとくのでよろしかったらどうぞ。

http://dishhh.jp/wk/compactcalendar/compactcalendar2008jp.xlt

デザインが自分仕様になってしまってるので、使うなら自分でカスタマイズして使ってみてください。

ちなみに、これと Joel on Software に載ってたスケジュール管理シート*1を組み合わせると Excel で一通りの簡単なタスク管理ができるのでおすすめです。

(12/13 追記:本家の 2008 年版とその日本版もリリースされました)

使い方

うっかり Ruby で書いてしまったので Ruby が必要です。誰か JScript とか VBScript とかに移植してください。無駄にコード量が多いですが Excel の定数定義と休日定義がほとんどなのでたいしたことないです。あと、win32ole 使ってるので Windows 限定です。Cygwin でも動くかもしれないけど試してないのでわかりません。

で、使い方は、次のコマンドを実行します。

> ruby compactcalendar.rb

実行すると「compactcalendar.xlt」というファイルができます。オプションを何も指定しない場合は「現在の月から12ヶ月分」のカレンダーを生成します。

オプションで年や月や何ヶ月分のカレンダーを生成するか等が指定できます。たとえば「2008年4月から3ヶ月分のカレンダー」が欲しい場合は次のように指定します。

> ruby compactcalendar.rb -y 2008 -m 4 -h 3

あとは「--help」オプションの内容とか見て適当に使ってみてください。

ruby compactcalendar.rb [options]
    -o, --output FILENAME
    -m, --month MONTH
    -y, --year YEAR
    -h, --howmany HOW_MANY_MONTH
    -M, --monday-start

参考にした資料

Excel オブジェクト モデルの概要
http://msdn2.microsoft.com/ja-jp/library/wss56bz7(VS.80).aspx

Excel VBA(エクセルマクロ)プログラミング講座&Tips - エクセルスマイル
http://www.happy2-island.com/excelsmile/

Microsoft Excel Constants [Excel 2003 VBA Language Reference]
http://msdn2.microsoft.com/en-us/library/Aa221100(office.11).aspx

Rubyist Magazine - Win32OLE 活用法 【第 2 回】 Excel
http://jp.rubyist.net/magazine/?0004-Win32OLE

休日判定の部分は山本篤さんという方が以前どこかで公開してたカレンダースクリプトのものを一部参考にというかパクりました。

*1:Painless Software Schedules - Joel on Software
http://www.joelonsoftware.com/articles/fog0000000245.html