Accessフォーラムの過去ログIndexページAccess超初心者対象ForumAccess初級者対象ForumAccess初・中級者対象ForumAccess VBA Tips ForumDAO、ADO、SQL Forumサポートフォーラム

     

No.8271 エクセルで作った勤務時間の判定式をアクセスのクエリで

■8271 /inTopicNo.1)  エクセルで作った勤務時間の判定式をアクセスのクエリで
    □投稿者/ yk 一般(2回)-(2003/07/26(Sat) 15:41:19)

      AC Ver:[2000] 
      OS Ver:[WinXP] 

      アクセスで個人別勤怠のDBを作っているのですが、勤務時間計算のところで詰まってしまいました。
      どういうところで詰まったかというと、

      エクセルで残業時間、時差時間などを出勤退勤時間を入れると自動的に答えが出るように
      してあるのですが、

      =IF(OR(B4="",C4=""),"",IF(AND(B4<TIMEVALUE("22:00"),E4>=TIMEVALUE("19:00")),
      MIN(E4,TIMEVALUE("22:00"))-MAX(B4,TIMEVALUE("19:00"))))-
      IF(AND(F4>=TIMEVALUE("19:00"),F4<TIMEVALUE("22:00")),1/24,0)

      という式が時差の判定として入っているのですが、
      エクセルで"Timevalue"関数を使用すると24時以降の計算では"25:00"や"36:00"として
      使用できるのに対し、アクセスでは24時以降の時間は"25:00"としたくても、"1:00"としか
      使用できません。何かいい方法は無いでしょうか?
      すみませんがお力添え下さい。



■8291 /inTopicNo.2)  Re[1]: エクセルで作った勤務時間の判定式をアクセスのクエリで
    □投稿者/ Dodonpa 一般(2回)-(2003/07/29(Tue) 21:20:37)

      AC Ver:[Access2000SR3] 


      こんにちは。
      
      >エクセルで"Timevalue"関数を使用すると24時以降の計算では"25:00"や"36:00"として
      >使用できるのに対し、アクセスでは24時以降の時間は"25:00"としたくても、"1:00"としか
      >使用できません。何かいい方法は無いでしょうか?
      >すみませんがお力添え下さい。
      
      調べてみたのですが、エクセルのTimeValue関数とアクセスのTimeValue関数は同じ名前の関数ですがまったく
      別物ですね。両者とも引数は日付/時刻を表す文字式ですが、関数値はエクセルでは0から0.99999999の少数、
      アクセスでは時刻を表すバリアント値を返します。
      こういうときは、VBAで処理するかエクセルのTimeValue関数と同等のものを作成するしか思いつかないのでが、
      一応、後者でやってみました。
      ところが、エクセルのTimeValue関数の仕様が調べていくうちに自分にとって複雑であることに気がつきました。
      以下に例を挙げて見ますと
      
      <引数>							<エクセルTimeValue>		<アクセスTimeValue>
      "22-aug-1968 2:24"			0.1(2時24分)				2:24:00					これはヘルプ通り
      "22-aug-1968"					0(0時0分)						0:00:00					同上
      
      "22-aug-1968 2時24分"		#VALUE							2:24:00					このあたりから違いが・・・
      "22-aug-1968 2:"				0.083333333(2時0分)		実行時エラー'13'
      "2: 22-aug-1968"				0.098611111(2時22分)	実行時エラー'13'		日付と時間をひっくり返すとダメ
      
      "3:65"							0.170138889(3時65分)		実行時エラー'13'		ykさんのおっしゃる通りです。
      												  (4時5分)
      "25:65"							#VALUE							実行時エラー'13'		24時、60分、60秒以上が2つ以上あるとエラーになる
      
      という感じです。
      エクセルのTimeValue関数とはほぼ同じ機能のもの(エラー値で微妙に仕様が違いますが)を作成しましたが、ちょっと
      ステップ数が多いのとバグが潜んでそうなのでアップをためらっているところです。(軽いデバッグはしたのですが。)
      
      使ってみようという覚悟がございましたらアップします。責任は取れませんが。
      
      ではでは。
      
      



■8292 /inTopicNo.3)  Re[2]: エクセルで作った勤務時間の判定式をアクセスのクエリで
    □投稿者/ イケガミ 助手(847回)-(2003/07/30(Wed) 00:47:11)

      AC Ver:[Ac2000] 


      基本的に、Accessでは分単位でもつようにした方がいいと思います。

      それなら、集計とかにも普通に使えますし。
      表示する必要があるときだけ、変換するようにしておけば、なにも問題ないと
      思いますけど。

--- このBBSは、Microsoft Access Club が運営しています ---