• 締切済み

エクセル(VBもしくは、VBA)を使用しての時間の計算について

皆さん、初めまして yu_kiと申します。 初めて投稿します。 hh:mm:ss:ffの計算とhh:mm:ss:ffの差分の計算式を作成したいのですが 初心者なので、どのように記載すればよいのかわからず、また 色々なサイトを見ているのですが、どれも的を得ていない為、今回 質問させて頂きました。 作成したいのは、下記の様な感じの表です。 例)  (Aの答え)   (Bの答え)       (Cの答え)  03:00:10:00  01:00:30:00  差分 xx:xx:xx:xx の様な感じのものです。 基本的なことで大変、恐縮ですが、ご教授願えればと思います。 宜しくお願い致します。

みんなの回答

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんにちは。 ご質問は、VBAかVBでしたので、ユーザー定義関数を作りました。 ff は、0~29側を使いました。 以下を作った後、#1さんの数式がきれいにまとまっているので、数式をVBA側に移植しようと、あれこれ試してみましたが、別途計算をしないと誤差が出て出来ませんでした。 以下は、マイナス値にも対応していますが、エラー処理はほとんどされていません。 '------------------------------------------- '標準モジュール '------------------------------------------- Function FrmTimeDif(arg1 As Variant, arg2 As Variant) As String   Dim ar1 As Variant   Dim ar2 As Variant   Dim ret1 As Date   Dim ret2 As Date   Dim dif1 As Double   Dim dif2 As String   Dim res1 As Double   Dim res2 As Double   Dim buf3 As Double   Dim vDif1 As Variant   Dim mSgn As String   'セルの一般計算用   If TypeName(arg1) = "Range" Then     If IsDate(arg1.Text) And IsDate(arg2.Text) Then       If arg1 < arg2 Then         FrmTimeDif = "-" & Format$(arg2 - arg1, "hh:mm:ss")       Else         FrmTimeDif = Format$(arg1 - arg2, "hh:mm:ss")       End If       Exit Function     End If   End If   ar1 = Split(arg1, ":")   ar2 = Split(arg2, ":")      ret1 = TimeSerial(ar1(0), ar1(1), ar1(2))   ret2 = TimeSerial(ar2(0), ar2(1), ar2(2))   If ret1 >= ret2 Then     res1 = TimeSerial(0, 0, ar1(3) * 2)     res2 = TimeSerial(0, 0, ar2(3) * 2)   Else     ret2 = TimeSerial(ar1(0), ar1(1), ar1(2))     ret1 = TimeSerial(ar2(0), ar2(1), ar2(2))          res2 = TimeSerial(0, 0, ar1(3) * 2)     res1 = TimeSerial(0, 0, ar2(3) * 2)     mSgn = "-"   End If         dif1 = (res1 - res2)   If dif1 < 0 Then     buf3 = TimeSerial(0, 0, 1)     dif2 = Format(Int((60 - Second(dif1)) / 2), "00")   Else     dif2 = Format(Int(Second(dif1) / 2), "00")   End If   vDif1 = Format(ret1 - ret2 - buf3, "hh:mm:ss") & ":" & dif2   FrmTimeDif = mSgn & vDif1 End Function

yu_ki1209
質問者

お礼

返答が遅くなり大変申し訳ありません。 回答ありがとうございました。 大変、参考になりました。

全文を見る
すると、全ての回答が全文表示されます。
  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.1

「ff」ってビデオ等で使われている「フレーム(30フレーム=1秒)」でしょうか? Excelでは日時を扱うシリアル値としてはフレームは扱えないと思われますので、差分を出したい「Aの答え」「Bの答え」の「03:00:10:00」などは文字列なのですよね? そうだと仮定して回答します。 「Aの答え」「Bの答え」を時刻を表すシリアル値に変換して差分を演算し、演算結果をフレームを考慮した文字列に変換する事になります。 A1に03:00:10:00、B1に01:00:30:00 と、文字列が入って居るとします。 A2に =TIMEVALUE(LEFT(A1,LEN(A1)-3))+RIGHT(A1,2)/30/86400 B2に =TIMEVALUE(LEFT(B1,LEN(B1)-3))+RIGHT(B1,2)/30/86400 これで、シリアル値になりますので、C2に =A2-B2 と入れ、シリアル値で差分を出します。 最後にC1に  =TEXT(FLOOR(C2,1/86400),"hh:mm:ss:")&TEXT(MOD(C2*86400,1)*30,"00") と、入れてシリアル値を文字列に変換します。 #86400 = 24*60*60 です。秒をシリアル値で扱うために掛けたり割ったりしています。

yu_ki1209
質問者

お礼

返信が大変遅くなり申し訳ありません。 ご教授、ありがとうございます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Excel 時間の計算について

    文字列でA1に秒数があります(例:327.00) これを分(hh:mm:ss)に直したいのですが、60で割り ユーザー定義でhh:mm:ssとしたら「10:48:00」となってしまい、正しく計算できません・・・ 基本的なところだとは思いますが、どうか教えて下さい

  • エクセルでhh:mm:ssを計算したいです

    エクセルでhh:mm:ssを計算したいです 「0:11:39」と入力されているセルの値を 「0:00:06」(6秒)で割るには、 どのような数式を作成すれば良いでしょうか。 ※端数は切り上げたいです。 例えば上記の場合、値は以下となって欲しいです。 0:11:39÷0:00:06=117 すみませんが、どなたか教えて下さい。 よろしくお願い致します。

  • 【エクセル】引き算ができません…

    hh:mm:ss.msec.usec.nsecの形式で、データが文字列として並んでいます。 その差分を計算したいのですが、 #VALUE! になってしまい、うまくいきません。 どなたかうまく計算できる方法をご存知ありませんでしょうか?? 例えば、、、、 A1~A2セルに↓   00:00:00.0001.0002.1234   00:01:30.0002.0003.1356 と入っているとすると、 00:01:30.0002.0003.1356 - 00:00:00.0001.0002.1234 としたいので、 B1セルに↓ =A2-A1 と入れると #VALUE! になってしまいます… 宜しくお願いいたします。m(_ _)m

  • EXCELでの時間計算(休憩時間の差引)について

    パートさんの遅刻・早退・外出時間を自動計算する表を作っていますがうまく作れません・・・ 下記の場合どうしたらよいでしょうか? 例えば遅刻の合計時間を算出するのに開始時刻から終了時刻を引き算しますが 10:20~10:30、 12:00~12:40、 14:50~15:00、は休憩時間なので自動的 に差し引きたいと考えています。 遅刻の時間内に、休憩時間である10:20~10:30が含まれれば10、 12:00~12:40が含まれれば40、14:50~15:00が含まれれば10を引くという感じです。 どのような計算式にすればよいのでしょうか? ちなみに勤務時間は8:30~17:00です。 例えば、 (例)セル【B2】8:30(開始)セル【B3】13:00(終了)の場合、セル【B4】には50分を差引いた 3:40の合計時間を算出したいです。 色々調べて、B4に以下の式を入力してみましたが、どうもうまくいきません。 =IF(B3<>"",B3-B2-IF(TEXT(B3,"hh:mm")>"15:00","1:00",IF(TEXT(B3,"hh:mm")>"12:40","0:40",IF(TEXT(B3,"hh:mm")>"10:30","0:10","0:00")))) どうぞ宜しくお願いいたします。

  • Excelでタイムコード(映像)の計算式を教えてください。

    こんにちわ。Excelでのタイムコード(映像)計算について教えて下さい。 時間の計算式はあるのですが、タイムコードということになると式が分かりません。 Excelで、タイムコードの計算式を作りたいのです。 例えば、イン点からアウト点までがあり、そのデュレーションを出したいのです。 映像はDVCAM等を使用していて、タイムコードは、hh:mm:ss:ffで、1秒は30フレームです。 フリーソフトでタイムコード電卓があるので、それを使っているのですが、一個一個計算して出しているので、Excelで数式でできれば効率がいいなぁ~?と思ってます。 よろしくお願いします。

  • 131071秒を関数で日付と時間にするには?

    数値(秒)をエクセルで時間に換算しています。 24時間を超えた時、「○日HH:MM:SS」 のようにエクセルで表記できますか? 32767は、9:06:07 65535は、18:12:15 ここまでは書式設定を時間([$-F400]h:mm:ss AM/PM)にするだけで済みます 更に数値行を追加し、 131071 262143 524287 1048575 ... 9007199254740990 となったとき、どうしたら良いでしょうか? お分かりの方、どうぞよろしくお願いいたします。 ○日HH:MM:SS、 ○年○日HH:MM:SS のように関数をコピペして計算表示していきたいです。 Windows8pro Office2013のエクセルです。よろしくお願いいたします。

  • EXCELでミリ秒を計算する方法

    ミリ秒単位まで入力された時刻表記のセルがあります。 このセルの値をミリ秒に換算する方法を教えてください。 【セル書式】hh:mm:ss.000 ※hhは00固定 【例】 値は、「00:01:02.123」 これを、1*60000+2*1000+123=62123(ミリ秒) というように算出したいのです。 計算式は、「mm*60000+ss*10000+000(ミリ秒部分)」です。 VBAはやったことがないので、出来れば、関数等で出来る 方法をお願いします。

  • Excel 時刻の計算方法

    Excel 時刻の計算方法 セルA 10/26/2010 06:54:32 セルB 10/27/2010 12:34:56 このような状態で、セルCにhh:mm:ss形式でAの時刻からBの時刻までにかかった時間を表示させたいのですが どうすればいいのでしょう

  • PLSQL CHARの項目を使用した計算

    Oracle8iのストアドプロシジャを作成しています。 SELECT SYSDATE で取得したシステム時間から任意時間前の時刻を算出し、CHAR(16)の文字列(YYYYMMDDHHMMSSMS)にしたいのですが、 うまくいきません。 次のようなやり方をしています。 (1)システム時刻を取得し、CHAR型変数へ格納。 (2)時、分、秒ごとにCHAR型の変数へセット。 (3)TO_NUMBER関数でNUMBER型へ変換して、NUMBER型変数に格納。 (4)任意時間前の時刻の算出。 SQLPLUSの標準出力にログを出して確認したところ、分や秒(W_CHECK_SS )がマイナスになってしまいます。 どのようにすればうまくいくのかアドバイスをいただけたらと思います。 今は以下のように書いています。 CREATE OR REPLACE PROCEDURE TESTSP ( IN_KIJUN_TIME IN NUMBER --監視基準時間(秒) ) IS W_CURRENT_TIME16 CHAR(16); --システム時刻(16桁) W_CURRENT_TIME14 CHAR(14); --システム時刻(14桁) W_CURRENT_YYYYMMDD CHAR(8); --システム時刻(YYYYMMDD) W_CURRENT_HH NUMBER(2); --システム時刻(HH) W_CURRENT_MM NUMBER(2); --システム時刻(MM) W_CURRENT_SS NUMBER(2); --システム時刻(SS) W_CURRENT_HH_STR CHAR(2); --システム時刻(HH)CHAR型 W_CURRENT_MM_STR CHAR(2); --システム時刻(MM)CHAR型 W_CURRENT_SS_STR CHAR(2); --システム時刻(SS)CHAR型 W_CHECK_SEC NUMBER(5); --基準前時刻(計算用) W_CHECK_HH NUMBER(2); --基準前時刻(HH) W_CHECK_MM NUMBER(2); --基準前時刻(MM) W_CHECK_SS NUMBER(2); --基準前時刻(SS) W_CHECK_HMS CHAR(16); --基準前時刻(16桁) BEGIN /*-- システム時刻の取得 --*/ SELECT TO_CHAR(SYSDATE, 'YYYYMMDDHH24MISS') INTO W_CURRENT_TIME14 FROM DUAL; -- ◆DEBUG START DBMS_OUTPUT.PUT_LINE('・システム時刻14 = ' || W_CURRENT_TIME14); -- ◆DEBUG END /*-- 基準前時刻の計算 --*/ W_CURRENT_YYYYMMDD := SUBSTR(W_CURRENT_TIME14,1,8); W_CURRENT_HH_STR := SUBSTR(W_CURRENT_TIME14,9,2); W_CURRENT_MM_STR := SUBSTR(W_CURRENT_TIME14,11,2); W_CURRENT_SS_STR := SUBSTR(W_CURRENT_TIME14,13,2); W_CURRENT_HH := TO_NUMBER(W_CURRENT_HH_STR); W_CURRENT_MM := TO_NUMBER(W_CURRENT_MM_STR); W_CURRENT_SS := TO_NUMBER(W_CURRENT_SS_STR); -- W_CHECK_SEC := W_CURRENT_HH * 3600 + W_CURRENT_MM * 60 + W_CURRENT_SS - IN_KIJUN_TIME; W_CHECK_HH := W_CHECK_SEC / 3600; W_CHECK_SEC := W_CHECK_SEC - (W_CHECK_HH * 3600); W_CHECK_MM := W_CHECK_SEC / 60; W_CHECK_SS := W_CHECK_SEC - (W_CHECK_MM * 60); W_CHECK_HMS := W_CURRENT_YYYYMMDD || W_CHECK_HH || W_CHECK_MM || W_CHECK_SS || '00'; -- ◆DEBUG START DBMS_OUTPUT.PUT_LINE('・W_CHECK_HH = ' || W_CHECK_HH); DBMS_OUTPUT.PUT_LINE('・W_CHECK_MM = ' || W_CHECK_MM); DBMS_OUTPUT.PUT_LINE('・W_CHECK_SS = ' || W_CHECK_SS); -- ◆DEBUG END (以下省略) 【標準出力】 SQL> EXEC TESTSP(60); ・引数:監視基準時間(秒) = 60 ・システム時刻14 = 20070308222543 ・システム時刻(YYYYMMDD) = 20070308 ・W_CHECK_HH = 22 ・W_CHECK_MM = 25 ・W_CHECK_SS = -17 ※システム時刻[22:25:43]の60秒前は22:24:43なので、 [2007030822244300]という文字列を作成したいのです

  • 電卓の時間計算が変?

    自分が持っている電卓「MW-102CL」では時間計算ができる機能を持っています。 分換算するとき「hh:mm:ss×60」とするのですが、普通6秒=0.1分だと思いますがこの電卓は 18秒(0.3分),36秒(0.6分),54秒(0.9分)以外はなぜか変な時間になってしまいます(キレイではありませんが動画あり)。 これはなぜなのですか。それともそうゆうものなのですか。

専門家に質問してみよう