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

色々調べたのですが、見つからず困っております。
時間差を求めるマクロコードを教えてください。
例えば、
A1に 18:11:22
B1に 18:15:22
と別々の時刻を入力されているとします。
時刻の差分を出したいのですが、マクロを使用しない場合はC1に=IFERROR(a1-b1,"")とします。
ですがマクロを登録する場合
Cells(1, 1) = Cells(1, 2) - Cells(1, 3)とコードを書いてもエラーになってしまいます。
時刻の差分を求めるにはdateadd関数かformula関数を使用することは調べたのですが
コードの組み合わせが浮かびません。
どなたか教えてください。
後、入力されている分を計算してほしいので繰り返し処理のコードも出来ましたら教えていただきたいです。

A 回答 (4件)

こんばんは



>Cells(1, 1) = Cells(1, 2) - Cells(1, 3)とコードを
>書いてもエラーになってしまいます
計算方法としては間違ってはいませんけれど、質問文でご説明のセル位置と違っています。
そのコードだと、A1セルに B1 - C1 の結果を記入することを意味しています。
推測ですが、エラーになるのは、B1かC1に文字などが入力されていたりしませんか?

その記述法であれば、
 Cells(1, 3) = Cells(1, 2) - Cells(1, 1)
とすれば、そのまま結果が表示できると思います。
(C1セルの表示形式は、時間表示にしておく必要があります)

どうやら、質問者様にはわかりにくいようなので、
 Range("C1") = Range("B1") - Range("A1")
という記述法の方が、良いのかもしれません。

ただし、エクセルの時間は負の値を許しませんので、A1>B1 の場合には上記の計算はエラーになります。
ご提示の関数式のように、これを回避するなら、同様の処理を行えばよいです。
If Range("B1") >= Range("A1") Then Range("C1") = Range("B1") - Range("A1") Else Range("C1") = ""


>後、入力されている分を計算してほしいので繰り返し処理のコードも
>出来ましたら教えていただきたいです。
ループ等で繰り返し処理を行う場合は、Cells( row, collumn ) 形式を用いる方が便利です。

例えば、1行目から10行目迄を繰り返すのなら
 For r = 1 To 10
  Cells(r, 3) = Cells(r, 2) - Cells(r, 1)
 Next r
のような要領で、行(または列)を変数にして指定すれば宜しいでしょう。
    • good
    • 1

こんにちは。



>A1に 18:11:22
>B1に 18:15:22
>Cells(1, 1) = Cells(1, 2) - Cells(1, 3)

この前提なら

Cells(1,1)がA1セル、
Cells(1,2)がB1セル、
Cells(1,3)はC1セル

になるけど、C1セル値が時刻でなければエラーになりそうです。
    • good
    • 1

>繰り返し処理のコード


見落としましたが、意味が理解できませんでした
Dim i As Long
i = 1
MsgBox Format(Cells(i, 1).Value2 - Cells(i, 2).Value2, "hh時間,n分,s秒")
日またぎなどは考慮していません
    • good
    • 1

こんばんは


シリアル値として
Dim StartDate As Date, EndDate As Date
StartDate = Range("A1").Value2
EndDate = Range("B1").Value2

MsgBox DateDiff("h", StartDate, EndDate)
MsgBox DateDiff("n", StartDate, EndDate)
MsgBox DateDiff("s", StartDate, EndDate)
    • good
    • 1

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