例えば以前私がした質問なのですが
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で自動化したいので回避方法を教えてください。

ご教授よろしくお願いします

A 回答 (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 をつけるのは、日本語の独特の設定をするときに必要になります。
    • good
    • 0
この回答へのお礼

なるほど。よくわかりました。ありがとうございます。

お礼日時:2009/05/25 21:59

下記で、対象セル範囲をループすればどうでしょうか。


ActiveCell.Value = Format(Replace(ActiveCell.Value, "質問投稿日時:", ""), "yyyy/mm/dd")
    • good
    • 0
この回答へのお礼

ありがとうございます。
一応このコードで対応できました。
しかし原因はなんなのでしょう?

お礼日時:2009/05/25 06:40

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング