• ベストアンサー

エクセル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」 という風にする方法はないか、ご存知の方がいらっしゃいましたらよろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.1

エクセルの時刻形式「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」を掛けます。すると時刻を十進表示に変換できます。

cs-megami
質問者

お礼

的確な表現でなくてすみません。 Selection.Value = Format(Selection.Value,"hh.mm") Selection.Replace What:=".00", Replacement:="", LookAt:=xlPart Selection.NumberFormatLocal = "0.00" この方法でできました。 ありがとうございました。

その他の回答 (1)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんにちは。 >元データ「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

cs-megami
質問者

お礼

いつもお世話になります。 c.Value = c.Text こうすればいいんですね。 参考になりました。 ありがとうございました。