advanced help
per page, with , order by , clip by
Results of 1 - 1 of about 228 for エラー値 #N/A (0.017 sec.)
エラー値 (861), #n/a (1385)
[[20210204091801]]
#score: 10842
@digest: 3fe89ae76bc513a5d99385ad85ca984d
@id: 86591
@mdate: 2021-02-06T12:43:28Z
@size: 10509
@type: text/plain
#keywords: 当!$ (187550), 手当 (51309), し|_ (41156), 般以 (38104), buun (38104), 般30 (30483), 日帰 (30001), 張手 (27066), 上労 (26885), 般") (25238), 間一 (20814), 労働 (13183), mround (12643), チモ (9974), (bu (9952), チオ (9793), 当シ (9179), 出張 (8302), オチ (8287), 一般 (7429), 働時 (7268), 帰り (5646), 役職 (5403), 間以 (3813), モリ (3148), 時間 (3141), 2021 (2870), ceiling (2856), 当が (2469), vlookup (2317), 笑) (2180), c6 (1976)
『関数についての質問』(buun)
簡単な旅費精算をExcelで行っています。 半年ほどこのExcelで運用していますが、1か所だけうまく作動してくれない関数がありますので質問致します。 問題の箇所は出張期間、現地での労働時間から手当を算出しています。 例えば 泊りの場合は、1日一律600円 日帰りの場合は、8時間以上労働で400円、5時間以上労働で300円という手当があります。 Excelで泊りの出張と日帰りの出張は、次の日に日付が入っているかどうかで判断しています。 そして別シートで手当のマスタを置きLOOKUP関数で呼び出しています。 しかしなぜか、日帰りということを認識してくれず隣のセルに日付が入ってない場合その手当が認識されません。 隣のセルに日付を入れるとちゃんと泊りの出張の手当が表示されます。 どこが間違っているか分からないので教えて頂ければと思います。 式↓ =IFERROR(IF(X17="〇",IF(F4="",VLOOKUP(C6,手当!$A$30:$B$48,MATCH($Z$2,手当!$B$29:$B$29,0),1),IF(AND(F4<>"",C6<>""),HLOOKUP($Z$2,出張手当!$B$29:$B$48,19,0),"")),""),"") X17="〇"は該当する人が〇をつけたら手当が反映されます F4=""はこのセルに日付が入るので空白だったら日帰り、日付が入れば泊りとなります。 C6セルには労働時間が入ります。日帰りの場合はこの労働時間から手当を算出します。 Z2セルは役職が入ります。役職によって手当が変更します。 何か足りない情報などありましたら教えてください。 質問内容が分かりにくく大変申し訳ありませんが宜しくお願い致します。 < 使用 Excel:Excel2016、使用 OS:Windows10 > ---- 確認だけ 提示の式はシートからそのままコピーしたもの? VLOOKUPも HLOOKUPも両方よくわかりません。 本当に ↓ で合ってるんですか? >手当!$A$30:$B$48 >手当!$B$29:$B$29 >出張手当!$B$29:$B$48 とりあえず手当シートと出張手当シートの表がどんなものか 行列番号がわかるように図示してください。 以上 (笑) 2021/02/04(木) 11:34 ---- ありがとうございます。 出張手当シートと手当シートは同じものです。申し訳ありません。 以下が表になります。 A B 29 労働時間 一般 30 5 100 31 6 100 32 7 100 33 8 100 34 9 100 33 10 100 36 11 100 37 12 200 38 13 200 39 14 200 40 15 200 41 16 200 42 17 200 43 18 200 44 19 200 45 20 200 46 21 200 47 22 200 48 23 200 役職によって変わると記載しましたが、不具合のある該当箇所は特定の人にしか支給されないものでしたので上記のような表になります。 今起こっている不具合は、労働時間5時間で該当する人が〇をつけても100という数字が表示されません。 分かりづらくお手数をおかけしますが宜しくお願い致します。 (buun) 2021/02/04(木) 12:03 ---- とりあえず >MATCH($Z$2,手当!$B$29:$B$29,0) ↑はエラーか1しか返さないと思いますが、よろしいのですか? (チオチモリン) 2021/02/04(木) 13:20 ---- チオチモリン様 >MATCH($Z$2,手当!$B$29:$B$29,0) こちらですが今のところ正常に動いているので問題はないと思います・・・ (buun) 2021/02/04(木) 13:47 ---- >MATCH($Z$2,手当!$B$29:$B$29,0) そこは日帰り(F4="")のときの処理なので「正常に働いてない部分」の一部ではないかと思います。 Z2セルと手当シートのB29のセルとしか参照していないので 「一般」のときに1、それ以外はエラーを返すのではないかと思いますがいかがでしょうか。 (ふ) 2021/02/04(木) 14:22 ---- ふ様 Z2には役職が入るのですがこの手当は一般にしか支給されないため一般以外は手当が表示されないようにしています。 関数に問題というより時間を認識していないのでしょうか? (buun) 2021/02/04(木) 14:48 ---- 一般以外のときはエラー値になりIFERRORの2番目の引数""になりますがそれでも正しいですか? (ふ) 2021/02/04(木) 15:00 ---- または一般の時にA列の値を返すのが問題ですか? (下記はMATCH($Z$2,手当!$B$29:$B$29,0)が1の場合のVLOOKUP式です) VLOOKUP(C6,手当!$A$30:$B$48,1,1) (ふ) 2021/02/04(木) 15:06 ---- ふ様 >一般以外のときはエラー値になりIFERRORの2番目の引数""になりますがそれでも正しいですか? 正しいです。 一般以外は空白セルになるようにしています。 >または一般の時にA列の値を返すのが問題ですか? 一般の時には手当のところにはB列の値を返します。 A列の数字とC6の数字が合致する手当を返します。 (buun) 2021/02/04(木) 16:48 ---- >合致する手当 なら VLOOKUP(C6,手当!$A$30:$B$48,1,1) ではなくて VLOOKUP(C6,手当!$A$30:$B$48,2,0) ではないですか? (チオチモリン) 2021/02/04(木) 16:56 ---- チオチモリン様 >VLOOKUP(C6,手当!$A$30:$B$48,2,0) MATCH関数を使わず上記の式であてはめると反映はするようになりましたが、一般以外の人にも手当が反映されてしまいます・・・ (buun) 2021/02/04(木) 17:09 ---- それは列番号を固定するなら当然でしょう 元々は ↓ のような表で _____ _________ _____ _____ _____ |_____|____A____|__B__|__C__|__D__| |__26_| 労働時間 一般 ○○ ■■ |__27_| 5 100 0 なし |__28_| 6 100 0 なし |__29_| 7 100 0 なし |__30_| 8 100 0 なし |__31_| 9 100 0 なし |__32_| 10 100 0 なし |__33_| 11 100 0 なし VLOOKUP(C6,手当!$A$30:$D$48,MATCH($Z$2,手当!$A$29:$D$29,0),1) ↑のような数式だったんじゃないですか? ※ IFERRORでパックするのもよいですが、エラーを隠しますので おかしいと思う時には削除してから「数式の検証」等でチェックするとよいです。 (チオチモリン) 2021/02/04(木) 17:52 ---- 行番号間違えましたので再掲 _____ _________ _____ _____ _____ |_____|____A____|__B__|__C__|__D__| |__29_| 労働時間 一般 ○○ ■■ |__30_| 5 100 0 なし |__31_| 6 100 0 なし |__32_| 7 100 0 なし |__33_| 8 100 0 なし |__34_| 9 100 0 なし |__35_| 10 100 0 なし |__36_| 11 100 0 なし (チオチモリン) 2021/02/04(木) 17:57 ---- チオチモリン様 回答ありがとうございます。 やはり日帰りの時だけ作動してくれません・・・ 泊りの時はしっかり反映するので >IF(F4="",VLOOKUP(C6,手当!$A$30:$B$48,MATCH($Z$2,手当!$B$29:$B$29,0),1) ここでエラーが起こっています。 「F4が空白で労働時間がC6のとき、手当シートのA30からB48の中からC6と合致する手当額を探す。 Z2セルに一般と表示されている人だけ」 という条件にしたいのですが >IF(F4="",VLOOKUP(C6,手当!$A$30:$B$48,MATCH($Z$2,手当!$B$29:$B$29,0),1) これでは間違いなのでしょうか?? 同じ質問になってしまい申し訳ありません。 宜しくお願い致します。 (buun) 2021/02/05(金) 11:09 ---- >F4が空白で労働時間がC6のとき X17は関係ないってこと? =IF(AND(F4="",Z2="一般"),IFERROR(VLOOKUP(C6,手当!$A$30:$B$48,2,1),""),"") では? ところで、最初の質問は下のようになってますよね。変わったんですか? >日帰りの場合は、8時間以上労働で400円、5時間以上労働で300円という手当 どっちにしても手当シートの表は ↓ の3行だけでいいのでは? A B 29 時間 一般 30 0 0 31 5 100 32 12 200 上の表なら =IF(AND(F4="",Z2="一般"),VLOOKUP(C6,手当!$A$30:$B$32,2,1),"") これだけのことなら VLOOKUP を使わなくても IF関数だけで十分のような気もしますけど・・・ 以上 (笑) 2021/02/05(金) 11:27 ---- (笑)様 >X17は関係ないってこと? 関係あります。 エラーが起こっている下記の式での条件を記載しました。 IF(F4="",VLOOKUP(C6,手当!$A$30:$B$48,MATCH($Z$2,手当!$B$29:$B$29,0),1) >=IF(AND(F4="",Z2="一般"),VLOOKUP(C6,手当!$A$30:$B$32,2,1),"") こちらの式を入れてみたところしっかり反映してくれました! しかし、労働時間:5時間、手当100円だけ反映されません・・・ 労働時間6時間以上は反映されるのですが・・・ (buun) 2021/02/05(金) 13:29 ---- >しかし、労働時間:5時間、手当100円だけ反映されません どうなるんですか、「0」になるってこと? C6の時間は手入力じゃないんですか? 数式ならその式を提示してください。 以上 (笑) 2021/02/05(金) 14:17 ---- (笑)様 >どうなるんですか、「0」になるってこと? #N/Aエラーになります。 > C6の時間は手入力じゃないんですか? =IF(AND(C5="",E5=""),"",MROUND(E5-C5-(AND(C5<="12:00"*1,E5>="13:00"*1)*"1:00"),"0:01")) 上記の数式を使っています。 C5が始まりの時間 E5が終わりの時間 (buun) 2021/02/05(金) 14:29 ---- その式だったら結果はシリアル値ですよね、5とか6とかの整数ではなく。 5時間どころか、何もかもうまくいかないのでは? #N/Aエラーになるとき(C6が5時間のとき) C5とE5にはそれぞれどんな時刻が入力されてるんですか? 入力されている時刻をそのまま書いてください。 以上 (笑) 2021/02/05(金) 15:03 ---- (笑)様 >5時間どころか、何もかもうまくいかないのでは? それがうまくいかないのが5時間だけなのです。 6時間〜13時間は正常に反映します。 >C5とE5にはそれぞれどんな時刻が入力されてるんですか? C5:13:00:00 E5:18:00:00 C6:5時間 手当:#N/A C5:13:00:00 E5:19:00:00 C6:6時間 手当:100円 このような感じです。 宜しくお願い致します。 (buun) 2021/02/05(金) 16:04 ---- >=IF(AND(F4="",Z2="一般"),VLOOKUP(C6,手当!$A$30:$B$32,2,1),"") VLOOKUP の式は本当にこれなんですか? ということは、手当シートの表は ↓ ですよね? A B 29 時間 一般 30 0 0 31 5 100 32 12 200 試してみましたが 13:00〜18:00 13:00〜19:00 どちらも「0」になります。 100にはなりませんが、エラーにもなりません。 表を下のように変更すれば、どちらも「100」になります。 A B 29 時間 一般 30 0 0 31 5:00 100 32 12:00 200 ただし演算誤差の可能性があるので、C6の式を変更する必要があるでしょう。 MROUND を使ってるのは誤差対策なんですかね。 よくわかりませんけど・・・ 以上、確認だけ (笑) 2021/02/05(金) 17:37 ---- ひとつ言っておくと・・・ >=IF(AND(C5="",E5=""),"",MROUND(E5-C5-(AND(C5<="12:00"*1,E5>="13:00"*1)*"1:00"),"0:01")) ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾ 波線部は AND ではなく OR ですね。 =IF(OR(C5="",E5=""),"",MROUND(E5-C5-(AND(C5<="12:00"*1,E5>="13:00"*1)*"1:00"),"0:01")) 変更する必要があるというのはこれではありません。 参考まで (笑) 2021/02/05(金) 23:41 ---- MROUND を演算誤差対策に使うと言うアイデアは見たことないです。 テストすると、手入力と同じ精度だったのはTEXT関数のみ。 MROUND,CEILING,FLOOR は同対策には使えない。 ※ただし最終値としては問題なし。再利用時に問題発生の懸念が残る。 行 __A__ __B__ 1 8:00 2 8:00 0 手入力(A1)との差/(0.5の56乗) 3 8:00 -4 4 8:00 -4 5 8:00 -4 (1) A2セル =TEXT ("7:59"+"0:01","h:m")*1 (2) A3セル =MROUND ("7:59"+"0:01","0:01") (3) A4セル =CEILING("7:59"+"0:01","0:01") (4) A5セル =FLOOR ("7:59"+"0:01","0:01") (5) B2セル =(A$1-A2)/0.5^56 (半平太) 2021/02/06(土) 20:15 ---- ↑(3),(4)のテストは間違えました m(__)m CEILINGとFLOORは、第一引数を手入力並みの精度にしないと、 最終値が問題ないとは言えなかったです。 テスト(正) (3) A4セル =CEILING("8:00","0:01") (4) A5セル =FLOOR ("8:00","0:01") (半平太) 2021/02/06(土) 21:43 ...
http://www.excel.studio-kazu.jp/wiki/kazuwiki/202102/20210204091801.txt - [detail] - similar
PREV NEXT
Powered by Hyper Estraier 1.4.13, with 97017 documents and 608140 words.

訪問者:カウンタValid HTML 4.01 Transitional