- ベストアンサー
エクセルVBA、Replaceコマンドで「AM、PM」が自動的に付加されるのを防ぐことはできますか
いつもお世話になります。 Windows XP、Excel 2003です。 シート上の時刻表示を普通の十進法に直す必要が生じました。 例えば「8:30:00(表示書式が"h:mm"なので実際の表示は"8:30")」→「8.30」という具合です。 (「8.5」ではありません) 手動でやる場合、 ":"→"."に置換 ".00"→""に置換 表示書式を"0.00"に変更 この手順でうまくいったので、(データが大量にある関係で)マクロを組みました。 Selection.Replace What:=":", Replacement:=".", LookAt:=xlPart Selection.Replace What:=".00", Replacement:="", LookAt:=xlPart Selection.NumberFormatLocal = "0.00" ところが2行目でエラーが出るので、調べてみると、1行目の実行後にデータが次のようになっていました。 元データ「20:00:00」→実行後のデータ「8.00.00 PM」 とりあえず、1行目の後に右側3文字を削除するコードを入れ、「PM」の場合は、さらに最後に12を足して、その措置でデータはすべて変換できたのですが、1行目で、 元データ「20:00:00」→実行後のデータ「20.00.00」 という風にする方法はないか、ご存知の方がいらっしゃいましたらよろしくお願いいたします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
エクセルの時刻形式「20:00:00」を「20.00.00」にするのであれば >普通の十進法 とは言わないと思いますが、A1に「8:30」があるとき =TEXT(A1,"hh.mm.ss") で「08.30.00」に変換できます。VBAなら Range("A1").Value = Format(Range("A1"),"hh.mm.ss") になります でも実行結果は「文字列」になりますよ。(「.」が複数含まれるので数値にはなりません)。それで当初の「十進法に直す」は満たしていないのではないでしょうか。 「8:30」→「8.30」のように「分」までの形式なら Range("A1").Value = Format(Range("A1"),"hh.mm") 結果は「数値」になりますが… なお蛇足ですが「8:30」を普通の十進数である「8.5」にしたい場合は、元の時刻が入力されたセルの値に「24」を掛けます。すると時刻を十進表示に変換できます。
その他の回答 (1)
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 >元データ「20:00:00」→実行後のデータ「20.00.00」 単に、 Selection.NumberFormatLocal = "h.mm.ss" ということではありまんせか? もし、それを実際の数値にしたいのでしたら、 Sub Test2() Dim c As Range With Selection For Each c In .Cells c.Value = c.Text Next End With End Sub
お礼
いつもお世話になります。 c.Value = c.Text こうすればいいんですね。 参考になりました。 ありがとうございました。
お礼
的確な表現でなくてすみません。 Selection.Value = Format(Selection.Value,"hh.mm") Selection.Replace What:=".00", Replacement:="", LookAt:=xlPart Selection.NumberFormatLocal = "0.00" この方法でできました。 ありがとうございました。