質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

Q&A

解決済

2回答

691閲覧

Excel VBA 時間の計算が上手くいきません

masa1975

総合スコア22

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

0グッド

0クリップ

投稿2020/08/19 01:24

ボイラーの使用時間の入力表をマクロで制作しているのですが、時間の計算(引き算)と時間の表示が上手くいきません。いろいろネットなどを見てみたのですが解決しない為、ご教授いただけましたら幸いです。

VBA

1Sub boira() 2Sheets("登録").Select 3Dim getu As String 4Dim nen As String 5 If Range("a4") = "" Then 6 getu = "月" 'Month(Date) & getu ' 7 nen = "年" 8 Range("a3").Value = Format(Date, "yyyy/mm") 'Year(Date)+ /+ Month(Date) 9 Range("a4").Value = Month(Date) & getu 10 11 End If 12 13 'Cells(2, 1).Select 14 'ActiveWindow.FreezePanes = True 15 16 If Range("a6").Value = "" Then 17 Range("a6").Select 18 19 Else 20 Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Activate 21 End If 22 23 ActiveCell.Value = InputBox("日付を入力して下さい。", "日付入力", , 100, 50) 24 Selection.Borders.LineStyle = xlContinuous 25 ActiveCell.Offset(0, 1).Select 26 27 ActiveCell.Value = InputBox("開始時間を入力して下さい。", "午前開始時間入力", , 100, 50) 28 Selection.Borders.LineStyle = xlContinuous 29 30 If ActiveCell = "" Then 31 32 ActiveCell.Value = "0:00" ’←ここで0:00と表示させる 33 34 End If 35 ActiveCell.Offset(0, 1).Select 36 37 ActiveCell.Value = InputBox("終了時間を入力して下さい。", "午前終了時間入力", , 100, 50) 38 Selection.Borders.LineStyle = xlContinuous 39 40 If ActiveCell = "" Then 41 42 ActiveCell.Value = "24:00" ’←ここで24:00と表示させる 43 End If 44 ActiveCell.Offset(0, 1).Select 45 46 ActiveCell.Borders.LineStyle = xlContinuous 47 ActiveCell.Offset(0, 1).Select 48 49 ActiveCell.Value = InputBox("温度を入力して下さい。", "午後開始時間入力", , 100, 50) 50 Selection.Borders.LineStyle = xlContinuous 51 ActiveCell.Offset(1, -4).Select 52 53 Dim iRow As Long 54Dim i As Long 55Dim start_comp As Date 56Dim end_comp As Date 57 58 iRow = Cells(Rows.Count, "a").End(xlUp).Row 59 60 For i = 5 To iRow 61 start_comp = Cells(i, 2).Value 62 end_comp = Cells(i, 3).Value 63 64 65 If Range("a2") = "" Then 66 67 68 Cells(i, 4) = Format((end_comp - start_comp) * 24, " 0.00") 69 Cells(i, 4).Interior.Color = RGB(255, 176, 137) 70 71 End If 72 73 Next i 74 75Dim lRow As Long 76Dim n As Range 77 78 lRow = Cells(Rows.Count, "a").End(xlUp).Row 'B列の最終行を取得 79 Range("c5") = "TOTAL" 80 Range("c5").Interior.Color = RGB(255, 153, 102) 81 Range("c5").Borders.LineStyle = xlContinuous 82 83 With Range("d5") 84 .Interior.Color = RGB(255, 153, 102) 85 .Formula = "=sum(d6:d" & lRow & ")" 86 Range("d5").Borders.LineStyle = xlContinuous 87 End With 88 89 If Range("e5") = "" Then 90 91 Range("e5").Value = "設定温度" 92 End If 93 94End Sub

0:00(AM12:00)と24:00を空白だった場合に表示させて、開始時間と終了時間の引き算を
させ使用時間を表示させたいのですがうまくいかない為、ご教授いただけましたら幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

どう上手くいかないのかを書いてないため推測でしか回答できませんが、
動作させた限り6行目から表が作成されるのにループ処理を5から始めているため、
Data型の変数end_compにTOTALという文字列を代入しようとして
型が不一致のエラーとなっている部分だけが問題のように思えました。

VBA

1・・・ 2 For i = 6 To iRow 3 start_comp = Cells(i, 2).Value 4 end_comp = Cells(i, 3).Value 5 6 7 If Range("a2") = "" Then 8 9 10 Cells(i, 4) = Format((end_comp - start_comp) * 24, " 0.00") 11 Cells(i, 4).Interior.Color = RGB(255, 176, 137) 12 13 End If 14 15 Next i 16・・・

こう修正すれば動作はするようになります。

投稿2020/08/19 01:51

yureighost

総合スコア2183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

こんにちは。
登録というシートを作ってそのまま実行してみました。
※開始・終了時刻は共に省略
イメージ説明

7行目の計算結果D7は特に問題ないように思えました。

yureighostさんも指摘されていますが、時間の計算(D列)を5行目から始めているので、
2回目以降はエラーとなりますね。

投稿2020/08/19 01:58

DreamTheater

総合スコア1095

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

masa1975

2020/08/19 03:15

ありがとうございました。凡ミスでした。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問