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

仕事で映像関係の資料管理を
することになり以下のような
計算をしています。

10:10:23;06~10:11:07;22(時間表示)
の時間を求める

ただし「;」以下は「フレーム」といい
30進法で30F=1秒

0F以上14F以下は繰り下げ
15F以上29F以下は繰り上げ

ついさっきまで「;」より右のフレームは
切捨てて計算していたのですが
(区切り位置作業で削除)
上司に「実時間と2秒近く変わるぞ」って
注意を受け悩んでます。

関数で探しましたがいまいち分からず
ここにきました。すみませんがどなたか
ご教授いただけますか?

A 回答 (5件)

A1が10:10:23;06、B1が10:11:07;22


それぞれの状態で繰り下げ、繰り上げの場合は
=LEFT(A1,8)+ROUND(RIGHT(A1,2)/30,0)/86400
=LEFT(B1,8)+ROUND(RIGHT(B1,2)/30,0)/86400
上記の減算でできます。結果を繰り下げ、繰り上げの場合は
=LEFT(B1,8)-LEFT(A1,8)+ROUND((RIGHT(B1,2)-RIGHT(A1,2))/30,0)/86400
になります。

書式は別の方の回答にあるので省かせてもらいます。
    • good
    • 0
この回答へのお礼

あーこれが今の私にはベストな
気がします。ありがとうございました

この場を借りて皆さんに感謝いたします
(しかし残業代は減るなぁ・・・)

お礼日時:2004/01/20 20:40

こんにちは。

maruru01です。

A1に「10:10:23;06」、B1に「10:11:07;22」と入力されているとします。
フレームの四捨五入(14捨15入)を、
(1)差を出す前に行う場合

=TEXT(LEFT(B1,FIND(";",B1)-1)+MID(B1,FIND(";",B1)+1,LEN(B1))/30*"0:0:1","[h]:m:s")-TEXT(LEFT(A1,FIND(";",A1)-1)+MID(A1,FIND(";",A1)+1,LEN(A1))/30*"0:0:1","[h]:m:s")

(2)差を出してから行う場合

=--TEXT(LEFT(B1,FIND(";",B1)-1)+MID(B1,FIND(";",B1)+1,LEN(B1))/30*"0:0:1"-LEFT(A1,FIND(";",A1)-1)-MID(A1,FIND(";",A1)+1,LEN(A1))/30*"0:0:1","[h]:m:s")

です。
なお、両方ともセルの表示形式はユーザー定義で、
「[h]:mm:ss」
などの時刻にして下さい。

>いいえ、繰上げ、繰り下げしてからですm(_ _)m
より正確に計算するなら、差を出してから(上記の(2))だと思うんですが。

この回答への補足

ありがとうございます。

確かに(2)の方が良いですね。

ただ私の質問の仕方が悪く
因数?のほうの繰り上がり下がりの
結果も表記しなくてはいけないんです。
(計算結果だけだなく)
繰り上がり、繰り下がりがうまくいけば
解を求めるのは簡単でした。

で、どこまでが繰り上がり下がりを求める
式なんでしょうか?(T_T)

補足日時:2004/01/20 17:16
    • good
    • 0

適当にマクロつくりました。


列A,Bに値がはいっていて1-300行あると仮定してです。実値に置き換えてみてください。
値がはいっていないところがあるとエラーでますんで。(何しろ適当)
Private Sub test()

Dim strb As String
Dim stra As String
Dim dtmb As Date
Dim dtma As Date
Dim dtmc As Date
Dim lngrow As Long

For lngrow = 1 To 300
strb = Sheet1.Cells(lngrow, 2)
stra = Sheet1.Cells(lngrow, 1)

dtmb = CDate(Mid(strb, 1, (Len(strb) - 3)))
dtma = CDate(Mid(stra, 1, Len(stra) - 3))

If (Mid(strb, 10, 11)) < 15 Then
dtmb = DateAdd("s", -1, dtmb)
Else
dtmb = DateAdd("s", 1, dtmb)
End If

If (Mid(stra, 10, 11)) < 15 Then
dtma = DateAdd("s", -1, dtma)
Else
dtma = DateAdd("s", 1, dtma)
End If

dtmc = dtmb - dtma
Sheet1.Cells(lngrow, 3) = dtmc
Next
End Sub

この回答への補足

回答ありがとうございます。

うひゃ~マクロですか・・・
がんばって理解します。
ここでの苦労があとあとの
楽につながるならって感じです。

補足日時:2004/01/20 16:57
    • good
    • 0

とりあえず、繰り上げ/繰り下げは、例えば、セル A1 に 10:11:07;22 が入っているとすると、適当なセルに


=IF(VALUE(RIGHT(A1,2))>14,LEFT(A1,8)+1/24/60/60,LEFT(A1,8))
とするとできます。(この数式を記述したセルの書式は時刻にしておいてください。)

>0F以上14F以下は繰り下げ
>15F以上29F以下は繰り上げ
というのは、10:10:23;06 ~ 10:11:07;22 の例だと、
(1) まず繰り上げ/繰り下げを行い、10:10:23 ~ 10:11:07 の計算をするということでよいのでしょうか?
それとも、
(2) 10:11:07;22 と 10:10:23;06 の差に対して繰り上げ/繰り下げを行うのでしょうか?
(2) だとすると、上の数式を用いて、10:11:07;22、10:10:23:06 のそれぞれに対して繰り上げ/繰り下げ後の値を表示するセルを用意し、その結果を減算すればよいと思います。
(1) だと、ちょっと面倒ですが、hh:mm:ss の部分とフレームの部分を別々に計算して、フレームの計算結果が繰り下げが生じるなら 1/24/60/60 を引いてやればよいと思います。その減算の結果に対して、上の数式を適用してやれば求められると思います。
    • good
    • 0
この回答へのお礼

まずは回答ありがとうございます。

なんども読み返して理解しようと
奮闘中です。しかしみなさん
いとも簡単に・・・・脱帽です

お礼日時:2004/01/20 16:57

フレーム部は計算してから繰り上げ・繰り下げをするのですか?

この回答への補足

いいえ、繰上げ、繰り下げしてからですm(_ _)m
あっ、何かいい方法があるのですか?(期待大)
300近い計算が20枚・・・・(ToT)

補足日時:2004/01/19 22:59
    • good
    • 0

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