• 締切済み

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

  • IF関数 複数条件

    お世話になります。 IF関数の条件の追加について教えて頂きたいです。 =IF(OR(D6="在宅",D6="有給"),"7:00",F6-E6-G6) という数式に =IF(D6=休日,"",F6-E6-G6) という内容を追加したいです。 在宅、有給の場合は7:00と表示 休日の場合は空白 それ以外は実働時間F6(退社時間)-E6(出勤時間)-G6(休憩時間) です。 ちなみにエクセルは2016なのでIFSは使えません。 宜しくお願いいたします。

  • IF関数を使った勤務時間表

    勤務時間表をエクセルで作成しました。 出勤時間 退勤時間 休憩時間 と入力し退勤時間-出勤時間-休憩時間で勤務時間を求めます。それぞれのセルに時間を入力して勤務時間を求めていましたが会社の管理により休憩時間がそれぞれの時間帯に定められています。そこで出勤時間と退勤時間だけの入力で、休憩時間の条件を定義すれば休憩時間は入力することなく求められるかと思いましたがIF関数を使うと複雑で長くなりうまくできませんでした。”この関数に関する引数が多い”とのエラーメッセージが出てしまいます。VLOOKも考えてみましたがもの凄く長い条件になりそうで諦めました。休憩時間は以下の通りになります。 10:00~10:10 12:00~12:40 15:00~15:10 ちなみに私の通常勤務は8:30~16:30となります。 早退や遅刻などはたまになので難しい関数使うよりも 簡単に引くべき休憩時間は分かるんですが…。今後の勉強のためにもいい方法があればと思います。よろしくお願いします。

  • エクセルのIF関数で複数の条件を指定する方法

    エクセルのIF関数で複数の条件を併記する記載方法がわかりません。 例えば、A列に苗字、B列に名前が入っている(どちらかが空白の場合もある)とします。 その場合に、苗字と名前両方が入力されている場合にのみC列に氏名を表示し、どちらかの条件が偽の時は何も表示しない関数を入れたいです。 具体的に以下のような関数を考えてみましたがこれはエラーになります =IF(ISBLANK(A1) | ISBLANK(B1),"",CONCATENATE(A1,B1)) "|"の辺りが違うようなので"||"とか"OR"とかやってみましたがうまくいきません。どう記述すればよいでしょうか。 ちなみに、IF文のなかに別のIF文をネストして同じ事をやる方法ならわかるのですがこれはなんとなく好きではありません。上記のような記載の仕方でできれば教えて欲しいです。

  • エクセルの関数について

    初めてこちらで質問させていただきます。エクセルの詳しい方ご教授お願いいたします。 行いたいことは、18:00~18:30まで社内にいる人数を把握したいです。 エクセルで関数を組みましたが0になってしまいます。 現在A列に名前、D列に退勤時間があります。 組んだ関数は=COUNTIFS(D1:D2443,">=18:00",D1:D2443,"<=18:30")です。D列には18:20などの退勤時刻と、有給、欠勤などは0にしています。関数の組み方や、違う関数の方が良いなどアドバイス頂ければ幸いです。よろしくお願い申し上げます。

  • IF関数ですと長くなってしまうので・・・

    既出でしたらすみません。 A列  B列  C列 1    1    出勤 2    2    出勤 5    3    休み      4    休み      5    出勤 というデータが入っていたとしまして、 C列の「出勤」(実際は時間が入っていますが)の場合には B列の数値をA列に表示させたいのですが、 出勤の番号を上から順番に表示させる関数がわかりません。 (今A列に入っている数値が本来表示させたい結果です) IF関数で出来ない事はないですが、TRUE,FALSEだけを繰り返していくと そうとう長くなってしまうので、何か良い方法がないでしょうか? よろしくお願い致します。

  • エクセルのif文関数の複数条件時の記述について

    こんにちは。 エクセルのif文関数についての質問です。 添付画像にあるように、データがあるとします。 このエクセルは、ABCの行それぞれのデータに対応して、 A行、B行、C行それぞれのデータのうち、ひとつでも1000を超えるデータがあれば 判定のセルに1を表示するというものです。 この場合、今まではH4のセルに =IF((OR(C4>1000,D4>1000,E4>1000,F4>1000)),1,0) と入力していました。 今までは例のようにデータの列が4つほどなので問題なかったのですが、 データの列が60列となり、上記のようなIF文では処理できなくなってしまいました。 (条件が30個を超えるとエクセルからエラーがでます) この場合上記のIF文をもっと簡潔に、 列が増えても問題ないような関数に置き換えるには どのような関数を入力すればいいでしょうか。 皆様よろしくお願いします。

  • Excel IF関数の使い方

    ExcelでIF関数を使えばいいのは分かっているのですがどう使ったらいいのかが分かりません。 勤務表をExcelで作っていて、所定内勤務時間を計算したいです。 A列に休み区分、B列に始業時間、C列に終業時間、D列に所定内勤務時間が入っています。 A列に「半休」と文字が入った場合 始業時間8:30、終業時間12:00 と入力したら、自動的に所定内勤務時間を3:30 始業時間12:45、終業時間17:00 と入力したら、自動的に所定内勤務時間を4:15 A列に何も入らなかったら終日勤務で、所定内勤務時間を7:75と表示させたいです。 =IF(AND(A1=半休,B1=TIMEVALUE("8:30"),"3:30"),???) ここまでは分かるのですが???以降が分からないです。 どなたか教えていただけないでしょうか? よろしくお願いいたします。

  • IF関数で、時間を条件にしたい場合の式について

    IF関数について教えて下さい。 【表】 時間    金額    合致 11:00 1000  1 12:00 1400 13:00 1500 11:00 1400  1 11:00 1300  1 エクセルの関数を使って、時間と金額が表示されている表に対して、Aの列が「11:00」の時だけ、「合致」の列に「1」を 表示するようにしたいと思います。 計算式を、 =IF(A2='11:00,1,"") としたところ、「その名前は正しくありません」とエラー表示に なってしまいました。また、 =IF(A2='11:00',1,"") としたところ、式が正しくないとエラーになりました。 こうした場合は、どのような計算式にしたらよいでしょうか。 よろしくご教授願いますm(_ _)m

  • if関数について(or追加)

    隣の列(G21)の文字列(案件のフェーズ)に応じて、A~CのフェーズならA、D~FのフェーズならD、といったようにフェーズの集約をしたいのですが、以下の関数を入れてもERRORと表示されます。 どこが間違ってるのかを教えていただけないでしょうか。 お手数をおかけしますがよろしくお願いいたします。 =IF((or(G21="Closed Lost"),"Lost"),IF(or(G21="Proposal Sent","Under negotiation"),"Proposal Sent"))

  • エクセル IF関数 初心者です。。

    A    B   C  D Aさん 9:00  1  9:00 Bさん 10:00 2  9:30 Cさん 11:00 3  10:00 Dさん 12:00 4  10:30 Eさん 9:00  1  9:00 A列氏名 B列時間 C列 B列IF関数 9:00からは1、10時からは2、 11からは3・・・ D列はC列のVLOOKUP関数 1=9:00、2=9:30、3=10:00・・・ そこでお聞きしたいのですが・・ A    B   C  D Aさん 9:00  1  9:00 Bさん 10:00 3  10:00 Cさん 11:00 4  10:30 Dさん 12:00 5  11:00 Eさん 9:00  2  9:30 IF関数を用いて IF(B1>=0.375),1,if(B1>=0.416666666666667),2,IF(B1>=0.458333333333333),3・・・ Eさんが2になるような数式がわかりません。 よろしくお願いします。。