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"としか 使用できません。何かいい方法は無いでしょうか? すみませんがお力添え下さい。 |
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関数とはほぼ同じ機能のもの(エラー値で微妙に仕様が違いますが)を作成しましたが、ちょっと ステップ数が多いのとバグが潜んでそうなのでアップをためらっているところです。(軽いデバッグはしたのですが。) 使ってみようという覚悟がございましたらアップします。責任は取れませんが。 ではでは。 |
AC Ver:[Ac2000] 基本的に、Accessでは分単位でもつようにした方がいいと思います。 それなら、集計とかにも普通に使えますし。 表示する必要があるときだけ、変換するようにしておけば、なにも問題ないと 思いますけど。 |
--- このBBSは、Microsoft Access Club が運営しています ---