[[20090419173819]] 『VLOOKUP』(たか) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『VLOOKUP』(たか)
 VLOOKUPで検索した時刻と直接入力した時刻は違う結果になるのですか?
 シフト表を作成しているのですが出勤退社休憩の時刻を検索した結果と手入力した結果
 が違うみたいたいで実際同じ時刻ですが同じ時刻を手入力すると正しい結果をだしてきます。
 これはなぜなのでしょうか?  
 よくシフト表に使われるセルに塗りつぶした四角の記号の表示です。
 説明が難しく詳しい方お助けください

 VLOOKUP関数で検索した場合に参照するセルの値が
 既に手入力したものと違っていると思います。

 たとえば、片方は 時刻の計算をした結果である など。

 エクセルは小さい値の計算が苦手です。
 時間はシリアル値で管理されていて
 一日が「1」ですから、時間や分となると
 少数以下の小さい値の計算が絡んできます。

 このあたりが参考になりそうですが
[[20090219185633]]『複数の条件を満たす時間のカウント』

 まるめを行って使用する方法が良くとられると思います。
 こちらの、みやほりんさんご提示の参考ページに
 色々な例が載っていますので、ご覧になってはどうでしょう。
[[20060202151311]]『時間の計算と単位の割出』(かな)

 (HANA)  

 単純に8:00と入力したA1のセルを検索しています。
 意味として小数点に直して検索しましたが何も変わりませんでした。
 関数なのでしょうか?(たか)

 どこにどのようにデータが入っていて
 どの様な数式を使っていて
 結果がどのようになるのですか?

 実際に希望しない状態になった時の
 ワークシートの状況をご説明ください。

 >実際同じ時刻ですが同じ時刻を手入力すると正しい結果をだしてきます。
 ということは、(どちらのセルかわかりませんが)
 片方のセルの時刻は【入力したものではない】と言う事ですよね?

 >VLOOKUPで検索した時刻と直接入力した時刻は違う結果になるのですか?
 このご質問から、データの状況は
	[A]	[B]	[C]	[D]	[E]
[1]	記号	時間		検索値	結果
[2]	●	8:00		△	12:00
[3]	△	12:00			
[4]	◆	17:00		確認	D5セルと等しいか?
[5]				12:00	同じ
 この様になっていて、D2セルに
=VLOOKUP(D2,$A$2:$B$4,2,FALSE)
 VLOOKUP関数で求めた値が、D5セルに手入力した「12:00」と等しいか?
 を確認するためE5セルに
=IF(E2=D5,"同じ","違う")
 を入れた場合「違う」と出る。
   (実際は、B2:B4セルも手入力していれば、「同じ」と出ます。)
 そこで、今回の
 「検索した時刻と直接入力した時刻は違うか?」
 というご質問につながりそうですが・・・・

 >単純に8:00と入力したA1のセルを検索しています。
 時刻同士を検索しているのですか?

 こんな感じになっていて
	[A]	[B]	[C]	[D]	[E]	[F]
[1]			時刻			
[2]	開始	終了	8:00	9:00	10:00	11:00
[3]	9:00	10:00		■		
[4]	9:00	11:00		■	■	
 D3,D4,E4セルに色をつけたいとか?

 いずれにしても、数式を作る場合にはセル番地は必要ですし
 なさりたいことのイメージもつきやすいので
  レイアウト・セルの値(数式が入っているなら、その数式)、
  それぞれのセルの値として取りうる範囲の説明は
 しておいたほうが良いですよ。

 (HANA)


	[D]	[E]	[F]	[G]	[H]	[I]
[3]                                 1:00     1:30     2:00
[4]						                      
[5]	開始	終了	休憩	                                           [6]	9:00	10:00	13:00	■	■	
[7]	9:00	11:00		■	■	

D6に=IF(ISNA(VLOOKUP($AH$1,予定勤務時間記入!$D$32:$H$38,3,FALSE)),"",VLOOKUP($AH$1,予定勤務時間記入!$D$32:$H$38,3,FALSE))
E6に=IF(ISNA(VLOOKUP($AH$1,予定勤務時間記入!$D$32:$H$38,4,FALSE)),"",VLOOKUP($AH$1,予定勤務時間記入!$D$32:$H$38,4,FALSE))
F6に=IF(ISNA(VLOOKUP($AH$1,予定勤務時間記入!$D$32:$H$38,5,FALSE)),"",VLOOKUP($AH$1,予定勤務時間記入!$D$32:$H$38,5,FALSE))
G6の四角い記号のセルに=IF(AND($D6<=G$3,$E6>G$3),IF(AND($F6<=G$3,$F6+"1:00">G$3),0,1),"")
横に23:30までコピー
AH1検索する曜日を呼び出すリストがあり月火水目木金土日と選択できます。
このような感じです。HANAさんの書かれたそのままのレイアウトです。検索するシートは入力用と編集用と同じ意味で2シートになっております。編集しているシートは予定勤務時間記入と言う名前です。
入力用シートに入力されると予定勤務時間記入シートに参照してきます。
宜しくお願いします(たか)


 	[D]	[E]	[F]	[G]	[H]	[I]
 [3]                                 1:00     1:30     2:00
 [4]						                      
 [5]	開始	終了	休憩	                                         
 [6]	9:00	10:00	13:00	■	■	
 [7]	9:00	11:00	12:00	■	■	

 D6に=IF(ISNA(VLOOKUP($AH$1,予定勤務時間記入!$D$32:$H$38,3,FALSE)),"",VLOOKUP($AH$1,予定勤務時間記入!$D$32:$H$38,3,FALSE))
 E6に=IF(ISNA(VLOOKUP($AH$1,予定勤務時間記入!$D$32:$H$38,4,FALSE)),"",VLOOKUP($AH$1,予定勤務時間記入!$D$32:$H$38,4,FALSE))
 F6に=IF(ISNA(VLOOKUP($AH$1,予定勤務時間記入!$D$32:$H$38,5,FALSE)),"",VLOOKUP($AH$1,予定勤務時間記入!$D$32:$H$38,5,FALSE))
 G6の四角い記号のセルに=IF(AND($D6<=G$3,$E6>G$3),IF(AND($F6<=G$3,$F6+"1:00">G$3),0,1),"")
 横に23:30までコピー
 AH1検索する曜日を呼び出すリストがあり月火水目木金土日と選択できます。
 このような感じです。HANAさんの書かれたそのままのレイアウトです。
 検索するシートは入力用と編集用と同じ意味で2シートになっております。
 編集しているシートは予定勤務時間記入と言う名前です。
 入力用シートに入力されると予定勤務時間記入シートに参照してきます。
 宜しくお願いします(たか)ずれてしまいました


 それで、
 >同じ時刻を手入力すると正しい結果をだしてきます。
 これは、D6:F7の時間を手入力する と言う事ですか?

 予定勤務時間記入シートの時間は、計算結果ではなく
 手入力したものなんですよね?

 とりあえず、思いつくところでは G6セルの数式を
=IF(AND($D6<=G$3,$E6>G$3),IF(AND($F6<=G$3,TEXT($F6+"1:00","h:mm")*1>G$3),0,1),"")
 に変更してみるのはどうでしょう。         ~~~~~==========~~~~~~~~~~
                      この部分を追加してみた式ですが。

 ただ、D6:F7の時間を手入力すればご希望の結果になるのなら
 こちらの方で TEXT(VLOOKUPの式,"h:mm")*1 と
 しておくのが良いかもしれません。

 (HANA)


なんとなく色々試してました。手入力するセルをリストで時間を検索するようにしてます。
この検索先は同じシートの隅に1:00 1:30 以下23:30まで入力しておりそこからリストできるように
なってます。
隅に1:00 1:30 以下23:30のリストは1:00 1:30と入力して下にコピーしたものでこの方法だと
時間の誤差?が出るらしくやはり無理でした。しかし1:00 1:30 以下23:30のリストを全てめんどくさいけど手入力の1:00 1:30 2:00 23:30と一から手入力したリストに変更したら間違いなく合うようになりました。コピーと手入力の差はなんなのでしょうか?(たか)


 コピー(フィルドラッグ)したものは
 エクセルが、二つのセルの差を見て
 0:30ずつ、足し算してくれたものです。

 ですから、誤差が生じることがあります。

 時間の演算誤差を丸める時によくつかわれる方法として
 TEXT関数でいったんその「文字列」にして、数値に直す方法があります。

 入力するときは、「1:00」と入力すると
 エクセルが勝手にシリアル値に変更します。
 TEXT関数で一度文字列にしたあと「*1」等で数値にすると
 エクセルが勝手にシリアル値に変更してくれます。

 >1:00 1:30と入力して下にコピーしたもの
 を利用するのではなく、たとえばリストをA1セルから作ると
 A1セルに 1:00 と入力し、
 A2セルに
=TEXT(A1+"0:30","h:mm")*1
 A2セルを必要行コピーしたものを利用すると
 誤差は丸められていますので、手入力した時間と
 一致させることが出来たのではないかと思います。

 重箱の隅をつつくような事を言いますが
 >この検索先は同じシートの隅に
 確かに作っておられるのでしょうから
 有益な情報になるかならないかは別として
 どこに作っているのか、セル番地を書いてもらいたいと思います。

 「たとえばリストをA1セルから作ると」
 なんて仮の話をしなくても済みますので。

 (HANA)


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.