• ベストアンサー

エクセル・区間を含む複数条件から該当する値を返す。お助けください。

 エクセルの質問です。いろいろ関数を試したり、Q&Aを調べても判りませんでしたのでお助けください。体力テストの結果について複数条件から、高い5、やや高い4、普通3、やや低い2、低い1と5段の評価値を返したいのです。sheet1での入力が、(1)性別(2択)(2)年齢(40才から85才以上まで5歳刻み・10択)、(3)テスト数値、以上を入力すると自動で、(4)評価値を同行セルに返したいのです。sheet2には試行的に参照する評価表を作成し、まず(1)(2)については例えば、男性(1)、43歳(40~44歳)なら140という条件値(計20択)に変換しながら試みています。しかし(3)測定値が、例えばの長座位体前屈というテストでは40~44歳男では、~-5cm→1、-4.9~5cm→2、5.1~10cm→3、10.1~20cm→4、20.1cm~→5というように区間数値から評価値を求めなくてはいけません。性別・年齢区分ごとに評価値が変わるのでややこしく、他にも同様に多種類のテストをします。評価表をにらみながらの手作業入力がたいへんなので何とか自動化できればと考えています。VLOOKUPやDGETやIF等あれこれ試しましたが、(1)(2)+(3)測定値→(4)評価値への変換ができず不可能かとあきらめ気分です。お忙しいところ恐縮ですが、解決へのヒントをお与えください。もし可能ならば初中級レベルなので例文も交えて説明いただけると幸いです。 sheet1   A   B   C    D 1 性別 年齢 テスト値 評価値 2 男  43    9   3    3 女  68   -2    1 sheet2    A    B     C     1 性別年齢 テスト値 評価値 2 140    -5   1 3 140     5   2 4 140    10   3 : :   :   :

質問者が選んだベストアンサー

  • ベストアンサー
  • _Kyle
  • ベストアンサー率78% (109/139)
回答No.5

横から失礼します。 例えば、下記参考画像のような形で参照表を用意すれば、  =MATCH(C2,INDEX(OFFSET($G$3:$K$12,,IF(A2="男",0,5)),MATCH(B2,$F$3:$F$12,1),),1) で評価値を求めることができます。 --------------------------------------------- ・縦軸は年齢   「○歳以上□歳未満」の「○」の部分に相当する値を若い順に記入。 ・横軸は評価値   左から1,2,3,… ・データ部分は境界値   「●以上■未満」の「●」の部分に相当する値を数字が小さい順に記入。   ※「評価1」の欄は●に該当する値がないので「十分に小さい値」(例では-99.9)を記入する。 --------------------------------------------- 蛇足 ・IF(A2="男",0,5)    ⇒ A列が"男"ならば0を、"男"でなければ5を返す。 ・OFFSET($G$3:$K$12,,【男性なら0,女性なら5】)   ⇒ 性別に応じた表を返す。     ※男性 ⇒ G3:K12 、女性 ⇒ (5列右にずらして)L3:P12 ・MATCH(B2,$F$3:$F$12,1)   ⇒ 年齢欄(F3:F12)をMATCHで1型検索して、     年齢に該当する行位置を返す。     ※47歳 ⇒ (見出し含めず2行目なので) 2 ・INDEX(【性別に応じた表】,【年齢に応じた行位置】,)   ⇒ 【性別に応じた表】から【性別・年齢に応じた行】を抜き出して返す。     ※42歳女性 ⇒ L3:P3 ・=MATCH(C2,【性別・年齢に応じた行】,1)   ⇒ 【性別・年齢に応じた行】をMATCH1型検索して、     テスト値に該当する列位置(評価値)を返す。     ※42歳女性15 ⇒ (左から4セル目がヒットするので) 4 --------------------------------------------- 以上ご参考まで。

littlejoy2
質問者

お礼

 この度はお世話になります。判りやすく図表も交えたご親切なご指導に感謝いたします。この数年、手作業で判定していましたので、今回の自動入力が完成できれば、ほんとうに楽になります。これで私以外の者にも引き継ぐこともできると喜んでおります。_kyle様のご回答の方法が、多数の参照表を作るにあたり、簡便で利用しやすいので使わせていただきたいと考えています。またOFFSETという関数を学ぶこともでき、とても勉強になりました。  今回、はじめての「教えて!」の投稿で、そんなんも判らんのか!という回答がくるのではと不安でしたが、とてもよい方法をご伝授していただき感謝しております。_kyle様はじめ、ご親切な方に恵まれありがたく思います。誠にありがとうございました。

その他の回答 (5)

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

毎晩失礼します!m(__)m 私も一生懸命No.5さんのようなきれいな回答を考えていましたが、 いまだに解決していません。 最後に↓のような表を考えてみました。 参考になればいいのですが・・・ ちなみに、E2セルの数式は =IF(OR(A2="",B2="",C2=""),"",IF(B2="男",INDEX($I$3:$AC$12,MATCH(C2,$H$3:$H$12,-1),MATCH(D2,$I$2:$AC$2,-1)),INDEX($I$16:$AD$25,MATCH(C2,$H$16:$H$25,-1),MATCH(D2,$I$15:$AD$15,-1)))) とかなり長いものになっていますので、この式をコピー&ペーストしてみてください。 ちなみに、年齢の109歳というのは、ExcelのDATEDIF関数を使った場合に計算できる最大の年数にしてみました。 実際はこの年齢での測定はないかもしれませんが・・・ 以上!何度も何度も!失礼しました。m(__)m

littlejoy2
質問者

お礼

 こんにちは。ご連絡遅くなりました。No.3のアドバイスを受け、自分なりに工夫しながら他の表も作成して検証しておりました。tom04様と同様の表と計算式をつくることができ、ご指導のおかげで希望の値を返すことができ、大感激でした。エクセルに詳しい知人に相談しても解決できず、あきらめかけていたので、今回のアドバイスがとてもうれしかったです。  tom04様には何度も表を修正していただき、未入力を表示させない工夫など、痒い所に手が届くような細かなご配慮、多大の時間を費やしていただき、ほんとうに感謝しております。ありがとうございました。  今回のことでINDEXとMATCH関数の組み合わせという使い方を学ばせていただき、とても勉強になりました。  このあと、他にも多数の参照表を作る関係上、No.5さんの簡便な方法を使わせていただこうと考えており、tom04様にはほんとうに申し訳ないと思っています。アドバイスいただいた未入力を表示させない工夫なども交えながら完成させたいと思っています。  何よりも迅速に誠実に回答していただいたご親切は忘れません。ほんとうにありがとうございました。  

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

たびたびごめんなさい! No.3です 先ほどの表では86歳以上のデータがありません。 それから年齢の境界を間違っているような気がします。 例えば、「70代>」という意味は70歳を超えるではなく、70歳以上ということですよね? もしそうであれば、年齢の欄の数値 71 → 69 と言うようにすべて訂正してください。 つまり表示されている数値までの範囲がその行・列に該当します。 この辺は適当にアレンジお願いします。 それからもう一つ・・・ 空白の欄に「1」を入れておかないと、万一空白欄に対応する方がおられた場合、 「0」が表示されると思います。 どうも何度も失礼しました。m(__)m

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

こんばんは! 前回は質問内容を取り違えていたようで ごめんなさい!m(__)m テスト値の範囲が年齢によって変化するということなのですね? 色々頭を悩まし関数を組み合わせてみましたが、 結局いい案は浮かびませんでした! そこで無理矢理って感じもしますが、↓の画像のようにしてみました。 男性の場合のみの表をSheet2に作成したものです。 Sheet1のE2セルに =IF(OR(A2="",B2="",C2="",D2=""),"",IF(B2="男",IF(D2>20,5,INDEX(Sheet2!$C$2:$W$11,MATCH(C2,Sheet2!$B$2:$B$11,-1),MATCH(D2,Sheet2!$C$1:$W$1,-1))))) この数式をコピーして貼り付けてみてください。 たぶん要望に近いものが出来るのでは? 女性の場合も同じようにSheet3などに作成して、 数式をIF関数の「偽」のところに組み合わせれば、Sheet1のデータが 男女混合でもオートフィルで対応できるかと思います。 もし、これまた的外れならごめんなさいね!m(__)m

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

こんばんは! Sheet2にあるように性別年齢を140という様な数値にしないといけないのでしょうか? 実際の年齢とテスト値を入力するだけで評価値を表示できるようにする方法はあると思います。 INDEX関数とMATCH関数の併用です。 一例ですが・・・ 男性・女性別々に評価値の表を作っておく必要がありますが、 男性の場合で回答します。 まず、評価値を↓のように別Sheetに作成しておきます。 今回はSheet2に作成した場合です。 この場合年齢・テスト値両方とも降順に並べておかなければいけません。     A  B  C  D  E  F   年齢  >20  20  10  5  -5 1  >84 2  84 3   79 4   74 5   69 6   64 7   59 8   54 9   49 10   44    5   4   3   2   1 11   39 (質問内容の43歳・テスト値=9 というデータしか入力していません) として、Sheet1は A    B    C    D 1 性別 年齢 テスト値 評価値 2 男   43    9     3 女   68    -2 となっている場合、評価値をD2セルに表示させるとします。 D2セル==IF(OR(B2>84,C2>20),Sheet2!B2,INDEX(Sheet2!C3:F12,MATCH(B2,Sheet2!A3:A12,-1),MATCH(C2,Sheet2!C1:F1,-1))) これでなんとか希望通りの表示になるのではないでしょうか? 尚、女性の場合は同じように女性用のデータから数式を入れなければなりません。 元データ表の 年齢が84を超えた場合や、テスト値が20を超えた場合は 元データ表のB2セルを表示させるようにしています。 ちなみに、表の説明として 年齢44の行は 39<年齢≦44 の範囲がこの行を参照し、 テスト値9の列は 5<テスト値≦10 の範囲の列を参照します。 すなわち両方のデータが交差する D11セルのデータ「3」が表示されるということです。 以上、参考になったでしょうか? どうも長々と済みませんでした。 的外れの回答なら読み流してください。m(__)m

littlejoy2
質問者

お礼

ご指導ありがとうございます。すっきりとした形にできるかと思ったのですが、まだ躓いております。  ご提示頂いたSheet2の男性の表では1行目の測定値が固定されていて、年齢区分ごとに評価値(得点)の方が変動して返すことになりそうです。でも私の希望は、評価値が固定される必要があり、測定値の範囲の方が変動いたします。(5,4,3,2,1が1行目に固定されていて、それが返ればいいのですが・・) ちなみに男性の測定値区分は40代>20,20,10,5,-5、45代>18,18,10,5,-5、50代>18,18,8,4,-5、55代>16,16,6,2,-5、60代>16,16,5,0,-9、 65代>15,15,3,-1,-10、70代>15,15,2,-2,-11、75代>12,12,0,-4,-13、80代>12,12,0,-4,-13、85代>10,10,0,-4,-13 です。  女性の測定値区分は40代>23,23,13,10,4、45代>23,23,13,10,4、50代>23,23,13,9,2、55代>23,23,12,9,3、60代>22,22,12,8,1、 65代>21,21,10,6,-1、70代>20,20,9,5,-3、75代>19,19,8,4,-3、80代>18,18,8,5,-3、85代>17,17,7,3,-5 (長座位体前屈・単位cm)となっています。  あとまだ次の段階の表の切替えまでは考えられていませんが、今のままでは、性別に関係なくSheet2の値を返しまから、男性表か女性表かの参照の切替えは、Sheet1のA列に入力した値をIF関数?等で判断するように、D2の式に組み込めばいいということなのでしょうね。  もし、ご指導いただいた内容に反して、私の解釈が誤まっていましたらすみません。ご容赦ください。もし解決方法がございましたら、再度ご指導いただけると幸いです。お手数をおかけして申し訳ありませんでした。ありがとうございました。

littlejoy2
質問者

補足

 早々のご指導をありがとうございます。特に140とする必要はありません。丁寧な図解を添えていただき、感激です!早速、熟読し試してみます。まずはお礼申し上げます。ありがとうございます!

  • syuyama
  • ベストアンサー率34% (72/209)
回答No.1

同じテスト値でも、性別や年齢によって評価値は変わるのですか? 質問文の例題では、 ~-5cm→1、-4.9~5cm→2、5.1~10cm→3、10.1~20cm→4、20.1cm~→5というように と書いていましたが、これは40~44歳男の場合であって、 年齢が変われば同じテスト値でも評価値は変わってくるということですか? テスト内容・性別年齢ごとのテスト値に対応する評価値の一覧表を作成すれば関数だけでうまく作れそうな気がします。 ですので補足要求いたします。

littlejoy2
質問者

補足

 さっそくの回答ありがとうございます。おっしゃるとおり性別と年齢区分が変わると数値がかわります。例は40~44歳男でしたが、45~49歳男では低い~普通は同じ値ですが、やや高い(4)が10.1~18cm、高い(5)が18.1cm~となります。5歳刻みで異なっています。ちなみに女性では40~44歳と45~49歳は同じで、(1)~4cm、(2)4.1~10cm、(3)10.1~13cm、(4)13.1~23cm、(5)23.2cm~となっています。でも50歳代、55歳代は異なっています。  性別2択×年齢区分10択×5段階評価 100択!からの選択になりますが、区間の処理で行き詰っています。どうぞよろしくご指導お願いします。

関連するQ&A

  • エクセル・区間を含む複数条件から該当する値を返す。その2

    材質(3種類)、容積(7種類)ごとに異なるレート(売りと買い2種類)を、材質、容積を指定することによって導き出す方法をご教授願います。 http://oshiete1.goo.ne.jp/qa4820850.html?ans_count_asc=1 過去の質問を調べたところ上記が類似していたので、その中にある_Kyle様の回答を見ながら自力で作成してみましたが材質(列で展開)は指定どおり飛んでいきますが、容積(行で展開)が最上段のまま飛んでいかない状態です。 詳細は以下の図をご覧ください。 SHEET1は、レートの表です。     A  B  C  D  E  F G 1 材質A 材質B 材質C 2 容積   buy sell buy sell buy sell 3  0.00 100 120 110 130 120 140 4  0.81 5   1.01 6   2.01 7   3.01 8   4.01 9   5.01 10  6.01 容積は、0~0.8m3の場合が3行目、0.81~1.00m3が4行目になっています。 SHEET2は、材質、容積を入力してレートを出すものです。   A   B  C  D E F 1 材質  容積      buy sell 2         レート     A2に材質(A or B or C) B2に容積 を入力するとE2にbuy F2にsellのレートが出てくるようにしたいのです。 現在、SHEET2!E2に以下の式を入力し容積(行で展開)が最上段のまま動かない状態です。 =INDEX(OFFSET(SHEET1!$B$3:$B$10,,IF(A2=I1,0,IF(A2=K1,2,4)),MATCH(B2,SHEET1!$A$3:$A$10,1),),1) 以上、よろしくお願いします。

  • エクセルで複数の条件に基づき一覧表から数値を返す

    初めて質問させていただきます。 エクセルで二つの条件に基づいて一覧表から合致する値を返したいのですがうまくいきません。 Sheet1   A   B  C 1 4  7-9 1017 2 5  7-9 1137 Sheet2   A   B   C   D   E      1    2-3  3-5  5-7  7-9 2 1   229  301   576   660 3 2  300  400  678  776 4 3   371  499  779   897 5 4  442  598  880   1017 6 5   513  697  982  1137 このような表があった場合にSheet1のC1をA1とB1の入力値に応じてSheet2の表を参照して自動表示させたいのです。参照したい数値はSheet2のB2:E6のいずれかです。 Sheet1A1が4、B1が7-9の時はSheet2のE5の数値を返すといった具合です。 自分で作った数式もあるのですが、途中で[引数が多すぎます]といったメッセージが出てイマイチ使えませんでした。参考になるかは分かりませんが載せておきます。 Sheet1 C1=IF(AND(A1=5,B2="7-9"),Sheet2!E6,IF(AND(A1=4,B2="7-9"),Sheet2!E5,IF(AND(A1=3,B1="7-9"),Sheet2!E4,・・・この後も全ての数値をカバーしたかったのですが、4つくらいしか出来ませんでした。 うまくまとめきれなくて申し訳ありませんが、回答をよろしくお願いします。

  • エクセル 複数の条件を抽出

    エクセルで複数の条件を抽出する方法について教えてください。 sheet2には以下の表があります。 A列  商品名1 B列  商品名2 C列  評価1 D列  評価2 sheet1には複数のデータがあり、そのデータを使って商品名と評価を出しています。 (商品名は手入力して、評価は関数を使って数値を出しています。) ここから、評価1がある値以上かつ評価2がある値以上の商品名1と商品名2をsheet3に抽出したいのです。(実際にやりたいのは、評価1が2%以上かつ評価2が0.9以上という条件です。) sheet3に出したいのは見やすいと思ったからで、どうしてもというわけではありません。 商品名が分かれているのはsheet2で作業がしやすいように分けています。必要であれば統合します。 評価1は書式設定で%表記にしています。 一応自分なりに調べてはみたものの、全くの初心者な為わかりませんでした。 初心者でもわかるように教えていただければありがたいです。

  • エクセルの他シートを参照する関数を教えて下さい。

    3枚のシートで成績を付けています。 シート「あ」 … テストの点を入力し、合計する シート「い」 … シート「あ」の合計点数によってランクを付ける シート「う」 … 個人の情報一覧 1、シート「う」のA1セルに名前、A2セルに性別、A3セルに年齢を入力する(10人分) 2、シート「あ」に入力規則を設け、名前をリストより選ぶと、性別、年齢が自動入力される 3、シート「あ」に個人のテストの成績を入力する 4、シート「あ」の合計により、シート「い」にランクを自動で付ける 5、シート「う」のA4セルにランクを自動入力 4、まではできているのですが、5ができません。 シート「あ」にaさんの名前を入力して、テストの点数を入力したら、 シート「い」に表示されるランクを、シート「う」のA4セルに転載したいのです。 そして次、シート「あ」にbさんの名前を入力して…としたときに シート「う」のaさんの情報は残ってほしい。 これを10人分行うと、シート「う」に10人分のランクが記載されている。 というものを作ろうとしています。 ややこしい書き方をしましたが、どなたかご教授下さい・・・

  • データから該当する欄の値を返したい

    エクセルのシートで下記の様なデータな数値の入った表があるんですが、      SUS304  SUS306   5A  300   350     10A  400   450   15A  500   550   20A  600   650   25A  700   750 それで、この表から   15A  SUS304 という条件を入力して交差する所の値(ここでは 500)を返す式を作りたいのですが…? どなたか分る方がいたら、教えて下さい。

  • エクセルについて質問です。

    (1)シート1に表を作成して、A列からD列に入力した数値をE列にSUM関数で足し算して自動的に入力できるようにします。  次に、シート2に表をつくります。その表のA列に、シート1の表のE列の数値だけをコーピーできますか。 (2)また、上記のシート1の表のE列(SUM関数が入っている列)に数値が入ると、自動的に上記のシート2の表のA列に同じ数値が入るようにできますか。 ご存知の方がおられましたら、ご教授お願いします。

  • エクセル 関数 3つ以上の複数条件にあった抽出 

    *先日も同じ質問をさせて頂き、類似した様々な質問の中から色々検索してみては、というアドバイスを頂き、検索してみたのですが、わからなかったため、再度質問させて頂きたく投稿しました。(しつこくてすいません) *前回は質問が抽象的というご指摘でしたので、詳しく記入させて頂きます。(表がずれて見にくくなっていてすいません) Sheet1(例1) 項目/  氏名  生年月日  性別 年齢  要介護度  入所日数     たろう  S1.1.1   男  83   3    100     はなこ  T1.1.1   女  97   5    50     いちろう S2.1.1   男  82   4    90     じろう  T2.1.1   男  96   4    80 *たろう=セルC3  Sheet2(例)                  要介護度              1  2  3  4  5 男性 (人数)      ○  ○  ○  ○  ○    (平均年齢)    ×  ×  ×  ×  ×    (平均入所日数)  △  △  △  △  △ *Sheet1 をベースに Sheet2 の表の「○」「×」「△」に値を返したく「○」については Sheet3  性別  要介護度 男     1  *性別=セルA2 Sheet3を新たに作成し =DCOUNTA(Sheet1$C$2:$H$6,"",Sheet3!A2:B3)という関数を入力しそれぞれ値を返すことは何とかできましたが、その値が出た人数の「平均年齢」や「平均入所日数」などの値の求め方がわからない状態です。 無知のため、関数やマクロなど色々検索してみましたがやはり方法が分からず、どなたか教えて頂けないでしょうか??よろしくおねがいします。

  • Excel 複数のシートを使って自動入力させていです。

    Excel 複数のシートを使って自動入力させていです。 Sheet1に「一覧表」とし、A1に日にち・B1に入荷先・C1「品物名」・D1「金額」を入力していく一覧表を作成しました。 入荷先の名前をSheet2.3に作り、入荷先ごとにリストを作成したいです。 一覧表に入力しただけで、自動的に入荷先ごとのシートに自動的に入力されてるってことって出来ますでしょうか? 例   A   B   C   D 1 日にち 入荷先   品物   金額 2 4/1 Aスーパー たまねぎ  100 3 4/5 B商店    きゅり   50 これをSheet1「一覧表」をした場合、 Sheet2を「Aスーパー」とし、Sheet2を「B商店」として。同じ表を作成しておく。 一覧表のシートにAスーパーでの購入を入力すると、「Aスーパー」のシートに自動的に表が作られていく 説明下手で申し訳ありませんが、よろしくお願いします!

  • エクセルでの該当する条件に一致する値の抽出

    エクセル初心者で困っています。 どなたかお助け下さい。 以下の様な表があります。 A   B  C  D   E  F   G 1商品名 入荷数 消費1 消費2 性能1 性能2 性能3 2○○  2   1   2   △△  ◆◆  □□   3××  2   1   2   □□  △△  ◆◆ 4○○  2   1   2   ●●  □□  ◎◎ この表を基に、別シートを以下の様に作成して A   B  C  D   E  F   G 1性能 【◆◆】 2 3商品名 入荷数 消費1 消費2 性能1 性能2 性能3 4○○  2   1   2   △△  ◆◆  □□   5××  2   1   2   □□  △△  ◆◆ セルB1に性能名を入力して、入力した値と 基となるシートのEFGの列から一致する値があった場合 該当する行をそのまま表示するような式を作りたいのですが可能でしょうか? 分かりづらい質問で申し訳ありませんが ご回答いただけるとありがたいです。

  • ExcelVBA複数条件一致後別シートに結果表示

    初めて質問させていただきます。VBAとマクロを勉強中なのですが、数値だけのcsvデータ(3万行くらい)をマクロで処理するように指示されて困っています。 ●ファイルの内容(概要) <Sheet1> A列:性別(男性:1、女性:2でコード化) B列:死因コード(数値5~6桁) C列:年齢 D列:市町村(3桁でコード化「201」等) <Sheet2> ・「セルA1」に表にしたい市町村コードをあらかじめ入力しておく ・セルB1~セルEC1まで死因コード ・セルA2~セルA132まで年齢0~130 ・セル範囲B2~EC132に市町村1の男性の値が入る ・セルB133~セルEC133まで死因コード ・セルA134~A264まで年齢0~130 ・セル範囲B134~EC264に市町村1の女性の値が入る Sheet2にはあらかじめ表を作成しておき、行と列の値を参照してSheet1で一致する値が、列と行が交わるところの空白セルに入力した市町村コードと一致していることもふるいにかけられ、表で結果としてカウントされるときには男女別に分かれるようにしたいのですが可能でしょうか? ややこしくて申し訳ありません。繰り返しあらかじめ作成された表にカウント結果を入力させる記述はヒントを頂ければ頑張ります。 なので、4つの条件に一致した場合にカウントして別シートに返すにはどうしたらいいのか助けていただけますと幸いです。 それと、シート1の最終行は決まっていません。

専門家に質問してみよう