質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

Q&A

解決済

2回答

9938閲覧

ACCESSのクエリで時間の合計時間を出した時に変な数値になる。

退会済みユーザー

退会済みユーザー

総合スコア0

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

0グッド

0クリップ

投稿2021/04/26 10:03

編集2021/04/27 00:00

ACCESSのクエリの集計を使って時間の合計を出しました。
●●:●●となっていて、何時何分だけの合計時間を足していったクエリを作成したいのですが、
結果的に【6.94444444444442E-03】という感じになってしまいます。

データ型は【日付/時刻型】で
書式【hh\時nn\分】としていて、それ同士を足し合わせているのですが、、、
この辺りのデータ型の部分に何か間違いがあるような気がするのですが、分からず
もしよろしければご教授頂けますと幸いです。

VBAの式
・開始時間:8:00
・終了時間:8:17

と入っていて、黄色の止まった場所にも開始時間、終了時間にはそれが入っているのですが、
【Me.tx_合計時間.Value】には、1990/01/20と入っていて、時間差の分が出ません。

イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

seastar3

2021/04/26 11:39

日付/時刻型は、整数が日数で小数部分が1日の十進数扱い(例.正午なら0.5)になっています。合計値の出力書式をFormat関数で指定してみましょう。
guest

回答2

0

ベストアンサー

Accessの 日付/時刻型 は日付と時刻を表すもので、時間を表すものではありません。
時刻と時間は別の概念というのは理解してますよね。(時刻は時間軸上の位置、時間は長さをあらわすものです。)

Accessには時間型というのはありませんので、テーブルに格納するときは分単位とか秒単位の数値に変換して格納することになります。書式【hh\時nn\分】としているとこうことは分単位で格納すればいいでしょう。

例えば、開始時刻 終了時刻 というのがあってそこから時間を計算する場合は、Datediff("n",[開始時刻],[終了時刻]) という式で分単位の時間に変換できます。これを集計することになります。

分単位の数値を hh時nn分という書式で表示するには、
[時間] \ 60 & "時" & [時間] Mod 60 & "分"
というような式で変換します。


Accessで時間を扱う場合の一例を提示しておきます。
(一つの例ですので他の方法もあります。)

テーブルに 開始時刻, 終了時刻 という日付/時刻型のフィールドがあるとします。
このテーブルからクエリを作成します。テーブル名は Tbl1 と仮定してます。

sql

1SELECT Tbl1.*, DateDiff("n",[開始時刻],[終了時刻]) As 時間 From Tbl1;

クエリ名は Qry1 と仮定します。
このクエリをフォームのレコードソースとします。このフォームで
開始時間:8:00
終了時間:8:17
と入力すると時間には、17 と分単位の数値が表示されます。

開始時間:8:00
終了時間:10:17

だと、137 と表示されます。137分という意味です。
これを、2時間17分と表示させたい場合は、テキストボックスを配置して、コントロールソースを下記のように設定します。

=[時間] \ 60 & "時間" & Format([時間] Mod 60, "00") & "分"

ここまでVBAは必要ありません。

この時間を集計クエリで集計したい場合もあると思います。その場合も時間を集計します。

sql

1SELECT 2 Sum([時間]) AS 時間計, 3 [時間計]\60 & "時間" & Format([時間計] Mod 60,"00") & "分" AS 時間計hn 4FROM Qry1;

上記のクエリは全合計をだすように単純化してますが、必要に応じてグループ化してください。

時間計 には分単位の数値、時間計hn には h時間nn分という表示になります。

この式だと例えば、35時間17分 というような24時間以上の表示も可能です。
日付/時刻型ではこの表示は無理です。

投稿2021/04/26 11:58

編集2021/04/27 01:55
hatena19

総合スコア33790

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/04/26 23:33 編集

ご丁寧に教えていただきありがとうございます。 時刻と時間の概念の違いは考えたことありませんでした。ありがとうございます。 上記で試してみたのですが、 Me.tx_合計時間.Value = DateDiff("n", [開始時間], [終了時間]) だと、 [開始時間]には【8:00】と[終了時間]には【8:11】という時間が格納されているのですが、 【Me.tx_合計時間.Value】という方には、【1990/01/11】という数値が入っていて、 フォームではボタンを教えてもエラーが起きてしまい、うまく起動しません。 開始時間と終了時間を【Me.tx_開始時間.Value = h & "時" & m & "分"】という方法で導いてきていることが原因なのでしょうか? どこを直せばよいのか、現状検討もつかず、お手数ですが、ヒントなど教えていただけますと幸いです。 現在のVBAの式を追記で画像載せました。 お手数ですが、よろしくお願いいたします。
退会済みユーザー

退会済みユーザー

2021/04/27 08:41 編集

詳しく教えていただきありがとうございます。 上記順番で試しているのですが、 >>SELECT Tbl1.*, DateDiff("n",[開始時刻],[終了時刻]) As 時間 From Tbl1; の箇所で、クエリに 式1: (SELECT Tbl1.*, DateDiff("n",[開始時刻],[終了時刻]) As 時間 From Tbl1;) と入れると、 下記エラーが出てしまい、現状、再現ができない状況です。 ちょっと自分にはまだサブクエリは難しく、 少し勉強をしたいと思います。ありがとうございました。 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー メイン クエリのFROMの句の予約語EXISTSを使用しないフィールドを複数返すサブクエリを作成しました。サブクエリのSELECT ステートメントを変更し、1つのフィールドだけを指定してください。 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
hatena19

2021/04/27 23:08

SQLコードなので、クエリのSQLビューに記述してください。 デザインビューのフィールド欄に記述するなら、 時間: DateDiff("n",[開始時刻],[終了時刻]) です。
guest

0

FormatDateTime関数で、

access

1FormatDateTime([開始時間]+[追加時間])

と指定するか、
Format関数で、

access

1Formtat([開始時間]+[追加時間],"hh:nn:ss")

と指定するか、してみましょう。

投稿2021/04/26 11:48

編集2021/04/26 12:04
seastar3

総合スコア2285

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hatena19

2021/04/26 12:01

24時間以内なら、その式でもいいのですが、24時間以上になる場合は、その式では破綻します。
seastar3

2021/04/26 12:03

hatena19さんの仰有るとおりですね。加算に修正します。
hatena19

2021/04/26 12:11

いや、そういう意味ではないです。 クエリで集計しているとのことなので、集計値が24時間以上になることもあり得るのでそれを考慮する必要があるということです。 また、FormatDateTime や Formtat で変換すると文字列になりますので、集計すること自体できなくなります。(日付/時刻型は内部的には浮動小数点数なので集計することはできます。)
seastar3

2021/04/26 12:18 編集

hatena19さん、そうですね。 時間の差なら、シリアル値を単純に計算して、"[終了時間] + 1.0 - [開始時間]"の式で通用するのでしょうが、質問が指定した時間を足したものを出力したいということなので、差の問題は関係ないと判断して、単純に回答を修正しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問