「Web出版サイト」ベータ公開

Q&A集[?]

当サイトでのご質問の受付は終了しました

すべてのコンテンツを読み込み専用としたため、回答欄からも投稿できません

Apache OpenOffice/LibreOfficeのご質問はそれぞれのフォーラムへご投稿ください

質問コーナー

サイト内検索

分類メニュー

関連サイト


本日:1
昨日:0
総数:1687
現在:4


LOOKUP関数で特定の値の場合、正しい値を取得しない?!

ページOpenOffice.org FAQの登録ページ
投稿者devie
分類
edit/refer
優先順位
edit/refer
状態
edit/refer
カテゴリー
edit/refer
投稿日2009-09-17 15:22:56 (木)
OSWindows XP
依存するページ
バージョン
edit/refer

メッセージ

回答ページでは行末に「~」を付加する必要はありません

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)で解決いたしました。
丁寧なわかりやすいご回答
ありがとうございました。
大変助かりました。

お名前:
題名: