プロが教える店舗&オフィスのセキュリティ対策術

マイクロソフトアクセスについての質問です。現在アクセスで勤務時間表を作成しています。テーブルを作成し、勤務時間を入力します。この時、入力するフィールドの種類は、テキスト型で入力しています。1日から31日までレコードを入力し、入力し終わったところでレポートを作成しました。レポートは勤務時間を並べて最後に合計時間を出すというものなのですが、ページフッタのところに、テキストボックスを設置し、その中に「sum=[残業時間]」と入力しましたが、指定した式の構文が正しくありませんと表示されます。
おそらく勤務時間を入力しているフィールドがテキスト型のためエラーが出ているものと思われますが、勤務時間を入力フィールドを数値型にすると0:00分という表示ができなくなってしまいます。
やりたい作業としては、1:00+1:00=2:00というような計算をアクセスでする場合にはどのようにしたらいいのでしょうか。

A 回答 (6件)

補足:XDate関数、XTime関数は邪道。



そもそも、時間と時刻とは全く異なる概念。
時間は量を持っていますが、時刻には量は存在しないことは明らか。
ここを混同してシステムを組むことが間違い。
それは、社内で広く認知される考え方ではないでしょう。
例え、XDate関数、XTime関数で合計計算は出来たとしても何の意味もありません。

<勤務時間管理は時刻管理ではなく量としての時間管理>

この基本に立ち戻ることが必要と思います。

※XDate関数、XTime関数を示しておいてなんですが・・・。
※<質問を見てやおら作成>=無用な関数だからです。
    • good
    • 0

>ページフッタのところに、テキストボックスを設置し、


>その中に「sum=[残業時間]」と入力しましたが、
ページフッターでは集計関数は使えません
グループフッターまたはレポートフッターで集計します

>1:00+1:00=2:00というような計算をアクセスでする場合にはどのようにしたら
日付時刻型を時間計算に流用したとしても
時刻には24:00以上はありませんから24時間以内の表示しかできませんよ
数値型で計算を行いそれをxx:xxのような文字列に変換することになります
    • good
    • 0

tab1:



ID___日付___________出勤時間
1____2008/01/01__12:00
2____2008/01/02__11:00
3____2008/01/03__09:00
4____2008/01/09__00:01

このように出勤時間をHH:MM形式の文字列で入力すると仮定します。
一応、’25:00’との入力もOKということにします。

クエリ1:

合計出勤時間
32:01

SELECT XferHHMM(Sum(XferDAte([出勤時間]))) AS 合計出勤時間 FROM tab1;

さて、これがクエリで[合計出勤時間]を求めた結果です。
一応、欲する結果であると思います。

[イミディエイト]
? XferHHMM(XferDate("12:00")+XferDate("11:00"))
23:00
? XferHHMM(XferDate("23:00")+XferDate("09:00"))
32:00
? XferHHMM(XferDate("32:00")+XferDate("00:01"))
32:01

クエリの計算過程を再現すればこのようです。
要は、日付型にして計算してはHH:MM形式の文字列に直して対応しているということです。

Public Function XferHHMM(ByVal dteHiduke As Date) As String
  Dim dteYYYYMMDD As Date
  Dim HH     As Integer
  
  dteYYYYMMDD = CDate(Format(dteHiduke, "yyyy/mm/dd"))
  HH = Left$(Format(dteHiduke, "hh:mm:ss"), 2) + DateDiff("d", "1899/12/30", dteYYYYMMDD) * 24
  XferHHMM = Trim(Str(HH)) & Right$(Format(dteHiduke, "hh:mm"), 3)
End Function

Public Function XferDate(ByVal strHHMM As String) As Date
  XferDate = CDate(Format(DateAdd("d", Left$(strHHMM, 2) \ 24, "1899/12/30"), "yyyy/mm/dd ") & _
        Format(Left$(strHHMM, 2) Mod 24, "00") & Right$(strHHMM, 3))
End Function

片田舎の工場の一介の工員です。
ですから、これが最適な解決方法かどうかは甚だ自信がありません。
ましてや、質問を見てやおら作成した関数です。
参考程度にされてください。
    • good
    • 0

ページフッタにおいているというのも、別の意味で気になりますが...


「残業時間」というフィールドは、レポート上のコントロール名として存在するのでしょうか?

この回答への補足

残業時間フィールドは詳細上に存在するフィールドです。
ちなみに上記のご指摘があったのでレポートヘッダーに移動したところ0.170138888889という値が入りました。

補足日時:2008/01/31 16:42
    • good
    • 0

まず、質問時のタイプミスでなければ「sum=[残業時間]」が間違っています。


「=sum([残業時間])」です。
> 指定した式の構文が正しくありませんと表示されます。
というのは、上記が原因でしょう。

また、
> 入力するフィールドの種類は、テキスト型で入力しています。
これが、「テーブルへ直接入力している」という意味なら、
テーブルのフィールドは日付/時刻型で定義しておくべきです。
そうではなく、フォームで入力してるなら、
「テキスト・ボックス」とはいうものの、データ型はバリアントです。

この回答への補足

日付/時刻型にしてもエラーが表示されます。

ビュー表示にしたところ「#エラー」と表示されます

補足日時:2008/01/31 16:06
    • good
    • 0

>その中に「sum=[残業時間]」と入力しましたが、



=Sum([残業時間])

ではないでしょうか?

この回答への補足

大変失礼しました。

ご指摘の=Sum([残業時間])と入力しましたが、しかし、レビューするとエラーと表示されます。

補足日時:2008/01/31 15:48
    • good
    • 0

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