仕事で見事にハマったのでメモ。
Excelのマクロを書いていました。「Sydneyに来てまでExcelマクロなんか書いてるのかよww」という野次が飛んできそうではありますが、僕としては使いどころさえ誤らなければExcelというのは素晴らしいツールだと考えています。きっと多くの皆さんもそうお考えですよね?
月の名前
さて、本題。
こちらは当然ながら英語圏ですので、作るシステムも英語が基本です。Excelマクロも同様です。英語ですので、月を「9月」とか言うよりも「Sep」と言う方が望まれる場合も多いです。
この場合、マクロの動作としては月の数字を英語の名称に置き換えてあげる必要があります。ここで登場するのが、Excel VBA の MonthName関数。
第一引数には月の数字を取り、第二引数には「省略形」か否かの真偽値を取ります。Trueなら省略形です。便利そうな関数ですね。詳しくはこちら> http://www.techonthenet.com/excel/formulas/monthname.php
困ったこと
僕の職場マシンでの MonthName(8, True) の評価結果は Aug でした。この結果に満足して、出来上がったマクロを(Excel2003でのテストの目的で)同僚のマシンでテストしてみたところ、 MonthName(8, True) の評価結果として 8 が返されていました。
「ちょっ、Excel2003で動作しないんなら、8なんか返さずにエラーで死んでくれよー」
と思いましたが、よくよく調べてみるとこの MonthName という関数は、動作環境のロケール(OSではなくてExcelの)に依存した動作をするようです。Excel2003だから動作しない、という訳ではありませんでした。
試しに日本語のExcelで MonthName(8, False) を評価させてみると「8月」が返されてきます。
WorkAround
Excelの動作環境に依存せずに英語の月名を取るには、 Choose 関数を利用するのが良いかな、と思います。こんなところで switch-case (VBA だと select-case) 文なんて使いたくありませんものね。
動作確認環境
おまけ その1(愚痴)
ここ数ヶ月ほど見ないうちに、Microsoft公式?のExcelVBAリファレンスが「更に」見にくくなった気がします。昔も読みにくくはあったけど、プロパティのデータ型とか必要な情報をきちんと載せてくれてた気がするのです。今ではそういう「リファレンス」が備えているはずの情報が無くなってしまってますね。解説文章だけ、みたいな感じ。
んで、その公式?リファレンスへのリンクをここに貼ろうとしたけど、なかなか見つけられなくて貼れないという(笑)
もしかしてGoogleにおける公式リファレンスのページランクが低くなってるのか…?
おまけ その2
Excelの「使いどころを誤っちゃった」例として、こんなのがありますね。
http://jp.fujitsu.com/platform/server/primergy/pccluster/excel-hpc/
これは富士通さんのサービスですが、まあ、富士通さんは悪くない。悪いのは、こういうサービスを利用せざるを得なくなってしまった顧客。