- ベストアンサー
VBA式で終了日時から開始日時を引いた時間を求める方法
- ExcelのA列にタイトル、B列に開始日、C列に開始時、D列に終了日、E列に終了時のデータがある場合、F列に合計を求めるVBAのコードを教えてください。
- 質問者は前回質問で同様の問題解決に取り組んでいますが、改めて適切なコードを教えてください。
- 全てのセルは数値フォーマットされており、F列は時間(hh:mm)のフォーマットが設定されています。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
同じようなことを2度にわたって質問しているが、意味は分からない。 コード例も自分で挙げており、大筋間違っていないと思う。 見出し行を計算に加えていた凡ミスなを除き。 どういう点を疑問に思ったとか、失敗するのでしょうか? (1)スタート(B、C列)、エンド(D,E列)とも日+時刻を足して、日付つき時刻を作り、相互から引き算して、時間(間隔)を出す。 (2)For Nextで各行の上記算出した時間を累積していく。 (3)累積したままの時間数(通常24時間を超えるはず)でよければ、セルの書式は[h]:mmでよい。 時刻は普通は日付が決まってこその時刻なので、日付と組みあわせた時刻でしょう。 それが(1)の足す(結合する)理由で、単純に足してよいのは次の理由からです。 Excelは日付+時刻を「日付・時刻シリアル値」という表し方で、日付・時刻計算を、引き算だけで、簡単にできるようにしたアイデアを採用している。日付は整数部分、時刻は小数点数(24時間を1とした、に対する割合)で表される。筆算の場合の、日の単位から、1日24時間を借りてくるようなことが必要な場合があるが、それがなくなる。 これをVBAまで使い始めた人でも、知らない人が多いようだが、Googleででも、「日付シリアル値で」照会し、記事をよく理解すべきです。
その他の回答 (2)
For ~ Next 内のCellsプロパティの使い方が違いますね。 Cells([RowIndex],[ColumnIndex]) なので、式にすると以下の様になります。 そこだけ変えればOKです。 Cells(num, "F").Value = Cells(num, "D").Value + Cells(num, "E").Value - Cells(num, "B").Value + Cells(num, "C").Value
お礼
ありがとうございます
補足
お礼が遅くなり申し訳ありません。 アドバイス通りにやったのですが、 実行エラー13の「型が一致しません」と表示されます。 どうしたらよいでしょうか? Option Explicit Public i As Long Public num As Integer Sub newmacro() 'Range("F1").Value = "合計" Columns("F").Select 'Selection.NumberFormatLocal = "[h]:mm" For num = 2 To Range("a1").End(xlDown).Row Cells(num, "F").Value = (Cells(num, "D").Value + Cells(num, "E").Value) - (Cells(num, "B").Value + Cells(num, "C").Value) Next num End Sub
- bunjii
- ベストアンサー率43% (3589/8249)
>F列欄に合計を求めたいです。 F列の各行は合計ではなく時間でしょう? F列の最終行に時間の合計なら理解できます。 >For~Next間のコードを教えて下さい 下記のコードは算数の基本に合っていません。 Cells("F", num).Value = Cells("D", num).Value + Cells("E", num).Value - Cells("B", num).Value + Cells("C", num).Value F2=(D2+E2)-(B2+C2) → D2+E2-B2-C2 でなければならないのに D2+B2-B2+C2 になっています。 コードの書き方は省略します。
お礼
ありがとうございます
補足
お礼が遅くなり申し訳ありません。 実行エラー13の「型が一致しません」と表示されます。 どうしたらよいでしょうか? Option Explicit Public i As Long Public num As Integer Sub newmacro() 'Range("F1").Value = "合計" Columns("F").Select 'Selection.NumberFormatLocal = "[h]:mm" For num = 2 To Range("a1").End(xlDown).Row Cells(num, "F").Value = (Cells(num, "D").Value + Cells(num, "E").Value) - (Cells(num, "B").Value + Cells(num, "C").Value) Next num End Sub
お礼
ありがとうございます
補足
お礼が遅くなり申し訳ありません。 二回質問したのは、エラーが生じており、回避できていないからです。 実行エラー13の「型が一致しません」と表示されます。 どうしたらよいでしょうか? Option Explicit Public i As Long Public num As Integer Sub newmacro() 'Range("F1").Value = "合計" Columns("F").Select 'Selection.NumberFormatLocal = "[h]:mm" For num = 2 To Range("a1").End(xlDown).Row Cells(num, "F").Value = (Cells(num, "D").Value + Cells(num, "E").Value) - (Cells(num, "B").Value + Cells(num, "C").Value) Next num End Sub