• 締切済み

IF関数 複数条件の指定

関数の初心者です。。 仕事のルール変更にともなって、前任者が使っていた関数を変更しなければありません。(前任者はもういないので。) 色々がんばって試してみてもエラーになってばかりです。。。 AND関数なのかなんなのかさえよく分からない状況です。 質問自体もよく分からないかも知れませんが、どのように関数を変更すればよいかご教授いただけないでしょうか。 何卒よろしくお願いいたします。 ■関数の参照先の表示されているデータ C列:平日 or 休日 D列:null or 有休 or 欠勤 E列:出勤なし or 09-16 or 10-17(勤務時間) F列:例 09:02(出勤時刻) H列:例 18:05(退勤時刻) ■関数を変更したい表 U列:勤務時間「09-16」の表  W列:勤務時間「10-17」の表 ■元関数 =IF($C○="平日",IF($D○="有休","",IF($D○="欠勤","",IF($E○=$U$1,IF($F○="","出勤エラー",IF($H○="","退勤エラー",1)),""))),"") ■変更したい内容 D列が有休となった場合、「1」を表示させる。 ただし、勤務時間毎の列がある(Uが「09-16」、Wが「10-17」)ので、勤務時間と合っているセルのみ「1」と表示させたいです。 ■失敗した関数 U列だけ下記にしたら、OKでした。 =IF($C○="平日", IF($D○="有休","1", IF($D○="欠勤","", IF($E○=$U$1, IF($F○="","出勤エラー", IF($H○="","退勤エラー",1)),""))),"") でも、さらにW列に同じような式にすると勤務時間が違うのに、「1」と表示されました。 長くて分かりづらい質問だと思いますが、何卒よろしくお願いいたします。

みんなの回答

  • zgk0
  • ベストアンサー率83% (47/56)
回答No.4

>出勤日(有休含む)の時間帯のエクセルデータが「1」となり、その「1」の合計を別のセルでカウントして、勤務時間帯のお給料と掛け算させています。 あぁ、いわゆる「基準内給与額」の算出が目的でしたか。 で、あれば =IF($C○="平日",IF($D○="有休","1",IF($D○="欠勤","",IF($E○=$U$1,IF($F○="","出勤エラー",IF($H○="","退勤エラー",1)),""))),"") で、W列は↑のUをWに置き換えるだけです。 ・・・結局、No.1さんの回答が正解だったというわけですね。

eerriinnaa
質問者

お礼

>zgk0さん 自分でもわけが分からなくなっていたようですね。。 色々振り回して、申し訳ありませんでした。。。 また、拙い質問にも何度もご回答いただきまして、 本当にありがとうございました!! また、何かありましたらよろしくお願いいたします。

  • zgk0
  • ベストアンサー率83% (47/56)
回答No.3

No.2です。 >単純にD列が有休で勤務時間と合っているセルのみ、"1"を表示させるだけ >がやりたいことです。 との事ですのが、最終的に何をしたいのかよく判りません。 元の式は出勤すべき日にまともに出勤していたら"1"を表示して、出勤すべ き日なのに出勤時間や退勤時間が入力されてなければエラーを表示して修正 を促して、修正後に出勤日数を集計(合計)すると推測できますが、 eerriinnaaさんの目的は、この出勤日数の集計という最終目的を破棄して、 有休取得日数のみを集計したいという事でよろしいでしょうか? であれば =IF($D○="有休",IF($E○=$U$1,"1",""),"") ※W列は↑のUをWに置き換え で、出来る筈です。

eerriinnaa
質問者

お礼

>zgk0さん 何度もご回答いただきまして、本当にありがとうございます。 また、質問の意図をきちんと明記しておらず、すいませんでした。 エクセルの目的は、お給料計算することです。 出勤日(有休含む)の時間帯のエクセルデータが「1」となり、その「1」の合計を別のセルでカウントして、勤務時間帯のお給料と掛け算させています。(でさらに、別で合計して、月の給与としています。) 何回もご回答いただいて、恐縮ですが、上記から、下記の関数に追記することは可能でしょうか。 =IF($C○="平日",IF($D○="有休","",IF($D○="欠勤","",IF($E○=$U$1,IF($F○="","出勤エラー",IF($H○="","退勤エラー",1)),""))),"") よろしくお願いいたします。

  • zgk0
  • ベストアンサー率83% (47/56)
回答No.2

元関数は、U列に入ってる関数ですよね? これは出勤状況の確認とデータ入力に漏れがないかを確認する事を目的 としています。 平日に、有休扱いでも欠勤扱いでもなく、正しい勤務時間の列(U列)に 出勤時間や退勤時間が漏れなく入力されていたら"1"を表示するという 式になっています。(更に出勤時間が入力されていなければ"出勤エラー"、 退勤時間が入力されていなければ"退勤エラー"と表示され、休日か出勤 無し或いは勤務時間が間違っている場合はnullとなります) eerriinnaaさんは >U列だけ下記にしたら、OKでした。 と書かれていますが、この式ではD列がnullでも他が正しく入力されて いれば"1"が表示される筈です。 両者を区別する必要が無いのならば問題ありませんが、区別する必要が あるのなら、D列が有休となった場合に表示させる値を"1"ではなく別の 値にする必要があります。 例えば、U列なら =IF($C○="平日", IF($D○="有休","2",  ・・・D列が有休なら"2"を表示。 IF($D○="欠勤","", IF($E○=$U$1, IF($F○="","出勤エラー", IF($H○="","退勤エラー",1)),""))),"") とします。 また、IF($E○=$U$1でE列がU1(=09-16)と等しいか判定してますので、 W列は、 =IF($C○="平日", IF($D○="有休","2", IF($D○="欠勤","", IF($E○=$W$1, IF($F○="","出勤エラー", IF($H○="","退勤エラー",1)),""))),"") とすれば、平日に、欠勤扱いでなく、正しい勤務時間の列に出勤時間や 退勤時間が漏れなく入力されていたら"1"が表示され、有休であれば "2"が表示され、出勤時間が入力されていなければ"出勤エラー"、退勤時間 が入力されていなければ"退勤エラー"と表示され、休日か出勤無し或いは 勤務時間が間違っている場合はnullとなる筈です。 単純にD列が有休で勤務時間と合っているセルのみ、"1"を表示させるだけ であれば、U、W以外の列、例えばX列でX1に"=U1"と入力しておいて =IF($D○="有休" AND $E○=$X$1,"1","") または =IF($D○="有休",IF($E○=$X$1,"1",""),"") 更にY列でY1に"=W1"と入力しておいて =IF($D○="有休" AND $E○=$Y$1,"1","") または =IF($D○="有休",IF($E○=$Y$1,"1",""),"") で出来る筈です。

eerriinnaa
質問者

お礼

ご丁寧な回答ありがとうございました!! >単純にD列が有休で勤務時間と合っているセルのみ、"1"を表示させるだけ がやりたいことです。 >U、W以外の列、例えばX列でX1に"=U1"と入力しておいて 上記ですが、U、W以外の列でなくU、W上で同じ計算を入れ 出勤「1」とみなしたいのですが、可能な式はありますでしょうか? 何度もお手数をお掛けしますが、ご教授いただけるとありがたいです。 よろしくお願いいたします。

noname#99913
noname#99913
回答No.1

よくわかりませんが、UをWに変えればいいのでは? 次の式をW2に入力し、あとは下へ必要なだけコピー。 =IF($C2="平日",IF($D2="有休","",IF($D2="欠勤","",IF($E2=$W$1,IF($F2="","出勤エラー",IF($H2="","退勤エラー",1)),""))),"")

eerriinnaa
質問者

お礼

ご回答ありがとうございます!! 確認したところ元々、UはU、WはWに式が設定されておりました。。。涙

関連するQ&A