プロが教えるわが家の防犯対策術!

時間表示について教えてください。
エクセルマクロで経過した時間を24時間を越える表示で行いたいのですが、うまくできません。

このQ&Aに関連する最新のQ&A

A 回答 (4件)

どうも"[h]"が駄目みたいですね。


RT = Int(Range("A1") * 24) & ":" & Format(Range("A1"), "nn:ss")
MsgBox "経過時間は" & RT & "です。"
では駄目でしょうか?
    • good
    • 0

MsgBox CStr(Int(Range("A1").Value) * 24 + Hour(Range("A1").Value)) & ":" & Format(Range("A1").Value, "nn:ss")



でいかがでしょうか。
    • good
    • 1
この回答へのお礼

ご回答ありがとうございました!見事に解決しました!

お礼日時:2008/01/23 10:03

既出回答ではRange(範囲)となってますが、合計のセルだけに


Sub test01()
Range("A10").Formula = "=SUM(A1:A9)"
Range("a10").NumberFormat = "[h]:mm:ss"
End Sub
でもよいと思う。
ただし上の例でA1:A9が24時間を越えるデータもあるならデータ全セルに[h]:mm:ssを設定すべきですが。1日は24時間として換算して入力が必要と思う。
    • good
    • 0

書式の問題だと思います。


書式をたとえば [h]:mm:ss などどしてみて下さい。

VBAのコードとしては、
Range(範囲).NumberFormatLocal = "[h]:mm:ss"
となると思います。
    • good
    • 0
この回答へのお礼

お答えいただきありがとうございます。
質問時の内容が足りずにすみません。
msgbox"経過時間は" & Range("A1").value & "です"
と、したいのですが、お願いします。

Range("A1").valueの部分をformat(Range("A1").value,"[h]:mm:ss")

としたのですが、12時間を越えると表示がうまくできません。

お礼日時:2008/01/23 09:21

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QDate型の範囲を超える数値について

経過時間を求めるときに、

dim Time as Date
dim Keika as Date
Keika = Now - Time
Keika = Format(Keika, "hh:mm:ss")

でよいと思うのですが、経過時間が24時間以上になる可能性のある
プログラムはどのように書けばいいのでしょうか?
例えば、53:49:12のように計算したいのですが。
Date型は23:59:59の範囲しかダメなんですよね・・・・。

Aベストアンサー

こんにちは。itohhといいます。

たしかに、Date型だと上手く計算できません。
でも、経過時間を計算してくれる関数(DateDiff)を併用するとうまくいきますよ。

例.
Dim wTime As Date
Dim Keika As Date
Dim wBuf As String
Dim wNow As Date

wTime = DateValue("2001/7/16")
wNow = Now
Keika = wNow - wTime
wBuf = DateDiff("h", wTime, wNow) & Format(Keika, ":nn:ss")

QExcel VBAの残業時間の合計計算について

お世話になります。

seaclearsky8です。

残業データ ”6:00” ”7:00” ”8:00” ”9:00”  各残業時間

dim ztime1,ztime2 as date

ztime1="0:00"

ztime2=上記の各残業時間を順位いれていく処理

ztime1=timevalue(ztime1) + timevalue(ztime2)  残業時間の合計計算処理

24時間を越えるまでなら正常に計算できるのですが
timevalueの性質上24時間を越えると0:00に戻り
残業時間の合計が26時間なら2:00と計算されます。
これを26時と計算方法はあるのでしょうか?

ztime=format(ztime,"hh:mm")と

TimeValue(WorksheetFunction.Text(ztime1, "[h]:mm")) +
TimeValue(WorksheetFunction.Text(ztime2, "[h]:mm"))

も試しましたが上記と同じ結果になりました。

timevalueではできないのでしょうか?

宜しくお願いします。

お世話になります。

seaclearsky8です。

残業データ ”6:00” ”7:00” ”8:00” ”9:00”  各残業時間

dim ztime1,ztime2 as date

ztime1="0:00"

ztime2=上記の各残業時間を順位いれていく処理

ztime1=timevalue(ztime1) + timevalue(ztime2)  残業時間の合計計算処理

24時間を越えるまでなら正常に計算できるのですが
timevalueの性質上24時間を越えると0:00に戻り
残業時間の合計が26時間なら2:00と計算されます。
これを26時と計算方法はあるのでしょうか?

ztime=format(ztime,"hh:mm")と

TimeVa...続きを読む

Aベストアンサー

こんばんは!

Excelのヘルプを見ると
>TIMEVALUE関数は時刻を表している文字列をシリアル値(少数)に変換します
すなわち引数は「文字列」となりますので、
実データ(ztime1やztime2)が数値の場合はエラーになると思います。

単純に
ztime1 + ztime2
のように、値(数値)の足し算にして、表示形式だけを
○○.NumberFormatLocal = "[h]:mm"
のようにしてみてはどうでしょうか?m(_ _)m

Q時刻の比較

現在Excelのマクロにて勤怠の時間計算を行っています。

終わった時間から開始時間を引いて何時間働いたかを出したいです。
ただ夜勤の場合日付が変わって就業時刻が終わる為
24時を超えた計算を行いたいです。


FM9時開始AM6時終わりの場合
30時-21時を引いた9時間という感じの計算を行いたいです。

行ってみた事。
TimeValue("30:00")-TimeValue("21:00")という計算を行ったところエラーとなってしまいました。(型が一致しませんとでました)

TimeValueだと24:00以上の値は使えないのでしょうか?
また、どの関数なら24時以降の計算が行えるのでしょうか?

初歩的な質問で申し訳ございませんが宜しくお願いします。

Aベストアンサー

Double型として時間を取得してみてはいかがでしょう

dim d1 as double, d2 as double, d3 as double
dim t1 as date
' 6:00として入力
d1 = TimeValue("6:00")
d2 = TimeValue("21:00")
d3 = d1 - d2
if d3 < 0 then
  ' マイナスの場合は 1日分加算する
  d3 = d3 + 1.0
end if
' シリアル値を日付型に代入して時間を取得
t1 = d3
debug.print t1

といった具合です ...

Qエクセルで24時間以上の時間表示を分に変換

エクセル2013です。
あるセルに、○○:○○(時間:分)という時間の合計欄があり、これを分単位に変換するため、別のセルに次のような関数を設定しています。
(時間の記入されているセルがA1として)

=(HOUR(A1)+MINUTE(A1)/60)*60

しかし、A1の合計時間が24時間以内なら正常に分に変換してくれるのですが、24時間をオーバーすると“時間”の部分が0になってしまい、分だけしか数値が計算されません。
図のような感じです。24時間10分だと、0時間10分になってしまいます。

これを、24時間10分→1450分に変換するには、どのようにすればよいでしょうか?

お分かりの方がいらっしゃれば、ご教授よろしくお願います。

Aベストアンサー

シンプルに
=A1*24*60

QEXCEL VBAで計算値を四捨五入、切り上げ、切捨てする方法

ネットで探してみたのですが、計算結果を四捨五入して特定のセルを
返すにはどうしたらいいのでしょうか?

Sub hokangosa()

Dim ZPS As Double
Dim ZPOS As Double
Dim DMN As Double
MsgBox (" >>> 補間誤差自動計算 <<< ")
MsgBox (" >>> 初期値入力します <<< ")
ZPS = InputBox(">>> ステップを入力してください<<<")
ZPOS = Sheet1.Cells(22, 4).Value
DMN = ZPOS / ZPS
Sheet1.Cells(23, 6).Value = DMN
End Sub

ここでDMNの値を四捨五入したいです。

またこれとは別に切上げ、切捨ても教えていただけるとありがたいです。

Aベストアンサー

DMN = Application.WorksheetFunction.Round(ZPOS / ZPS, 0)
で、四捨五入
DMN = Application.RoundDown(ZPOS / ZPS, 0)
で切り捨て
DMN = Application.RoundUp(ZPOS / ZPS, 0)
で切り上げです。

引数で、対象桁を変更できます。

QEXCEL VBA で現在開いているブックのファイル名を取得する方法

EXCEL2003 VBAで業務を簡素化するために、現在開いているブックのファイル名を取得する方法が分かりません。
作業手順をマクロを使って処理していますが、オリジナルのワークブックをファイル名を変えて保存し、以後、このワークブックを読み込んで使用しています。
このときのVBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり、以後の業務に使用できません。
常にファイル名を取得出来るVBAをどなたか、教えて下さい。

Aベストアンサー

>現在開いているブックのファイル名
 ちょっと曖昧な表現かなぁという気もいたしますが、VBAが書いてあるブックのブック名は
ThisWorkbook.Name
で、現在 "アクティブにして" 操作対象になっているブックの名前は
ActiveWorkbook.Name
ですね。

 しかし、
>VBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり
というような文脈からすると、
ThisWorkbook.Name
の方ですかね。

Qvba セルに入力した時間をマクロで受け取るには?

はじめまして、
マクロを使ってタイマーをセットしているのですが、
たとえば1行A列に9:00:00という時間をセットして、
それをマクロでうけとりmacro1というマクロを時間とおりに動かすようにタイマーにせっとします。
プログラムは以下のとおりなのですが、
TimeValue(Cells(1, 1))のところがうまくいきません。

解決方法を教えてください。
よろしくお願い思案す。


Set_timer = TimeValue(Cells(1, 1))
Cells(5, 3) = "設定完了"
MsgBox "タイマーを設定しました。"
Application.OnTime TimeValue(Set_timer), "macro1"

Aベストアンサー

こんにちは。

TimeValueの引数は文字列でなければいけません。

ところがセルに時刻を入力すると見た目は時刻ですが、実際の値は「シリアル値」と呼ばれれる値になります。

文字列のところにシリアル値を入れているので「型が一致しません」とエラーになるのです。

そこでこのシリアル値を表示と同じような文字列に変換してやります。

Set_timer = TimeValue(Cells(1, 1))
     ↓
Set_Timer = Format(Cells(1, 1).Value, "h:mm:ss")

とします。どうでしょうか。

Qエクセル VBA ユーザーフォームを閉じる

ユーザーフォームを開く時は
UserForm1.Showですが
閉じる時は?
UserForm1.Close
だとコンパイルエラーになります。
End
にするしかないですか?

Aベストアンサー

Unload Me とか Unload UserForm1 でユーザーフォームを閉じることができます。

Q【Excel VBA】マクロでExcel自体を終了させたい

環境:WindowsXP、Excel2003

マクロでエクセルを終了(ブックを閉じて、アプリケーション自体も終了)させたいのですが、以下のコードではアプリケーションが閉じてくれません。

ThisWorkbook.Close
ExcObj.Quit
Application.Quit

どこか悪いところはありますでしょうか?

よろしくお願いします。

Aベストアンサー

普通に考えれば質問者のコードで上手くいきそうですが
hana-hana3さんの回答にもあるようにThisWorkBook.Closeでコード終了となりますので
Application.QuitをThisWorkBook.Closeの前にもってこないといけません。
Application.Quitはそれがあるプロシージャのコードが全て終わるまで
その実行を保留するちょと特別動作をします。

'-------------------------------------
 Application.Quit
 ThisWorkbook.Close
'-------------------------------------
 
 

Q24時間以上の表示

いつもお世話になります。
Excelで勤務実働時間の変換作業を行ってます。

元のデータは"文字列"で表示されてて、"=TIMEVALUE(A1)"を使って
12:1 → 12:01 と表示させてます。
そこで質問ですが、"24:1"以上の場合ですが、"TIMEVALUE"を使うと当然"00:01"に表示されるので、
=IF(TEXT(LEFT(A1,2),"#,###")>="24",TIMEVALUE(A1)+"24:00"
と数式を入れました。続いて、同じ様に"IF"を並べて">=96"、">=72"、">=48"と作ったのですが、今度は"100:00"以上の場合です。同じく
=IF(TEXT(LEFT(A1,3),"#,###")>="120",TIMEVALUE(A1)+"120:00",IF(TEXT(LEFT(A1,3),"#,###")>="100",TIMEVALUE(A1)+"96:00"を追加してみたのですが、そうすると今度は
"100:1"以上はうまく表示できたのですが"36:1"以上"99:59"いかが正しく表示されなくなりました。中身を確認すると"=TEXT"表示に問題があるようです。
長々と説明させていただきましたが、ようするに、3桁~6桁の文字列表示の時刻を"TIMEVALUE"に表示させ、それを元に関数を使ってまた別の計算式を作りたいのです。
解りにくい内容ですみませんがよろしくお願いします。

いつもお世話になります。
Excelで勤務実働時間の変換作業を行ってます。

元のデータは"文字列"で表示されてて、"=TIMEVALUE(A1)"を使って
12:1 → 12:01 と表示させてます。
そこで質問ですが、"24:1"以上の場合ですが、"TIMEVALUE"を使うと当然"00:01"に表示されるので、
=IF(TEXT(LEFT(A1,2),"#,###")>="24",TIMEVALUE(A1)+"24:00"
と数式を入れました。続いて、同じ様に"IF"を並べて">=96"、">=72"、">=48"と作ったのですが、今度は"100:00"以上の場合です。同じく
=IF(TEXT(LEFT(A1,3),"#,###")>=...続きを読む

Aベストアンサー

解答No2です。確かに文字列としてA1セルに24:10と入力すれば=TIMEVALUE(A1)での表示は0:10と表示されセルの表示形式を[h]:mmとしても24:10と表示されませんね。そこでいろいろと苦労されているのでしょう。次のようにすることで解決すればよいでしょう。
=DATEVALUE(A1)+TIMEVALUE(A1)
もちろんセルの書式設定では[h]:mmのようにします。
これでA1セルに文字列として24:10と入力されれば24:10と、37:00と入力されれば37:00と表示されます。もちろんこのようにして変換した時刻は計算に使うことができ、SUM関数でも正常に使うことができます。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング