• 締切済み

エクセルINDEX関数でアドバイス欲しいです!!

現在INDEX関数を使い歩合計算をしています。 条件は 個人売上0~300000で達成率93%で4%歩合 個人売上0~300000で達成率100%で6%歩合 他パターン20通りほどあります。 なお人件費が53%以上になったら、歩合が1%ダウンします。 とても細かく分かれていて、現在使っている数式は、 =IF(OR($A$3="",$B$3="",$K$3>=53%), INDEX(sheet1!$B$11:$H$16,MATCH($H$3,sheet1!$A$11:$A$16,1),MATCH(C9,sheet1!$B$10:$H$10)), INDEX(sheet1!$B$3:$H$8,MATCH($H$3,sheet1!$A$3:$A$8,1),MATCH(C9,sheet1!$B$2:$H$2))) sheet1のB2~H2に 0 300000 600000 900000 1200000 1500000 1800000 sheet1のA3~A8に 0% 92.9% 99.9% 100% 106% 112% 上記数値設定があり、人件費53%以下なら、 B3~H8に入っている%の数値を拾ってきます。 同様に人件費53%以上なら B11~H16入っている%の数値を拾ってきます。 今回はさらに売上全体に対してその歩合%に対して、 以下の条件を付ける事になりました。 店舗目標予約率50%以下=歩合-1% 個人目標予約率40%以下=歩合-2% 添付資料「指名売上」の%はそのままで、 %をダウンした数式を作りたいと思って試行錯誤したのですが、 行き詰ってしまいました。 現在の数式を整理すると ★個人指名売上1.250.000円 ★人件費51%(添付資料だと53%以下参照) ★達成率102% ★F6セルの「11%」を拾う となっています。 これに、 店舗目標予約率50%以下=歩合-1% 個人目標予約率40%以下=歩合-2% 店舗目標が50%以下で個人目標が40%以上なら-1% 店舗目標が50%以上で個人目標が40%以下なら-2% 店舗目標が50%以下で個人目標も40%以下なら-3% のような感じです。 なかなか文章の着地点が見えないのですが、 このような感じで1つのセルに数式を作る事は出来るのかどうかです。 私には複雑なのか組むことが出来なかったので、 お分かりになる方、参考にさせていただけたらと思っています。 また、INDEX・MATCH関数ではなく、 別の関数による数式があればそちらでトライしてみますので、 それも含めアドバイスいただけたらと思います。 長文で内容が分かりづらいかもしれませんが、 よろしくお願いいたします。

みんなの回答

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.3

こんばんは! すでに解決しているようなので、余計なお世話になると思いますが・・・ 前半のINDEXとMATCH関数部分だけ! Sheet1のB3~H8セルを範囲指定 → 名前ボックスに仮に 以下 と入力し、OK Sheet1のB11~H16セルを範囲指定 → 名前ボックスに 以上 と入力しOK (どんな名前でも構いませんが、数値・アルファベットは「_」を入れないと使えないことがあります) これでそれぞれの範囲が名前定義されましたので、これを利用する方法です。 =IF(COUNTBLANK($A$3:$B$3),"",INDEX(IF($K$3<53%,以下,以上),MATCH($H$3,Sheet1!$A$3:$A$8,1),MATCH(C9,Sheet1!$B$2:$H$2,1))) としてみてはどうでしょうか? 後はkeithinさんが仰っているように単純にマイナスするだけだと思います。 以上、どうも失礼しました。m(_ _)m

全文を見る
すると、全ての回答が全文表示されます。
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.2

ん? >「1+($K$3>=53%))-(店舗目標予約率<=50%)*1%-(個人目標予約率<=40%)*2%)」 >この先頭の「1」とはどのような意味なのでしょうか? 数式の区切りを間違っています。 一般にINDEX関数は(アナタが最初に使っている式も同じで) =INDEX(範囲,行,列) のようにして,縦と横の交わるセルを参照します。 今回回答で使ったのは,もう一つ別のINDEX関数の使い方で =INDEX((範囲1,範囲2),行,列,領域番号) のようにして,K3が53%より大きい小さいで範囲1,2を切り替えて計算しています。 もう少しふつーに書けば =INDEX((B3:H8, B11:H16), MATCH(行), MATCH(列), IF(K3>=53%,2,1)) のようになりますが, IF(K3>=53%,2,1) の部分を 1+(K3>=53%) として計算しています。 実際にこのように書くことで,IFで書いたのと同じ計算結果が得られることを別のセルにここだけ切り取って書き出し,計算させて確認してみてください。 このようにしてINDEX関数の計算を終えた後に,更に補正として-1%,-2%を追加して計算しています。

全文を見る
すると、全ての回答が全文表示されます。
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.1

表から求めた歩合から,そのまま1%や2%や3%を引き下ろしてしまっていいのですか? 幸い歩合の2つの表の縦横項目は全く同じなので,INDEXを1つにまとめるのは簡単にできます。 =IF(OR($A$3="",$B$3=""),"",INDEX((Sheet1!$B$3:$H$8,Sheet1!$B$11:$H$16),MATCH($H$3,sheet1!$A$3:$A$8,1),MATCH(C9,sheet1!$B$2:$H$2),1+($K$3>=53%))-(店舗目標予約率<=50%)*1%-(個人目標予約率<=40%)*2%) その上で,「店舗目標予約率」や「個人目標予約率」とは一体どこを見たらいいのか不明ですが,それぞれの値を使って1~3%を単純に差し引く計算をするだけのようです。

sat1020
質問者

補足

>表から求めた歩合から,そのまま1%や2%や3%を引き下ろしてしまっていいのですか? まさにその通りです!! 結果数式を参考にさせていただき、 無事完成しました!! INDEX・MATCHも簡単にまとめる事が出来て、 よりスッキリした数式ができました!! 失礼ですが、一つ質問があります。 INDEX・MATCHの後の 「1+($K$3>=53%))-(店舗目標予約率<=50%)*1%-(個人目標予約率<=40%)*2%)」 この先頭の「1」とはどのような意味なのでしょうか? これが無いとエラーになりますし、 最終的には、sheet1の歩合表の%を全て-1%にしたら合わせられたので、 この「1」がデフォルトで指定しないといけないのだと思いました。 解釈、正しいでしょうか?

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • ExcelセルにVBAでINDEX関数を入力

    ExcelでINDEX関数とMATCH関数で"B11:E13"セルに以下の数式データがあります。 数式は "B11"=IF(ISERROR(INDEX($A$1:$A$9,MATCH(1,B$15:B$23,0))),"",INDEX($A$1:$A$9,MATCH(1,B$15:B$23,0))) "B12"=IF(ISERROR(INDEX($A$1:$A$9,MATCH(2,B$15:B$23,0))),"",INDEX($A$1:$A$9,MATCH(2,B$15:B$23,0))) "B13"=IF(ISERROR(INDEX($A$1:$A$9,MATCH(3,B$15:B$23,0))),"",INDEX($A$1:$A$9,MATCH(3,B$15:B$23,0))) "C11"==IF(ISERROR(INDEX($A$1:$A$9,MATCH(1,C$15:C$23,0))),"",INDEX($A$1:$A$9,MATCH(1,C$15:C$23,0))) "B15~B23"に数値1~3を入力した場合イニシャルA~I が入力される式ですが、列を連続で入力できるような処理をVBAのWorksheetFunctionで行うにはどのようにコードを記述すればよいのでしょうか。 ご回答のほどよろしくお願いします。

  • INDEX関数の値を合計する方法

    =INDEX(Sheet2!C5:C100,MATCH(Sheet3!B4,Sheet2!A5:A100,0)-1) という関数で出た値と、 =INDEX(Sheet2!C5:C100,MATCH(Sheet3!C4,Sheet2!A5:A100,0)-1) という関数で出た値の合計を、Sheet1のセルに入れたいのですが、どのようにすればスマートにいくでしょうか。(検索値である、Sheet3!B4,の部分が違います) =INDEX(Sheet2!C5:C100,MATCH(Sheet3!B4,Sheet2!A5:A100,0)-1)+=INDEX(Sheet2!C5:C100,MATCH(Sheet3!C4,Sheet2!A5:A100,0)-1) とすれば、合計は出るのですが、 Sheet3のB4、C4、D4・・・と、4の行を検索した結果の値を足していきたいのです。 そうなると、 =INDEX(Sheet2!C5:C100,MATCH(Sheet3!B4,Sheet2!A5:A100,0)-1)+=INDEX(Sheet2!C5:C100,MATCH(Sheet3!C4,Sheet2!A5:A100,0)-1)+・・・・・・・・ と、非常に長くなってしまいます。 他の関数でスマートに計算する方法はないでしょうか。

  • エクセル2003 関数

    いつも回答して頂きありがとうございます。ちょっと悩んでいる事があります。 シート名1日の前半の赤,青,白,黄は最初から表示させていますが、1日の後半・2日の前半・・・は、前の状態【例えば、2日の前半以降で表示させるかどうかの判定は1日の後半の入力状況で判定】を確認して表示の有無を決めようと思っています。【シート名1日の前半の赤の右隣のセルに済が入力されたら、それ以降のシート名1日の後半や他のシートには赤を表示させない】 作業用のシートは作りましたが、シート名:1日の後半以降に入力する数式が分かりません。 作業用のシートからCOUNTIFで済の入力の有無を確認すればいいだけと思いますが、その式をどう形作ればよろしいでしょうか?宜しくお願い致します。 ・日付をふったシートの特定セルの入力内容を一覧シートに表示させる為の数式。 『前半』の行で表示させる為の数式 =IF(ISERROR(INDEX(INDIRECT($B3&"!$B$4:$C$25"),MATCH(D$2,INDIRECT($B3&"!$B$4:$B$25"),0),2))=TRUE,"",INDEX(INDIRECT($B3&"!$B$4:$C$25"),MATCH(D$2,INDIRECT($B3&"!$B$4:$B$25"),0),2)) 『後半』の行で表示させるための数式 =IF(ISERROR(INDEX(INDIRECT($B4&"!$G$4:$H$25"),MATCH(D$2,INDIRECT($B4&"!$G$4:$G$25"),0),2))=TRUE,"",INDEX(INDIRECT($B4&"!$G$4:$H$25"),MATCH(D$2,INDIRECT($B4&"!$G$4:$G$25"),0),2))

  • エクセルでのインデックス関数について

    エクセルで任意の二列からセルの中身を引っ張ってきて組み合わせるものを作成しているのですが、うまくいきません。 以下のページを参考に作成しました http://okwave.jp/qa/q5883947.html 添付画像ではB、C列の2行目に結果が出るようにしてE,F列にランダムに取りたい値、G,H列に乱数を表示させています また、B2のセルには =INDEX($E$2:$F$100,MATCH(MIN(G$2:G$100),G$2:G$100,0),COLUMN(B1)) C2のセルには =INDEX($E$2:$F$100,MATCH(MIN(H$2:H$100),H$2:H$100,0),COLUMN(C1)) と入れてあります なぜエラーが出るのかが全くわからなく、困っています ご存知の方、どうかよろしくお願いいたします

  • エクセルでINDEXの使い方について教えてください

    エクセルでINDEXの使い方について教えてください。 Sheet間で2つの項目がマッチする行の情報を取り出したいと考えています。 例としまして、 いろいろサイトを見ながら考えて以下の構文を使いましたが別の行の情報が取得されてしまいます。 =INDEX(Sheet1!$G:$G,MATCH(E2,Sheet1!$B:$B,0)+MATCH(D2,Sheet1!$C:$C,0)) (E2とD2の項目がマッチする行の情報”Sheet1!$G:$G”を取り出す) どのようにするのがよいのでしょうか? よろしくお願いします。

  • Excel INDEX関数ズレて抽出される

    INDEX関数で行列番号取得にMATCH関数を使用したときにズレてしまう。 定例のミーティングの参加表を作成しようとしています。 シートの構成は添付画像の通りです。 Sheet1 定例のミーティングの参加表 巡回Aは月ごとに担当者が変わる。 Sheet2 巡回Aの月別の担当表 巡回Aの担当表を用意して、COUNTIF関数で参加表の氏名が巡回Aのリストに含まれていない場合(カウント0)は空欄にし、0以外の場合、INDEX関数で列番号のところにMATCH関数をネスト、MONTH(TODAY())+1とし、ex. 8月なら翌月の9月に該当する列番号を抽出して巡回Aの出席を月が変わると連動するようにしたいです。 =IF(COUNTIF($B$22:$B$29,$B3)=1,IF(INDEX($C$22:$N$29,MATCH($B3,$B$22:$B$29,0),MATCH(MONTH(TODAY())+1,$C$20:$N$20,0))=0,"",INDEX($C$22:$N$29,MATCH($B3,$B$22:$B$29,0),MATCH(MONTH(TODAY())+1,$C$20:$N$20,0))),"") 職場のExcel2016では列がズレてしまい、抽出ができないです。 Excel365では問題なく抽出ができました。 2016でズレるのは何故でしょうか。 詳しい方居ましたらご教授下さい。 よろしくお願い致します。

  • 【できれば至急で】エクセル関数の式で教えてください

    画像では、1つのシートに(シート1)(シート2)と記載していますが、実際は、別々のシートになります。 シート1に画像上記のような集計表があり、日々更新をしているのですが、その時に自動的にシート2にある内容が入力されるような関数が入っています。ただ、2010年は問題なく反映されていたのですが、2011年になり入金日を「例:2011/1/4」と入力をすると、シート2の日付部分には「1/0」と表示され、「シート1」の入金日が過去未入力のものが反映されてしまいます。シート1の入金日に「例:2011/1/4」と入力したら、自動でシート2の表が完成するような式を入れるにはどのようにしたら良いのでしょうか?実際に、2010年12月末まで問題なく使われていた関数を下へ書き出します。ちなみに、シート1の入金日は、2010年、2011年が区別されて入力しています。 (シート1) H2には、 =IF(AND(F2<>"",MONTH(G2)=シート2!$A$1),G2+ROW()/1000,"") (シート2) B3セルには、 =IF($B$1="","",IF(ISERROR(INDEX(Sheet1!G:G,MATCH(SMALL(Sheet1!H:H,ROW(B1)),Sheet1!H:H,0))),"",INDEX(Sheet1!G:G,MATCH(SMALL(Sheet1!H:H,ROW(B1)),Sheet1!H:H,0)))) C3セルには、 =IF($B3="","",INDEX(Sheet1!D:D,MATCH(SMALL(Sheet1!$H:$H,ROW(B1)),Sheet1!$H:$H,0))) D3セルには、 =IF($B3="","",INDEX(Sheet1!F:F,MATCH(SMALL(Sheet1!$H:$H,ROW(G1)),Sheet1!$H:$H,0))) の数式が入っています。 12/1~12/31まではシート2の表が反映されていたのですが、シート2のB1に「1月」を入力したところ、画像のように、シート1で入金日が空白(未入金状態)の場合も、シート2に反映されてしまいました。

  • エクセルの関数組み合わせについて

    エクセルの関数組み合わせでうまくいかず困っています。 (1)あるセルに紙サイズを入力し、別シートにある一覧表行から参照 (2) (1)と同じ行の別セルに部数を入力し、別シートにある一覧表列の以上~未満で参照 (3) (1)と(2)の交差する値を反映。 イメージを添付しました。 以下の式を入れて、サイズと部数から反映できるのですが、以上~未満がうまくいきません。40,000や50,000で入れるとできますが、45,000や47,000などを入れた場合の数式がうまくいきませんでした。 =IF(ISERROR(INDEX(単価表!$B$3:$F$42,MATCH($D6,単価表!$A$3:$A$42,0),MATCH($B6,単価表!$B$2:$F$2,0))),"",(INDEX(単価表!$B$3:$F$42,MATCH($D6,単価表!$A$3:$A$42,0),MATCH($B6,単価表!$B$2:$F$2,0)))) どなたかお力を添えていただければと存じます。 なにとぞよろしくお願いします。

  • エクセルの関数の直し方

    現在、画像のような表を作成しておりますが、 1行目の前の行に5行挿入したいと考えております。 下の表からデータを製番・区分ごとに合計して上の表に表示されるようになっています。 5行挿入してタイトル等入れたいと思い、挿入してみると、 今まで下の表からの合計が上の表に表示されなくなってしまいます。 セル番号等確認はしてみたのですが、 どこがいけなくてうまく表示されないのかがわからなくて困っています。 どのように直したらいいかをご教示お願いいたします。 現在入っている関数は以下の通りです。 A2=IF(COUNT(Sheet1!$L$14:$L$38)<ROW(A1),"",INDEX(Sheet1!$B$14:$I$38,MATCH(SMALL(Sheet1!$L$14:$L$38,ROW(A1)),Sheet1!$L$14:$L$38,0),MATCH(A$1,Sheet1!$B$13:$I$13,0))) B2=IF(COUNT(Sheet1!$L$14:$L$38)<ROW(B1),"",INDEX(Sheet1!$B$14:$I$38,MATCH(SMALL(Sheet1!$L$14:$L$38,ROW(B1)),Sheet1!$L$14:$L$38,0),MATCH(B$1,Sheet1!$B$13:$I$13,0))) C2=IF(COUNT(Sheet1!$L$14:$L$38)<ROW(C1),"",INDEX(Sheet1!$B$14:$I$38,MATCH(SMALL(Sheet1!$L$14:$L$38,ROW(C1)),Sheet1!$L$14:$L$38,0),MATCH(C$1,Sheet1!$B$13:$I$13,0))) D2=IF(A2="","",SUMIFS(Sheet1!$G$14:$G$38,Sheet1!$B$14:$B$38,A2,Sheet1!$H$14:$H$38,B2)) E2=IF(C2="","",IF(ISERROR(VLOOKUP(C2,list!$S$3:$T$6,2,0)),"",VLOOKUP(C2,list!$S$3:$T$6,2,0))) H14=IF($E14="","",IF(ISERROR(VLOOKUP($E14,INDIRECT($J14),3,FALSE)),"",VLOOKUP($E14,INDIRECT($J14),3,FALSE))) I14=IF($E14="","",IF(ISERROR(VLOOKUP($E14,INDIRECT($J14),4,FALSE)),"",VLOOKUP($E14,INDIRECT($J14),4,FALSE))) J14=IF(ISBLANK(B14),"",IF(B14<="J121100144","旧","新")) K14=IF(AND(B14<>"",H14<>"-"),B14&"_"&H14,"") L14=IF(AND(K14<>"",COUNTIF(K$14:K14,K14)=1),COUNTIF($K$14:$K$38,"<"&K14)+1,"")

  • エクセルでINDEX+MATCH関数について

    INDEX+MATCH関数について B1:D7、F1:H7には次のようなデータが入力されていて J1:M3のようなものを作成したいのですが上手くいきません。 J2にコード番号を入力し、品名を表示させ、数を入力し、価格を表示させる ・・・ということをしたいのですが、上手くいきません。 K2には  =INDEX((C2:D7,G2:H7),MATCH(J2,B2:B7,0),1,LEFT(J2,1)) という関数が入っていて K2にはりんご M2には500  と表示され上手くいきます。 コード番号100番台は上手くいくのですが、200番台になると#N/Aとエラー表記になります。 どこをどう修正すれば上手くいくのでしょうか。 教えてください。

専門家に質問してみよう