人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Access2003について質問です。
[テーブル1]に入室時間、[テーブル2]に退室時間を入れ、[テーブル3]に人数を入れるとします。
入室から1h30を超えると退室までの30分ごとに\2,000×人数として計算する為には、どのような式を使えば良いでしょうか?
こんなAccess初心者にお知恵を貸して下さい。

●質問者: chig
●カテゴリ:コンピュータ
✍キーワード:access 初心者 計算
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● Im_Me
●80ポイント

ものすごくベタですが、クエリーを使った計算方法です。

まず最初に、

[テーブル1]に入室時間

[テーブル2]に退室時間

[テーブル3]に人数

それぞれの項目(明細)を一致させるKEYを各テーブルに持たせます。

(もしひとつのテーブルに各項目をフィールドとして持てればKEYは要りません)

[テーブル1]

KEYテキスト項目でも数値でも(但し全てのテーブルで統一)

入室時間日付/時刻型

[テーブル2]

KEYテキスト項目でも数値でも

退室時間日付/時刻型

[テーブル3]

KEYテキスト項目でも数値でも

人数時刻型


次に選択クエリーを作ります。

SQLは以下のとおり



SELECT DateDiff("n",[入室時間],[退室時間]) AS 式1,

Int(DateDiff("n",[入室時間],[退室時間])/30) AS 式2,

IIf(DateDiff("n",[入室時間],[退室時間])>90,((Int(DateDiff("n",[入室時間],[退室時間])/30)-5)*2000)*[人数],0) AS 式3

FROM (テーブル1 INNER JOIN テーブル2 ON テーブル1.KEY = テーブル2.KEY) INNER JOIN テーブル3 ON テーブル2.KEY = テーブル3.KEY;


式1は入室時間と退室時間の差(分)を求めています。

式2は上記のテーブルを30分単位にしました。これが2000円の掛け数になります。

ただし、30分単位です。

それを踏まえて式3は、

入室時間と退室時間の差(分)が90分以上の場合(=一時間30分超え)

入室時間と退室時間の差(分)を30分単位で割り、更に一時間30分分(5)を差し引いた数に2000および人数を掛ける

…一時間30分Wを超えない場合は0

という内容のIF文になっています。


勝手にKEYをつけたりして解釈しましたが、もし意図する所が違っていたら補足お願いします。

あと、上記のIF文は30分とか一時間30分の線引き、2000円などがコテコテに書いてありますので、

それらはマスタ化した方が後々のメンテが良いかと思います。

◎質問者からの返答

うわー。ありがとうございます。

もう、1人でもんもんと考えちゃってこんがらがっちゃって・・・

早速がんばってみます!


2 ● hokuraku
●90ポイント ベストアンサー

(前の方とかぶってしまったら質問者様にはオープンポイントを、前の回答者様には当方へのポイント(あれば、ですが…)をそれぞれ送付させていただきます)


Accessでデータベースを作成し、テーブルを以下のように作成します。

http://www.tkadvance.com/database/access/chapter21.php

テーブル フィールド フィールド名 データ型 備考
テーブル1
フィールド1 ID オートナンバー型 主キー
フィールド2 入室時間 日付/時刻型
テーブル2
フィールド1 ID オートナンバー型 主キー
フィールド2 退室時間 日付/時刻型
テーブル3
フィールド1 ID オートナンバー型 主キー
フィールド2 人数 数値型

各IDは対応するようにしてください。また、入室/退室時間の書式は時刻(S)にします。

次に、テーブル同士のリレーションを作成します。

データベースのウィンドウでオブジェクトが選択されている状態で右クリックからリレーションを作成します。

http://makotowatana.ld.infoseek.co.jp/access/achowDefineRelation...

テーブル1?3をすべて追加し、テーブル1?3のidをすべてリレーションさせます。


次に作成したデータを基にクエリを作成し、計算結果の列を追加します。

http://mailsrv.nara-edu.ac.jp/~asait/visual_basic/access/part2.h...(「5.関数」参照)

「入室時間」「退室時間」「人数」の3つのフィールドからなるクエリの4番目に、式ビルダで以下の式を入れます。

式1: IIf(DateDiff("n", [テーブル1]![入室時間] , [テーブル2]![退室時間] )>90,Int((DateDiff("n", [テーブル1]![入室時間] , [テーブル2]![退室時間])-90)/30+0.9)*2000* [テーブル3]![人数],0)

これでクエリを作成すればOKです。

◎質問者からの返答

最近のはてなはこんな表示もできるの!

hokuraku様、分かりやすい説明有難うございます!

ポイントの事は気にしないで下さい!

(返したりとかしないで下さいね!)

本当に有難うございました。

がんばります。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ