• 締切済み

excelの関数

今勤務表を作成しているのですが画像の中の基準労働日数の値を関数で作成していた所  条件としては閏年・31日がない月・休祭日出勤=C待機等々細かく条件を指定していましたら  以下のように長くなってしまいましたもう少し短くしたいのですが  マクロ等組んだことがなくどうすればいいのか分かるかた教えてください =IF(TEXT(J4,"mm")="02", IF(TEXT(B36,"mm")=TEXT(J4,"mm"), IF(C8=1, NETWORKDAYS(J4,B36) -COUNTIFS(Y8:Y36,"*日") -COUNTIFS(C8:C36,">=2",C8:C36,"<=6",Y8:Y36,"*C待機*") -COUNTIFS(C8:C36,">=2",C8:C36,"<=6",Y8:Y36,"*年末年始*"), IF(C8=7, NETWORKDAYS(J4,B36) -COUNTIFS(Y8:Y36,"*日") -COUNTIFS(C8:C36,">=2",C8:C36,"<=6",Y8:Y36,"*C待機*") -COUNTIFS(C8:C36,">=2",C8:C36,"<=6",Y8:Y36,"*年末年始*"), NETWORKDAYS(J4,B36) -COUNTIFS(Y8:Y36,"*日") -COUNTIFS(C8:C36,">=2",C8:C36,"<=6",Y8:Y36,"*C待機*") -COUNTIFS(C8:C36,">=2",C8:C36,"<=6",Y8:Y36,"*年末年始*") ) ), IF(C8=1, NETWORKDAYS(J4,B35) -COUNTIFS(Y8:Y35,"*日") -COUNTIFS(C8:C35,">=2",C8:C35,"<=6",Y8:Y35,"*C待機*") -COUNTIFS(C8:C35,">=2",C8:C35,"<=6",Y8:Y35,"*年末年始*"), IF(C8=7, NETWORKDAYS(J4,B36) -COUNTIFS(Y8:Y35,"*日") -COUNTIFS(C8:C35,">=2",C8:C35,"<=6",Y8:Y35,"*C待機*") -COUNTIFS(C8:C35,">=2",C8:C35,"<=6",Y8:Y35,"*年末年始*"), NETWORKDAYS(J4,B36) -COUNTIFS(Y8:Y35,"*日") -COUNTIFS(C8:C35,">=2",C8:C35,"<=6",Y8:Y35,"*C待機*") -COUNTIFS(C8:C35,">=2",C8:C35,"<=6",Y8:Y35,"*年末年始*") ) ) ),IF(TEXT(B38,"mm")=TEXT(J4,"mm"), IF(C8=1, NETWORKDAYS(J4,B38) -COUNTIFS(Y8:Y38,"*日") -COUNTIFS(C8:C38,">=2",C8:C38,"<=6",Y8:Y38,"*C待機*") -COUNTIFS(C8:C38,">=2",C8:C38,"<=6",Y8:Y38,"*年末年始*"), IF(C8=7, NETWORKDAYS(J4,B38) -COUNTIFS(Y8:Y38,"*日") -COUNTIFS(C8:C38,">=2",C8:C38,"<=6",Y8:Y38,"*C待機*") -COUNTIFS(C8:C38,">=2",C8:C38,"<=6",Y8:Y38,"*年末年始*"), NETWORKDAYS(J4,B38) -COUNTIFS(Y8:Y38,"*日") -COUNTIFS(C8:C38,">=2",C8:C38,"<=6",Y8:Y38,"*C待機*") -COUNTIFS(C8:C38,">=2",C8:C38,"<=6",Y8:Y38,"*年末年始*") ) ), IF(C8=1, NETWORKDAYS(J4,B37) -COUNTIFS(Y8:Y37,"*日") -COUNTIFS(C8:C37,">=2",C8:C37,"<=6",Y8:Y37,"*C待機*") -COUNTIFS(C8:C37,">=2",C8:C37,"<=6",Y8:Y37,"*年末年始*"), IF(C8=7, NETWORKDAYS(J4,B37) -COUNTIFS(Y8:Y37,"*日") -COUNTIFS(C8:C37,">=2",C8:C37,"<=6",Y8:Y37,"*C待機*") -COUNTIFS(C8:C37,">=2",C8:C37,"<=6",Y8:Y37,"*年末年始*"), NETWORKDAYS(J4,B37) -COUNTIFS(Y8:Y37,"*日") -COUNTIFS(C8:C37,">=2",C8:C37,"<=6",Y8:Y37,"*C待機*") -COUNTIFS(C8:C37,">=2",C8:C37,"<=6",Y8:Y37,"*年末年始*") ) ) ) )

みんなの回答

回答No.1

100年間使えるのでよければ, テーブル引きにする手もあります。 プログラムはアルゴリズム+データ構造と言われるように, 関数で考えるか,データ構造で考えるか、どちらがよいか。 データが小さければ、テーブル引きにした方が速度が速いかもしれません。

関連するQ&A

  • エクセル2002 関数

    以前日付と時間の計算で、"2012/11/28 12:55”の形で入力したセル同士の計算で、 ”=TEXT(NETWORKDAYS(J2351,J2352)-IF(WEEKDAY(J2352,2)<6,("24:00"-TIME(HOUR(J2352),MINUTE(J2352),0)),0)-IF(WEEKDAY(J2351,2)<6,TIME(HOUR(J2351),MINUTE(J2351),0),0),"d:h:mm")”の式を教えていただいたのですが、 パソコンがクラッシュしてしまい、新しいパソコンでは、”#NAME?"と、エラーメッセージが出てきてしまいます。 アドインを入れれば良いそうですが良く解りません。お手数ですが噛み砕いてお教えください。 よろしくお願いします。

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

    特定の二つの日時の間で、何日と何時間差が有るかを土日を除いて、出力したいのですが、方法が解りません。(2011/6/17 11:45と2011/6/21 21:50だと、1:10:05と出力させたい) text関数だと{=TEXT(O3-O2,"d:h:mm")土日が含まれてしまうし、 NETWORKDAYS関数では{=NETWORKDAYS(O2,O3)}日にちを24Hとして扱うことが出来ません。 関数を二つ使うなど、やり方を知っている方がおりましたら是非教えてください。

  • COUNTIFS関数について

    お世話になります。 3つ以上の条件を含む式の間違いが分かりません。 =COUNTIFS(sheet1!A$1:A$200,E$1,sheet1!C$1:C$200,"2",sheet1!G$1:Q$200,B3) のようなブック内の別シートを3つの条件に合うデータ件数を集計したいのですが、#value!が出ます。 ( )内の3つの条件をばらして、 =COUNTIFS(sheet1!A$1:A$200,E$1) (1) =COUNTIFS(sheet1!C$1:C$200,"2") (2) =COUNTIFS(sheet1!G$1:Q$200,B3) (3) および =COUNTIFS(sheet1!A$1:A$200,E$1,sheet1!C$1:C$200,"2") は、正しく計算できるのですが、なぜか(1)~(3)を一つの式にすると、エラーになります。 何が悪いのでしょうか。

  • エクセルの関数で教えてください。

    色々調べて重複しない関数は分かったのですが、 例: SUMPRODUCT((A1:A10="○○")/COUNTIFS(A1:A$10,A1:A$10&"",C1:C101,C31:C10&"")) この条件にさらに下記内容を追加してカウントしたいです。 B列が0と未入力以外 どうか助けて下さい!

  • エクセルのIF関数とVLOOKUP関数について教えてください。

      A B C 1 A1 B1 C1 2 A2 B2 C2 ・ ・ ・ 上記のような表があり、セルX、Yに入力した値が2つの条件に合致した場合、セルZにC列の値を返すような数式を作っています。 たとえば、セルXの値がA1より小さく、かつ、セルYの値がB1より小さい場合にはセルZにC1の値を表示する、という数式を作りたいのです。 (ちなみにAn、Bn、Cnにはそれぞれ数字が入ります) =IF(AND(X<=A1,Y<=B1),C1,IF(AND(X<=A2,Y<=B2),C2,・・・ AND関数を利用してこのように数式を入れると、途中まではうまくいくのですが、引数が多いため途中からエラーが出てしまいます。 (引数の数は10個以上あります) IF関数とVLOOKUPを組み合わせればいいというところまではわかるのですが、どのように条件設定をすればいいのかがわかりません。 エクセル初心者で恐縮ですが、どなたか詳しい方いらっしゃいましたらご回答よろしくお願いいたします。

  • エクセル2010、複数条件のセルを数える

    エクセル2010です。 A列のリストの中から、「B1またはC1のセル」と同一の名前がいくつあるか、という計算式を作りたいです。 複数条件ですから、COUNTIFS関数で、 =COUNTIFS(A:A,B1,C1) としてみたのですが、これではエラーが出ます。 よく考えてみたら、「または」という、どちらかの条件が含まれるということですから、これでは駄目なようです。 そこで調べたところ(http://support.microsoft.com/kb/275166/ja)、こういう場合SUM(IF())を使うというのがわかり、 =SUM(IF((A:A=B1)+(A:A=C1),1,0)) としてみましたが、これでも結果がすべて0になってしまいます。 私は何か捉え違いをしているのでしょうか? こういう条件の場合、どういう式にすればよいのでしょうか。 どうぞよろしくお願いします。

  • EXCEL IF関数 AND、OR条件

    先ほど、以下のような質問をさせて頂き、回答を頂いたものについての、追加の条件を付けた場合についての数式について、ご教授お願いいたします。 ◆以前、質問引用 以下の「D」の「○」「×」を数式で入力するのが目標です。 数式で表すことができますでしょうか? 条件としましては、 B>Cのとき、Aの文字列が「X1またはX2」の場合は、「○」、それ以外は「×」 C>Bのとき、Aの文字列が「Y1またはY2」の場合は、「○」、それ以外は「×」 それ以外のとき、(B=C,どこかが空白のとき)は、空白   A  B  C  D 1 X1 37 63 × 2 X2 78 22 ○ 3 Y1 45 55 ○ 4 Y2 29 71 × ◆回答 成功しました。 =IF(OR(COUNTA(A1:C1)<3,B1=C1),"",IF(B1>C1,IF(OR(A1="X1",A1="X2"),"○","×"),IF(OR(A1="Y1",A1="Y2"),"○","×"))) ◆引用終了 ここに、追加条件を付加したいのですが、 BとCどちらか大きい数字が、なおかつ80以上のもの。ただし100は除く それ以外は空白(100の場合も空白) という条件を付加して、80以上99以下の「○」と「×」をE列(NEW)に返したいと考えています。 回答を頂いた数式を一つずつ分解して理解しようとしましたが、どこにいれていいやら、後半の数式の使い方がいまいち理解できません。 分解(参考) 論理式 IF(OR(COUNTA(A1:C1)<3,B1=C1), 真の場合"", 偽の場合 IF(B1>C1,IF(OR(A1="X1",A1="X2"),"○","×"),IF(OR(A1="Y1",A1="Y2"),"○","×"))) 宜しくお願いいたします。

  • エクセル、COUNTIFS関数の範囲指定について

    エクセル2010です。 「A1の文字列が、B列とC列の中から合致し、さらにD列の"○○"という条件を満たすものはいくつあるか」 という数式を作りたいです。 写真でいうと、B・C列の中から中央区があるかどうか、さらにその中に山田がいるか、という検索式です。 そこで、COUNTIFS関数を使い、fxボタンで半自動で作ったところ、 =COUNTIFS(B:C,A1,D:D,"山田") となったのですが、なぜか結果はエラーになってしまっています。 どうやら検索条件の範囲が「B:C」になっているのが問題なのか、B:BやC:Cだけにすると、ひとつの列なら正常に計算するようです。 そこで式を二つに分け、プラスでつなげてみました。 =COUNTIFS(B:B,A1,D:D,"山田")+COUNTIFS(C:C,A1,D:D,"山田") こうしてみると一応成功しました。 しかし動作が重くなり、処理に数秒かかるようになってしまいました。 (B:Bなどひとつの列なら、数式を記入した瞬間に結果がでます) できれば数式は短くシンプルにしたいので、前述の短い形式のようにならないものか、と思います。 COUTIFS関数で、検索範囲を「○列~△列」のようにできないものでしょうか? アドバイスをよろしくお願いします。

  • エクセルの関数

    =COUNTIFS(A10:A47,"一日有休",B10:B47,">=" & DATE(YEAR(E11)-1,MONTH(E11),DAY(E11)),B10:B47,"<" & E11) 上記の数式をJ11に入力してますが動きません。 (A10:A47)には一日有休などの文字が(B10:B47)には有給取得日が E11には有給付与日が2010/10/1等 結果が0になります。 どこが、がいけないのでしょうか

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

    お世話になります。 NETWORKDAYS関数を使って、土日・祝日を除く日数をカウントするのは、過去の質問から分かったのですが、 その他の条件として、土曜出勤の日が含まれている場合には、 プラスして計算したい場合は、どうすればよろしいでしょうか? エクセル2000のバージョンを使っています。 A列に開始日  B列に終了日  C列に日数 ※E列の日付が含まれていたら除く ※F列の日付が含まれていたら1日プラスする。  A列      B列      C列     E列      F列 1 開始日    終了日    日数    祝日      土曜出勤日 2 2006/08/01  2006/08/11  **     2006/07/17   2006/07/22 3 2006/08/11  2006/08/18  **     2006/08/14   2006/08/19 4 2006/08/14  2006/08/25  **     2006/08/15 5 2006/08/17  2006/08/25  **     2006/09/18 よろしくお願いします。