モーグルとカバとパウダーの日記

モーグルやカバ(EXカービング)山スキー(BC)などがメインの日記でした。今は仕事のコンピュータ系のネタが主になっています。以前はスパム対策関連が多かったのですが最近はディープラーニング関連が多めです。

Excelでマクロ(VBA)からCSV出力時の日付フォーマットのバグ

スケジュール管理用の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で試しても起きました。


ほんとに?と思われた方は、簡単に試せるのでやってみてください。

  1. A1セルに「2008/5/21」などと入力します。
  2. マクロの記録、にします。
  3. 名前をつけて保存、で「CSV(カンマ区切り)」を選んで保存します。
  4. マクロの記録を終了します。
  5. 再度名前をつけて保存で、通常のマクロが有効なExcel形式で保存します。
  6. CSVで出力したファイルをファイル名を変更しておきます。
  7. CSVで出力したファイルをエディタで見ると「2008/5/21」と入っていると思います。
  8. マクロを実行して、新たにCSVで出力します。
  9. 新たに出力したファイルを見ると「5/21/2008」と入っていると思います。


ちなみに、この問題がどうしても解決できなかったのですが、Googleカレンダーはこの形式でも問題なく読んでくれたため、そのまま使うということで解決?しました。


(追記)

友人より教えていただきました。

[XL2000]SaveAsメソッドでテキストファイル保存すると書式が変更される
http://support.microsoft.com/kb/410237/ja

というわけでこれはマイクロソフト曰く、バグではなくて「仕様」らしいです。
でも、「すべての環境で同じ形式で保存されるための Excel の仕様による動作になります。」と言うのならば、手動でやった場合と記録したマクロでやった場合とで、同じ形式で保存される仕様のほうが普通だと思うんですけどね。


んで、2002以降だと

Local 引数に True を指定する

で回避できるとのこと。


だけどうちの環境だと、2000混在してるからそのコードは使えず。
この対処方法見て、なんで2007のマクロ記録の時、標準でつけないようにしてるんだろう?と思ったんだけど、後方互換性のためなんだろうな。