• ベストアンサー

アクセス上で4桁の数字を時刻として何時間経過したか計算する方法

0930と2215という2つの4桁のただの数字があります。 2215-0930=1285と言う答えになります。 が、この4桁の数字を時刻として 09:30と22:15の間は12時間45分と計算し、表示形式を12.75とする方法を知りたいです。これをアクセス上のデータで行いたいのですが、いい方法がありましたら教えて下さい。

質問者が選んだベストアンサー

  • ベストアンサー
  • wolv
  • ベストアンサー率37% (376/1001)
回答No.1

アクセスのことは全然わからんのですが、 割り算の余りをもとめる、とか、 小数点以下を切り捨てた値を求める、という関数や、 変数などはありますか? あれば、わりと簡単な計算でできます。 t1=930 (または、2215) とすると、 h1 = 小数点以下切り捨て関数(t/100) m1 = あまりを求める関数(t,100) のような計算をすると、 hに9が、mに30が入ります。こうすると、 t1=h+m/60 でt1が9.5になります。 2215の方も同様の計算で t2=22.25 になります。 こうなれば、普通の引き算 t2-t1 で12.75が出せます。

その他の回答 (4)

noname#4564
noname#4564
回答No.5

No.2さんWrote > Private Function .... > これだと、別モジュールから呼び出せません。 > クエリ、VBAなどで使用できます > という趣旨なら、Publicスコープの方がよろしいかと・・・。 (2バイト文字の関数名というのも如何なものかと・・・) > '時刻補正(次の日か?次の日だったら一日追加) > If wEtime <= wStime Then wEtime = wEtime + 1 日付の情報がない限り、wEtime = wStime のときを同時刻と解釈してゼロを返すか、翌日と解釈して24(または翌々日以降と解釈して24の倍数)を返すか判断できないと思いますが、どうでしょうか? No.3さん、端数処理で演算誤差が出るようで、 ?fnc("2215", "0930") → 11.7666666666667 となります。 (「自信あり」とのことですので、私の方が間違えているのかもしれませんが・・・) No.4さんWrote > =Hour(TimeSerial(Int(2215 / 100) - Int(930 / 100), (2215 Mod 100) - (930 Mod 100), 0)) + Minute(TimeSerial(Int(2215 / 100) - Int(930 / 100), (2215 Mod 100) - (930 Mod 100), 0)) / 60 Intより\演算子の方がたぶんベターです。(この場合、オペランドが長整数を超えることはないはずなので) = Hour(TimeSerial((2215 \ 100) - (930 \ 100), (2215 Mod 100) - (930 Mod 100), 0)) & ":" & Minute(TimeSerial(Int(2215 / 100) - Int(930 / 100), (2215 Mod 100) - (930 Mod 100), 0)) とすれば、"hh:nn"形式の文字列に変換する手間が省けると思います。 ちなみに、私なら、 Public Function GetTimeDiff(Stime As Integer, Etime As Integer) As Date   GetTimeDiff = CDate(Format$(Etime, "@@:@@")) - CDate(Format$(Stime, "@@:@@")) End Function または、 Public Function GetTimeDiff(Stime As Integer, Etime As Integer) As String   GetTimeDiff = Format$(CDate(Format$(Etime, "@@:@@")) - CDate(Format$(Stime, "@@:@@")), "hh:nn") End Function とします。 (処理速度面では難があるかもしれませんが、記述が簡明です)

  • ja7awu
  • ベストアンサー率62% (292/464)
回答No.4

=Hour(TimeSerial(Int(2215 / 100) - Int(930 / 100), (2215 Mod 100) - (930 Mod 100), 0)) + Minute(TimeSerial(Int(2215 / 100) - Int(930 / 100), (2215 Mod 100) - (930 Mod 100), 0)) / 60 になると思います。(VBAを使うことの程でもないと思いますが・・・) 使用する状況が解らないので、数字をそのまま使いました。

  • tksoft
  • ベストアンサー率36% (99/273)
回答No.3

こんな感じの関数を使用してはどうでしょう。 Function fnc(t1 As Integer, t2 As Integer) As Double Dim M As Integer Dim H As Integer H = Int(t1 / 100) - Int(t2 / 100) M = (t1 - Int(t1 / 100) * 100) - (t2 - Int(t2 / 100) * 100) If (M < 0) Then M = M + 1 H = H - 1 End If fnc = H + M / 60 End Function

回答No.2

お疲れ様です 下記コードをモジュールに貼り付けます '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Private Function 経過時間算出(Stime As String, Etime As String) As Single Dim wStime As Date Dim wEtime As Date Dim wMinutes As Long '計算対象時刻取得 wStime = CDate(Mid(Stime, 1, 2) & ":" & Mid(Stime, 3, 2)) wEtime = CDate(Mid(Etime, 1, 2) & ":" & Mid(Etime, 3, 2)) '時刻補正(次の日か?次の日だったら一日追加) If wEtime <= wStime Then wEtime = wEtime + 1 '差分の分算出 wMinutes = DateDiff("n", wStime, wEtime) '経過時間の算出 経過時間算出 = (wMinutes \ 60) + ((wMinutes Mod 60) / 100) End Function '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 使い方は、 経過時間算出("2215","0930") クエリ、VBAなどで使用できます 参考になれば...

関連するQ&A

  • 有効数字3桁を導く計算するときは4桁で←本当?

    有効数字3桁の答えを求める計算するときは4桁で←これは本当? 大学受験で使う化学の参考書に、 「乗除算で有効数字3桁の答えを導くとき、有効数字4桁で計算を進めていき、計算結果の4桁目を四捨五入する」 なることが書かれていました。 この通りで言うと例えば 3桁×5桁×6桁 の式を変形して 3桁×4桁×4桁 としても最終的には答えは同じになるのですよね。 なんだか信じられないです。 数学的に誤差は出ないと証明できるのでしょうか? この計算法が使えるときと使えないとき等もあれば教えていただきたいです。m(_)m

  • Accessで、24時間以上の日付/時刻型の計算

    Accessで、24時間以上の、47時間59分までの日付/時刻型の計算方法はありませんか? 例:シフト勤務 17:0:000~33:00:00 休憩01:00:00 の勤務時間を計算するために33:00-17:00-01:00:00= ・・勤務時間という計算をしたいのですが、まず33:00:00値を日付/時刻型で持つことができないので、テキスト型で持たせると Accessで計算が出来ません。 よい方法はありますか? つたない質問で申し訳ありませんがよろしくお願いします。

  • 時刻計算

    1)時刻を2つ入力してかかった時間を計算したい 2つのセルに時刻を 【例】16:00 17:00 のように入力してB1-A1としたら1:00と出てきたのですが、 24時をまたいでしまうと、この方法が使えません。 2)かかった時間を”分”で表示したい セルの書式設定、ユーザー定義で h*60+m"分" としてみましたが、「入力した表示形式が正しくありません」 と出てしまいます。 何か方法はないでしょうか?

  • 時刻を用いた計算(異なる属性のセル同士の計算式?)について教えてください

    時刻を用いた計算(異なる属性のセル同士の計算式?)について教えてください まず、やりたいことというのは、 例えば、時給1000円のアルバイトの8時間の給与を エクセルで計算させるときに、 セルの表示形式が ・“時刻”の8:00(8時間) のものと、 ・“数値”の1000(1000円) のものを使って ・8000円 という答えを導き出す計算式を書くには どうすればよいのでしょうか。 単純に =8:00*1000 では、計算できないようなので(当たり前でしょうけど^^;) 私はよく分からないので 15分(0:15) なら 0.25 30分(0:30) なら 0.5 45分(0:45) なら 0.75 60分(1:00) なら 1 というふうに手動で数値化して計算していました。 よろしくお願いします。 ※意味不明な点などありましたら加筆&補足いたします。

  • 秒数の計算方法について

    エクセルで、開始時間と終了時間を入力して何秒掛かったか計算したいのですが。 たとえば、開始102216(10時22分16秒)終了102650(10時26分50秒)で、答えは274秒だとわかるのですが、データが大量の為(約1万6000件以上)関数などで 計算する方法を教えてください。ちなみに、データは 102216のように数字になっていて時刻表示に直すことは出来ません。どうかよろしくお願いします。

  • エクセルで数字の桁を揃えた後の計算式

    エクセルの列で順に 「1、2、3、4、5・・・・」 と打ち込んだものを 「001-1、002-1、003-1、004-1、005-1、・・・・」 の表示に換えたいのですが、やり方が分かりません。 数字の桁を3桁に合わせるのは、「セルの書式設定→表字形式→ユーザー設定→000」で出来たのですが、 =001と表字させたセル&”-1”と計算式を入れたところ「1-1」となってしまいます。 何か計算式等で「001-1」の表字にもってくるやり方はあるのでしょうか。 よろしくお願いします。

  • 経過時間を表示したい

    現在の時刻と開始時刻から、経過時間を表示したいです。 現在の時刻は16時30分だったら、16:30 開始時刻は12時15分だったら、12:15という変数があります。 答えで4:30という数字が欲しいです。 経過時間は24時間以下を考えれば良いです。

  • VB2010で、時刻と時間の計算について

    時刻と時間の計算で、どうするのが最適か教えて下さい。 1…2つの時刻、例えば「08時28分」から「17時04分」までの時間を計算し、Labelにその時間「8時間36分」と表示する 2…3つの時間、例えば「8時間36分」、「6時間08分」、「9時間54分」の合計を計算し、Labelにその合計を表示する 3…上記2番目の平均を計算し、Labelにその平均を表示する よろしくお願いします。

  • 有効数字の計算について質問です。

    有効数字の計算で (3.6+5.22)×1.2225=10.78245 について、()内の有効数字は二桁なので、答えは11だと思うのですが、答えは10.8でした。 先生に質問すると、()内の有効数字は今回は三桁なんだ、とおっしゃってました。 しかし3.6+5.22の計算ならば答えは有効数字二桁の8.8ですよね。 なんだか納得できません。理由のわかる方がいらっしゃれば教えてほしいです。 また、有効数字の計算をするときは有効数字+一桁で計算しますよね。それと関係あるのでしょうか。

  • エクセルでの5桁の時間の計算方法

    EXCELでセルの書式設定の表示をユーザー設定の[h]:mm:ssにしています。 4桁の時間でしたら普通に入力出来るのですが、5桁の時間を入力しようとすると文字として認識されてしまいます。 例えば1000時間20分を「1000:20」と入力すると「1000:20:00」と表示されますが、10000時間20分を「10000:20」と入力すると「10000:20」と表示されてしまいます。 その後集計等でオートSUMの関数で計算しようとしても、4桁の時間は普通に計算出来ますが、5桁の時間は数値として反映されません。 どのように設定すればよいか教えてください。

専門家に質問してみよう