• 締切済み

アクセスの複雑な条件について

以下のタリフに応じて利用料金を求めたいと考えております。 (1)9:00~21:00→20円/30秒 (2)上記時間帯以外は無料 利用開始/終了日、利用開始/終了時刻(時分秒)と利用時間(秒)を元に、料金計算を行います。 エクセルでは、利用開始/終了時刻を全て「秒」で表し(日跨の場合86400加算)IF文で時間帯別に複数条件を指定し、計算していました。アクセスでも料金計算を行いたいのですが、方法がわからず途方に暮れています。複雑なIF文以外にも良い方法はあるのでしょうか? ご教示よろしくお願い致します。

みんなの回答

  • gatyan
  • ベストアンサー率41% (160/385)
回答No.1

iif()などで対応できないら、コードモジュール内に作成した自作関数(Public関数)を呼び出すのはどうでしょう? SQLやクエリから呼び出す祭に引数も受け取れるし、もちろん値も返せます スピードや他のDBシステムに切り替える事を考えるとチョット悩みますが、そういう方法もあるって事で

関連するQ&A

  • Excel:勤務時間計の計算式がうまくいかない

    Excel2002を使用し、勤務表を作成しています。 以前こちらでアドバイスをいただき、作成することができました。 今回修正で、開始8:30終了17:05の場合、休憩45分、当日勤務時間7時間 50分と計算させたいのですが、何かアドバイスあればよろしくお願いし ます。 現在使用している計算式では以下のように計算されます。 開始8:00終了16:35の場合、休憩45分、当日勤務時間7時間50分 開始8:30終了17:05の場合、休憩60分、当日勤務時間7時間35分 ■8時-16時35分(定時)の場合 開始時刻:C列 終了時刻:D列 開始時刻を15分単位で切り上げる:P列:=CEILING(C7,"0:15") 終了時刻を15分単位で切り上げる:Q列:=CEILING(D7,"0:15") ■休憩時間 =IF(COUNT(C7:D7)<2,0,IF((P7<"12:30"*1)*(Q7>"13:15"*1),"0:45","0: 00"))+IF(D7>="16:50"*1,"0:15","0:00") 休憩時間は12:30から13:15までの45分。 終了時刻が16:35以降なら15分の休憩時間が加算。 開始、終了が入力されていないと0:00表示。 ■当日 勤務時間 =AND(C6*D6)*(MIN(IF(AND(D6>="12:30"*1,D6<="13:15"*1),"12:30",Q6), "16:35")-MAX(IF(AND(C6>="12:30"*1,C6<="13:15"*1),"13:15",P6),"08 :00")-IF((P6<"12:30"*1)*(Q6>"13:15"*1),"0:45","0:00")+FLOOR(MAX (D6,"16:50")-"16:49:59","0:15")) 開始、終了が入力されていないと空白 12:30~13:15の場合は12:30、16:35以降の場合は16:35、それ以外は終 了時刻のまま。 8:00以前は8:00、12:30~13:15の場合は13:15、それ以外は開始時刻の まま。 残業していないケースをIF文を使わずに計算したいため終了時刻が 16:50以前の場合は16:50と補正して、計算結果が00分になるように細工 。 言葉足らずでしたら、進んで補足させていただきますので、よろしくお 願いします。

  • Excel:特定の条件でFLOOR関数を使うには?

    Excelを使って、勤務表を作成しています。 開始時刻、終了時刻を入力すると、 終了時刻ー開始時刻ー休憩時間という具合に当日の勤務時間を出力させるようにしています。 当日の勤務時間を出力するセルには以下の条件が必要です。 (1)開始、終了時刻が入力されていない時、0:00と表示する。 (2)開始時刻8:30(もしくはその時刻より前)、 終了時刻17:05と入力された時、7:50と表示する。 (3)(2)の条件以外は15分単位で勤務時間を表示する。 15分単位で丸めるということでFLOORを使うのですが、 そうすると(2)の条件がまったく無視されてしまい、うまくいきません。 FLOORを特定の条件の時のみ、適用する方法があれば教えて下さい。 よろしくお願いします。 使用ソフト:Excel2002 ------------------------------------------------- ちなみに以下のような計算式を当日勤務時間が出力されるセルに書いて試してみました。 =IF(D9="17:05","7:50",IF(COUNT(C9:D9)<2,"0:00",FLOOR(D9-P9-E9,"0 :15"))) 計算式の意味↓ 終了時刻に17:05と入力されたら、当日勤務時間のセルに7:50と表示。 開始、終了が入力されないと、0:00と表示。 そうでなければ、終了ー開始(8:30以前を8:30と考えるセル)ー休憩で計算し、15分単位で表示。 とこのように書いてみたものの…うまくいきませんでした。

  • ファイルメーカーによる勤務時間計算を簡単にする方法についてお尋ねします

     出勤退庁が全く不定時な特殊派遣業務の管理作業をファイルメーカーPro9で行っております。  派遣報酬は時間制で、 実働時間(30分単位)×職務別時間制定額+深夜(22時~5時)従事時間×深夜加算定額  により構成されています。  不定時な出勤退庁の例は下記のとおりです。 (勤務)開始時刻~終了時刻(実働時間、深夜時間)      9:00~18:00(実働9.0H、深夜0)      20:00~3:00(実働7.0H、深夜5.0H)       23:00~7:30(実働8.5H、深夜6.0H)        23:30~4:00(実働4.5H、深夜4.5H)        1:00~4:30(実働3.5H、深夜3.5H)        2:00~9:00(実働7.0H、深夜3.0H)        21:00~7:00(実働10.0H、深夜7.0H)        まず実働時間の計算ですが、入力は上記の時刻どおり行うため、翌日にまたがる勤務のときはそのままだと実働時間がマイナスになります。 これを避けるため、その場合は終了時刻に1日(86400秒)を加算する次の式を定義しております。  出退庁時刻等の定義は、次のとおりです。 出勤時刻→「開始時刻」 退庁時刻→「終了時刻・入力」と「終了時刻・換算」 実働時間→「実働時間・時刻」と「実働時間・数値」 終了時刻・換算=If( 開始時刻>終了時刻・入力; 終了時刻・入力 + 86400; 終了時刻・入力 )  そして実働時間は 実働時間・時刻=終了時刻・換算-開始時刻  とし、これを数値化するため、 実働時間・数値=Hour(実働時間・時刻 ) + Round(Minute(実働時間・時刻) / 60; 2 )  としております。  さて最大の問題は前記実働時間中の深夜従事時間の算出です。  まずフィールド定義を 深夜開始=Time(22; 0;0) 深夜終了=Time(5; 0; 0) 深夜終了29時=Time(29; 0; 0 ) 深夜従事時間=深夜時間 深夜時間の数値=深夜時間・数値  とし、次の式により深夜従事時間を求めています。 深夜時間=If(終了時刻・換算 > 深夜開始; If( 終了時刻・換算> 深夜終了29時; 深夜終了29時;終了時刻・換算 )-If( 開始時刻>深夜開始; 開始時刻; 深夜開始 );0) + If( 終了時刻・換算>深夜終了; 深夜終了; 終了時刻・換算 )- If(開始時刻 <深夜終了; 開始時刻; 深夜終了 )  これを数値化するため、 深夜時間・数値=Hour(深夜時間) + Round( Minute(深夜時間) / 60; 2 )  以上が一連の式の流れですが、これらの式は何とも冗長で分かりにくいので、もっと簡単で分かりやすい計算式ができないか、悪戦苦闘しましたがいい智恵が浮かびません。  思い余ってファイルメーカーの時間計算に詳しい方のご指導をいただきたく投稿しました。  よろしくお願いします。

  • Excel:勤務時間の計算がうまくいかない。

    No.1468024の質問をした者です。 勤務表を作成しています。(Excel2002を使用) 終了時刻(D列)ー開始時刻(C列)ー休憩時間(E列)=当日の勤務時間を計算しています。 No.1468024の質問でアドバイスをいただき、以下のような計算式を記述しました。 <例> =AND(C13*D13)*(MIN(IF(AND(D13>="12:00"*1,D13<="13:00"*1),"13:00",D13),"17:40")-MAX(IF(AND(C13>="12:00"*1,C13<="13:00"*1),"12:00",C13),"09:00")-E13+FLOOR(MAX(D13,"18:00")-"17:59:59","0:15")) ほぼうまくいくのですが、開始時刻9:00終了時刻12:00とした場合、勤務時間4:00となり、間違ってしまいます。(正しくは勤務時間3:00。また開始時刻9:00終了時刻が12時から13時までの間の時刻で入力された場合も勤務時間3:00と出力したいです。) 休憩時間セルに以下のような計算式を書いています。 <例> =IF(COUNT(C13:D13)<2,0,IF(D13-"12:00"*1<=0,0,IF(C13-"12:00"*1>=0,0,IF(D13<"18:00"*1,"1:00","1:20")))) 休憩時間は12時から13時までの1時間。 終了時刻が17:40以降なら20分休憩時間が加算されます。 開始、終了が入力されていないと0:00表示。 言葉足らずでしたら、進んで補足させていただきますので、よろしくお願いします。

  • Excel:特定の時刻から15分単位で表示させるには?

    勤務表を作成しています。 終了時刻ー開始時刻ー休憩時間という具合に当日の勤務時間を出力させるようにしています。 当日の勤務時間を出力するセルには以下のような条件で計算式を書いています。 <例> =IF(COUNT(C13:D13)<2,0,IF(AND(C13<="9:00"*1,D13>="17:40"*1,"18:1 4"*1>=D13),"7:40"*1,IF(AND(C13>="12:00"*1,"13:00"*1>=C13,D13>="1 7:40"*1),"4:40"*1,IF(AND(D13>="12:00"*1,"13:00"*1>=D13),"3:00"*1, FLOOR(D13-P13-E13,"0:15"))))) (1)開始、終了時刻が入力されていない時、0:00と表示。 (2)開始時刻9:00(もしくはその時刻より前)、 終了時刻17:40から18:14の間の時刻で入力された時、7:40と表示する。 (3)開始時刻12:00から13:00の間の時刻、 終了時刻17:40で入力された時、4:40と表示する。 (4)終了時刻12:00から13:00の間の時刻で入力された時、3:00と表示す る。 (5)(1)~(4)の条件以外は終了時刻ー開始時刻ー休憩時間という計算を 行い、15分単位で丸める。 (1)~(4)の条件は変更なしで、(5)の条件を変えます。 (5)終了時刻が18:15以降、当日勤務時間が7時間40分以上になる。 7時間40分から15分単位で丸める。 <例> 開始時刻9:00、終了時刻17:40の時、勤務時間7時間40分。(定時) 開始時刻9:00、終了時刻18:14の時、勤務時間7時間40分。 開始時刻9:00、終了時刻18:15の時、勤務時間7時間55分。 (一番上に書いたの計算式だと勤務時間が7時間45分になる) 開始時刻9:00、終了時刻18:16の時、勤務時間7時間55分。 ※P13は9:00以前の開始時間を9:00と考えさせる、 12-13時の時間を13時と考えさせる、 上記以外はそのまま表示させるという計算式を書いたセル。 (5)のような条件を加えた計算式が可能であれば教えて下さい。(アドバイス、ヒントでもかまいません。) よろしくお願いします。 使用ソフト:Excel2002

  • Excel 関数の引数で時刻を使いたい

    Excel2007です。 時間の計算をしたいのですがIF関数の引数に22:00等を使う方法を教えて下さい 次のようにすると22時までは計算されるのですが22時以降が計算されません。引数の時間の使い方が間違っているような気がするのですが、時刻を引数として使う方法を教えて下さい。 A1に日付  B2に開始時刻 =IF(WEEKDAY(A2)=7,"8:00","17:30") 土曜日は、8:00 月曜から金曜は、17時 日曜日は、入力しない  C2に終了時刻  手入力 例えば23:00 D2に =IF(C2<="22:00",C2-B2,"22:00"-B2)  開始時刻から22:00時までの時間 E2に =IF(C2>"22:00",C2-"22:00",0)  22:00以降終了時刻までの時間 よろしくお願いします。

  • エクセルの表計算の式

    金額計算の表を作成しています。 顧客の個人か団体で計算の仕方が違うのでいい方法がないか教えていただきたいのですが。 使用場所 開始時刻 終了時刻 利用時間 人数 単価 料金 区分 といった具合に項目がありまして、使用場所には『大部屋』か『個室』かが入力されます。 【終了時刻-開始時刻=利用時間】と計算式を入力してます。 【利用時間×単価=料金】です。 使用場所が大部屋で、区分が団体の場合の料金はこれで計算できるのですが、大部屋を個人で利用のときは【利用時間×人数×単価】としたいです。 そこで、区分に個人と入力された場合に料金のセルに入ってる式を【利用時間×人数×単価】に切り替える方法をお教え下さい。

  • バッチファイルの時刻

    下記は、6秒待って時刻を表示するのを繰り返す記述ですが、 「開始」の時間と「終了」の時間が同じになってしまいます。 【コード】 -------------------------------------------------- :flg_check if exist %FlgFile% ( echo %time% 開始 echo WScript.Sleep 6000 > %TmpFile% cscript //NoLogo %TmpFile% echo %time% 終了 goto flg_check ) -------------------------------------------------- 【結果】 -------------------------------------------------- 10:26:14.30 開始 10:26:14.30 終了 10:26:20.41 開始 10:26:20.41 終了 -------------------------------------------------- 開始時刻の6秒後の時刻が終了時刻にならないのですが、なぜでしょうか?

  • access2000にてクエリで日付計算

    アクセスのテーブルにて 開始時間 00:00 と終了時間 99:99 を持っています クエリで 終了時間-開始時間を計算し 実働時間 00:00 を出したいのですが 普通に計算すると0.023088・・・とかの数字になります 実働時間を計算する方法はありますでしょうか? 開始時間 終了時間ともデータ型は 日付/時刻型になってます

  • ACCESSの時刻の引き算

    テーブルに「開始時刻」と「終了時刻」のフィールドがあり、それぞれに「8:15」,「17:00」のように日付/時刻型のデータが入っています。 「終了時刻」から「開始時刻」を引いて、同じテーブルの「時間」フィールドに「4.5hr」、「2.0hr」というような「数値型」のデータとして自動で計算したものが入るようにしたいです。 可能ですか? ACCESSは現在勉強中です。いろいろ追加で質問されていただく可能性があります。よろしくお願いします。

専門家に質問してみよう