• ベストアンサー

【エクセルマクロ】時間の表示形式について

あるセルに「8:24」(表示形式はユーザー定義により、h:mm)と入力されています。 この値を「出社時間」(date型の変数)へ代入していますが、以下の2つの方法で取得できる値が異なっています。 (1)出社時間 = ActiveCell.Offset(0, -3).Value 値:8:24 (2)出社時間 = Replace(ActiveCell.Offset(0, -3).Value, " ", "0:00:00") 値:0:35 なぜこのようになるのでしょうか。 (2)の方法を用いて(1)の値を取得したいです。

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

  • ベストアンサー
  • f272
  • ベストアンサー率46% (8469/18132)
回答No.1

date型の変数というのは単なる浮動小数点数ですよ。普通の浮動小数点数と違うのは,コントロール パネルで設定されている短い日付形式に従って表示されるという点です。 したがって 出社時間 = 0.35 としても8:24と表示されます。 ところが, 出社時間 = Replace(ActiveCell.Offset(0, -3).Value, " ", "0:00:00") の場合には値がぜんぜん違います。 「ActiveCell.Offset(0, -3).Value」の値は0.35であって,Replace関数に引き渡すときに文字列の"0.35"に変換され,この中に" "空白文字は含まれていませんからReplace後もやはり"0.35"のままです。これをdate型の変数に代入すると0時35分と解釈されますので「値:0:35」となるのです。 結局,何をしたいのかよくわからないが,date型の変数として欲しいであれば (1)出社時間 = ActiveCell.Offset(0, -3).Value で十分だろうし,文字列"8:24"が欲しいのなら dim s as string s = Format(ActiveCell.Offset(0, -3).Value, "h:mm") のようにすればよい。

関連するQ&A