- ベストアンサー
手作業だとできるのにVBAだとおかしくなる
例えば以前私がした質問なのですが http://oshiete1.goo.ne.jp/qa4837306.html の 「質問投稿日時:09/03/29 22:09」をコピーし エクセルへ貼り付け、 CTRL+Hで「検索と置換」と起動し、 検索する文字列:「質問投稿日時:」 置換後の文字列:(なし) をすると、 結果は「2009/3/29 22:09:00」になります。 しかしこれをvbaの下記のコードで行うと Columns("a").Replace what:="質問投稿日時:", Replacement:="", LookAt:=xlPart 結果は「2029/9/3 22:09:00」になってしまいます。 何が起こったのでしょう? このような処理 (「文字列+日時」を日時だけにする) をvbaで自動化したいので回避方法を教えてください。 ご教授よろしくお願いします
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 もともと、書式が、そういう書式になっているからです。 リンク先の内容は違うようですが、http://oshiete1.goo.ne.jp/qa4953819.html でしょうか? その現象は、WinのOSの設定とExcelバージョンの組み合わせによる現象だったと思います。ただ、通常、コントロールパネル側の「日付、時刻、地域と言語オプション」の「地域と言語のオプション」の[短い形式]は正しく設定されているはすです。 しかし、Excel 2000 では、その設定には反映しませんから、そういう現象が現れます。 4文字の数字が、年という認識はしますから、以下のようにすれば可能です。 >Columns("a").Replace what:="質問投稿日時:", Replacement:="", LookAt:=xlPart 修正後: Columns("A").Replace What:="質問投稿日時:", Replacement:="20", LookAt:=xlPart 'Columns("A").AutoFit '列を整える 'その後、 Columns("A").NumberFormatLocal = "yy/MM/dd hh:mm" これを加えてください。1900年代も加わるときは、別なコードにしなければなりませんが、2000年以降だけなら、これでよいでしょう。そうでなければ、[区切り位置]ツールで、日付の部分をYMD形式にしてあげれば可能です。 書式設定は、NuberFormatでも良いのですが、Local をつけるのは、日本語の独特の設定をするときに必要になります。
その他の回答 (1)
- xls88
- ベストアンサー率56% (669/1189)
下記で、対象セル範囲をループすればどうでしょうか。 ActiveCell.Value = Format(Replace(ActiveCell.Value, "質問投稿日時:", ""), "yyyy/mm/dd")
お礼
ありがとうございます。 一応このコードで対応できました。 しかし原因はなんなのでしょう?
お礼
なるほど。よくわかりました。ありがとうございます。