LOOKUP関数で特定の値の場合、正しい値を取得しない?! †
ページ | OpenOffice.org FAQの登録ページ |
---|---|
投稿者 | devie |
分類 | |
優先順位 | |
状態 | |
カテゴリー | |
投稿日 | 2009-09-17 15:22:56 (木) |
OS | Windows XP |
依存するページ | |
バージョン |
メッセージ †
回答ページでは行末に「~」を付加する必要はありません |
LOOKUP関数で、ある特定の値の時だけ、別な値を取得してしまう現象です。
タイムカードの打刻時間の開始(S1)と終了(E1)を入力し、
S1,E1をそれぞれ、CEILINGとFLOOR関数で15分ごとに
繰り下げ(S2)
CEILING(B7;TIMEVALUE("0:15");0)
及び
繰上げ(E2)
FLOOR(C7;TIMEVALUE("0:15");0)
し、
E2-S2で実労時間(A1)を求め、
A1を別シート(時間変更※)に用意したリストと照合し値を求めています。
LOOKUP(F7;時間変更.A2:A51;時間変更.B2:B51)
※ここでのF7はセルの位置です。F7にこの関数を設定し値を表示させています。
※時間変更
0:15 0.25
0:30 0.50
1:00 1.00
等
このとき、もしA1が0:30の場合は、0.50という値が取得されます。
ここでおきている問題になっている現象は、
S2が15:00で、E2が15:30の場合です。
そのほかの時間帯では(例えばS2が16:00、E2が16:30等)正常に動くのですが、
15:00〜15:30の場合だけ、A1は0:30となるのに、
取得してくる値がどうしても0.25となってしまうんです。
ヘルプ等を何度も見直したり、場所を変えたり、名前を変えたりいろいろしてみたのですが、
どうしてもこの時間帯だけ1つ前の値を持ってきてしまいます。
原因がわからず、どうしたものかと悩んでいます。
もし、理由や解決方法がお分かりになる方がいらっしゃったら教えてください。
よろしくお願いいたします。
小数誤差によるものです †
K.Tsunoda (2009-09-17 16:22:31 (木))
手入力した時刻/時間データと違って、計算で求めた時刻/時間データには
『小数誤差』の問題が付いてきます。
> 15:00〜15:30の場合だけ、A1は0:30となるのに、
> 取得してくる値がどうしても0.25となってしまうんです。
セルでの見た目では [ 0:30 ]と表示されていても、実際のシリアル値
では、この場合、0:30の値に非常に小さい「マイナスの小数誤差」が
加わっています。その為、検索ではひとつ下の結果になります。
「Excel 小数誤差」で検索すれば解説サイトが沢山ヒットしますよ。
回避策(1)
計算で求めた時刻/時間データを、一旦、時刻文字列を経由してシリアル値
に再変換する事で小数誤差の無い時刻/時間データに直します。
=VALUE(TEXT(時間; "[h]:m")) <-- 24:00超の可
回避策(2)
計算で求めた時刻/時間データを【分】ベースの【整数値】で処理する。
=TEXT(時間; "[m]")*1
当然、検索リストのキーも【分】ベースで作成します。
2:30 なら 150、24:30 なら 1470
ありがとうございました。 †
devie (2009-09-18 10:50:17 (金))
回避策(1)で解決いたしました。
丁寧なわかりやすいご回答
ありがとうございました。
大変助かりました。