スケジュール管理用のExcelの表があって、それで出勤や経理上の処理をしてるのだけど、出勤予定をGoogleカレンダーで見たりリマインダーを使えるようにするため、CSVで出勤予定を出力し、Googleカレンダーでインポートできるようなマクロを書いていました。
そのとき、Excelのバグだと思われるものではまったので、メモ。
日付が例えば「2008/5/21」と「H20.5.21」と入っていた時、通常の手でオペレートした場合には、CSVの出力内容も画面上と同じ日付フォーマットで、「2008/5/21」と「H20.5.21」で出力されます。
ところが、これをマクロ(VBA)で記録してやり、マクロ経由で実行した場合には「5/21/2008」と「5.21.H20」というように「年」が後ろに来てしまう、アメリカなどで一般的な表示形式になってしまいます。
ちなみに最初Excel2000で作っていて判明したのですが、Excel2007で試しても起きました。
ほんとに?と思われた方は、簡単に試せるのでやってみてください。
- A1セルに「2008/5/21」などと入力します。
- マクロの記録、にします。
- 名前をつけて保存、で「CSV(カンマ区切り)」を選んで保存します。
- マクロの記録を終了します。
- 再度名前をつけて保存で、通常のマクロが有効なExcel形式で保存します。
- CSVで出力したファイルをファイル名を変更しておきます。
- CSVで出力したファイルをエディタで見ると「2008/5/21」と入っていると思います。
- マクロを実行して、新たにCSVで出力します。
- 新たに出力したファイルを見ると「5/21/2008」と入っていると思います。
ちなみに、この問題がどうしても解決できなかったのですが、Googleカレンダーはこの形式でも問題なく読んでくれたため、そのまま使うということで解決?しました。
(追記)
友人より教えていただきました。
[XL2000]SaveAsメソッドでテキストファイル保存すると書式が変更される
http://support.microsoft.com/kb/410237/ja
というわけでこれはマイクロソフト曰く、バグではなくて「仕様」らしいです。
でも、「すべての環境で同じ形式で保存されるための Excel の仕様による動作になります。」と言うのならば、手動でやった場合と記録したマクロでやった場合とで、同じ形式で保存される仕様のほうが普通だと思うんですけどね。
んで、2002以降だと
Local 引数に True を指定する
で回避できるとのこと。
だけどうちの環境だと、2000混在してるからそのコードは使えず。
この対処方法見て、なんで2007のマクロ記録の時、標準でつけないようにしてるんだろう?と思ったんだけど、後方互換性のためなんだろうな。