• ベストアンサー

種目別タイムでの判定をエクセル関数で表現するには?

頭がこんがらがってきましたので助けてください。 (1)距離別で数種目があり、(2)各々の種目内でのタイムがデーター内のタイムを上回れば(3)各バッジ級が決まります。 VLOOKUP関数でいけるかな?と思ったのですが、ん?検索条件が二つ必要ではないか?その際の関数は?と分からなくなってしまいました。 画像を添付します。 「種目」と「タイム」を手入力した時に、緑のセルに該当の「級」が表示される様に作ろうと思っていましたが行き詰まりました。

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

  • ベストアンサー
  • msMike
  • ベストアンサー率20% (363/1775)
回答No.8

1.範囲 J2:K7 を選択⇒[名前ボックス]に「男子500」を上書き  ̄ ̄入力して Enterキーをパシーッ 2.ステップ1を下記の要領で繰り返し  ̄ ̄範囲 J8:K13 ⇒ 「男子1000」  ̄ ̄範囲 J14:K19 ⇒ 「男子1500」  ̄ ̄範囲 J20:K22 ⇒ 「女子500」 3.式 =VLOOKUP(D2,INDIRECT(B2),2) を入力したセル E2 を  ̄ ̄下方にズズーッとオートフィル

sarubaba
質問者

お礼

ありがとうございました。 助かりました。

その他の回答 (7)

回答No.7

失礼、間違えてますね。 添付した図の場合、 名前をつける範囲はK:L列でした。

  • msMike
  • ベストアンサー率20% (363/1775)
回答No.6

[No.2お礼]へのコメント、 》 データの部分をもう少し変更した方が良いでしょうか? そんなことより、貴方の「超えて」「以下」を、私が書いたように、それぞれ「以上」「未満」に変更しませんか? VLOOKUPやHLOOKUP関数の性格をご存じないのでせうか? 変更できないならサヨナラです。

sarubaba
質問者

お礼

コメントありがとうございます。 「以上」「未満」に変更してみます。言葉の意味合いでタイムに若干変更があります。 男子1000の場合のタイムの解釈は下記の通りです。 A級⇨1:40.001未満(1:40.000から速いタイムで該当) B級⇨1:40.001以上~1:50.001未満(1:50.000から速いタイムで該当) C級⇨1:50.001以上~2:05.001未満(2:05.000から速いタイムで該当) D級⇨2:05.001以上~2:20.001未満(2:20.000から速いタイムで該当) E級⇨2:20.001以上~2:56.001未満(2:56.000から速いタイムで該当) 関数に関しては詳しくありません。色々見ながらやっている状況でした。

  • bunjii
  • ベストアンサー率43% (3589/8248)
回答No.5

>データー内のタイムは、0も表示しなければならないと思い文字列設定していました。 データー側の時間と判定側のタイムを数値化(時間のシリアル値)して質問の画像で提示の範囲で検証してみました。 IF関数とVLOOKUP関数の組み合わせでは入れ子の階層が深くなるのでINDEX関数を使う方法が分かり易いと思います。 この回答の添付画像のように行番号を含めた表で説明させていただきます。 E3セルの数式は下記のとおりです。 =INDEX(K$1:K$19,(MAX(INDEX((I$2:I$19=B3)*(J$2:J$19<=D3)*ROW(K$2:K$19),0)))) 内側のINDEX関数では判定側の種目とデーター側の種目が一致し、然も、データー側の時間が判定側のタイム以下である組み合わせの行番号をMAX関数へ配列値で渡します。(複数条件を1つの数式内で処理するとき乗算はANDと等価になります) 外側のINDEX関数はデーター側の級別の配列値からMAX関数で抽出した行番号を使って判定の結果を取り出しています。 E3セルを下へコピーすれば目的の結果を得られるでしょう。

sarubaba
質問者

お礼

関数にあまり詳しくなく、数式を入れて頂きありがとうございます。 各種目でデーターのタイムから速いタイムが、各A~F級に該当します。 数式を参考にしてみます。

回答No.4

「時間」の扱いについての指摘は既出ですので、そこは省略。 全角だと例えば「0:48.500」としてやらないと エクセルは「何分何秒何」として見てくれません。  ※「.500」まで画面上で見せておくには   数値の表示形式で「[m]:ss.000」と指定してやります。 ここは直しておきましょう。 で、本題。 お示しの図のような構成でVLOOKUP関数を有効利用しつつ 命題を解決するには「範囲の名前」「INDIRECT関数」を 理解してやると事が早く進みます。  ※それぞれ細かい解説はしませんので、ちょっと調べてみてください。 VLOOKUP関数の第2引数「参照範囲」は、 セル番地を入力(J2:L7など)して指定してやる方法のほかに 「範囲の名前」を指定してやる方法があります。 ソレを有効活用してやろう、という寸法です。 まず、準備。 添付図の通り、「※」欄を用意します。 VLOOKUP関数は「超えない近似値」を返してくるので、 「自行以上次行未満ならこの評価」の形が必要です。  ※例えば男子500mで48秒5ちょうどが「A」評価なら   「※」欄は「0:48.501」「0:53:001」などに   してやってください。   そのまま使うと48秒5は「B」評価されます。 E評価も取れなかった時のために「評価なし」も入れておきます。 評価表の表に、種目別の範囲の「名前」を付けてやります。 男子500mの範囲(図ではJ2:L7)を選択しておいて、 「数式」タブから「名前の定義」をクリックします。 「名前」を「男子500」としてやり、 参照範囲がずれていないことを確認し、OK。 コレを種目の数だけ繰り返してやりましょう。 名前が整いました。 定義した「名前」はB列に入力(プルダウンで選択)した「種目」と ほぼ間違いなく一致するはずです。 なので、INDIRECT関数で「セルの値」を VLOOKUP関数の第2引数に「文字列」として渡してやります。   E2セル:=VLOOKUP(D2,INDIRECT(B2),2,TRUE) としてやり、タイムを検索値として、B2セル(種目)と合致する範囲から 近似一致(超えない近似値)で範囲の2列目を返してね、としてやります。 長々ときましたが、そんな感じです。

sarubaba
質問者

お礼

回答ありがとうございます。 >例えば男子500mで48秒5ちょうどが「A」評価なら  「※」欄は「0:48.501」「0:53:001」などに  してやってください。  そのまま使うと48秒5は「B」評価されます。  E評価も取れなかった時のために「評価なし」も入れておきます。  データ内にあります評価タイムから、速いタイムだと評価が該当します。  関数に詳しくないので、できるだけ短い関数でできるかな?とも思っていました。  教えて戴いた関数を参考にしてみます。

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

最近同じようなパターンの質問があったので、その解決法の類推でできると思う。 要点は、「表引きをする表のセル範囲」に、別々の(エクセルの)「名前の定義」をして、実際に関数で 使うときには INDIRECT(名前文字列)で、参照表(表全体の該当一部分)を指定する引数部分に指定するのです。 「別々の」のとは本質問の場合、男子500、男子1000、男子1500、女子500のようなカテゴリです。 そして =INDEX(範囲、MATCH(成績タイム、INDIRECT(表部分の定義した名前)))  のような式のパターンで、「〇級」を導き出す。 ー 質問に対し注意事項 (1)そのほかに本質問ではL列に1列に並んでいるが 男子500 ・・ 男子1000 ・・ 男子1500 ・・ 女子500 ・・のように ーー しかし 男子500 男子1000 男子1500 女子500 ・・・ のようにカテゴリ別に、別列群にして、横に流す表でやってみます。 1カテゴリあて、タイム区画列+〇級列を記述した2列です。 ただしエクセルの「名前定義」操作で、「最上端」を使うときはこのやり方が必須。 (第1行目に男子500 男子1000 男子1500 女子500にして タイム区切りークラス(級)の対応2列の表を作る。4カテx2項目=10列作る。) (注)今のままI列に複数カテを上下に連ねる状態でも、名前定義の際にセル範囲に、気を付けて指定すればできるとは思うが。   市販解説書の例などは、わかりやすくするため、「上端列」の名前定義を使う為もあって、このパターンを使っているものが多い。 (2)実際の表では「人間の能力の限界を常識的に理解している」ので、0に近い、表のアイテムはいらないと思うだろうかもしれないが、 VLOOKUP(TRUE型)やMATCH関数(第3引数1の型)では、0ー「(適当な)人類達成最小記録近くまで」のアイテムも作っておくべき、となると思う。 (3)本件は、データが(整数や「小数点以下ありかつ定桁」の小数ではないので)、日付シリアル値で表を作るべき(注)と思うので、うまく行くか充分テストをやることが必要   文字列などで、テーブルの時間部分(列)を作ると、MATCH関数やVLOOKUPのTRUE型が、思ったように結果を出せない恐れがあると思う。 (注)時刻シリアル値は12:23:00(半角数字と記号)のようにシートセルに入れないといけない。 ーー 以上で考え方の概略は尽きる。 あとは質問者が、表と関数式を具体化してくれることが望ましい。 文章が長くなるのでここでうちきる。 具体例での関数式などは時間があれば、後刻回答。

sarubaba
質問者

お礼

回答ありがとうございました。 簡単にできると思いましたが結構関数を使うようですね。

  • msMike
  • ベストアンサー率20% (363/1775)
回答No.2

確認させてください。 》 男子1000 1.40.000 A級 》 男子1000 1.50.000 B級 》 男子1000 2.05.000 C級 》 男子1000 2.20.000 D級 》 男子1000 2.56.000 E級 データー表内の上記部分(男子1000 )の場合、下記のように理解してOKですか? 違うのなら、どのように解釈すべきか補足願います。  ̄ ̄ ̄ ̄ ̄ ̄ ̄0:1:40.000未満⇒A級 0:1:40.000以上0:1:50.000未満⇒B級 ~~~~~~~~~~~~~~~~ 0:2.20.000以上0:2:56.000未満⇒E級 0:2:56.000以上は該当級なし

sarubaba
質問者

お礼

回答ありがとうございます。 男子1000のタイムの解釈は下記の通りです。 A級⇨1:40.000以下(1:40.000から速いタイムで該当) B級⇨1:40.000超えて~1:50.000以下(1:50.000から速いタイムで該当) C級⇨1:50.000超えて~2:05.000以下(2:05.000から速いタイムで該当) D級⇨2:05.000超えて~2:20.000以下(2:20.000から速いタイムで該当) E級⇨2:20.000超えて~2:56.000以下(2:56.000から速いタイムで該当) データの部分をもう少し変更した方が良いでしょうか?

  • bunjii
  • ベストアンサー率43% (3589/8248)
回答No.1

>VLOOKUP関数でいけるかな?と思ったのですが、ん?検索条件が二つ必要ではないか?その際の関数は?と分からなくなってしまいました。 VLOOKUP関数で抽出できますが、男子と女子で評価が異なりますので、IF関数で条件分岐すれば良いと思います。 但し、検索範囲の値が数値では無いようなので、作り直しが必要になるでしょう。 男子500の1.06.000は文字列ですよね? 1分06秒.000はExcelのシリアル値と判断させるには1:06.000のように入力しなければなりません。(1:06.000→0.000763888888888889)

sarubaba
質問者

お礼

回答ありがとうございます。 データー内のタイムは、0も表示しなければならないと思い文字列設定していました。 そこから間違っていたようですね。

sarubaba
質問者

補足

表示し直してみました。 関数あまり詳しくないので難儀していました。

関連するQ&A

  • Excelのvlookup関数について

    関数初心者です。よろしくお願いいたします。 例を挙げます。 データベース    A       B       1 種目番号  種目名         2  1     ハードル走     3  2     バスケットボール 4  3     バレーボール    5  4     ソフトテニス     6  5     ソフトボール 7  6     ハンドボール    8  7     マット運動 9  8     跳び箱運動 10  9     平均台運動 上のデータベースで、種目番号をセルD2に入力すればセルD3に種目名が返るように関数を入力したいと思います。 その際の関数は、アクティブセルをD3にして、 =vlookup(D2,$A$2:$B$10,2) でいいと思うのですが、その際、まだ種目番号が決定していない場合(何も入力しない)は、#N/Aというエラーコードが表示されます。 このエラーコードを表示させないようにするためには、どのようにしたらよろしいでしょうか。 分かりづらい文章で申し訳ありません。ご不明な点あればまた説明いたしますのでご指摘ください。 よろしくお願いいたします。

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

    エクセルでvlookupを使い得た結果がAだとします。 次にif関数でvlookup関数の結果のセルがAならばと言う式を作りました。 が、if関数が認識してくれません。 同じif関数の式でキーボードからAを入力したら結果が出ます。 vlookup関数のセルにはAでなく式しか入ってないからでしょうか? vlookup関数の結果をif関数で認識する方法をお願いします。

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

    色々調べてみたのですがわからなかったのでどなたか教えてください。 例えばA1のセルに「1111」と入力されていてB1のセルに「土曜日」と入力された場合にC1のセルに「特」という文字を自動に入れたい場合はどうすればよいのでしょうか? A1とB1のセルに何も入力されていない場合はC1も空欄にしたいです。 A1のセルにはVLOOKUP関数をいれていて、返ってきた文字が「1111」の場合です。 B1は手入力で入れています。 同時にA1のセルに「2222」(これもVLOOKUP関数で帰ってきた文字です)、B1のセルに「日曜日」と入力された場合にはC1のセルには「大特」という文字を入れたいのですが、組み合わせでできますでしょうか? 初心者なので質問がおかしいかもしれませんが、よろしくお願いします。

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

    エクセル2007関数について セルAT22に「採用」の文字を入力するとセルAB24、AH24 の入力数値をF39(AB24)、F40(AH24)各々にコピーしたい のですが、関数を教えてください。

  • EXCELのINDIRECT関数について

    こんにちは。 現在仕事で他の方が昔作ったEXCELを見ているのですが、シートが2枚(sheet1, sheet2)あって次のような関数が使われてます。 -- <sheet1> 【セルD15】SGP (←入力) 【セルD16】150 (←入力) 【セルD17】=VLOOKUP(D16,INDIRECT(D15),2) (←関数) (セルD17には、165.2という計算結果が表示されています) <sheet2> SGP 呼径 外径 A mm 6 10.5 8 13.5 10 17.2 15 21.7 20 27.2 25 34.0 32 42.7 40 48.6 50 60.5 65 76.3 80 89.1 90 101.6 100 114.3 125 139.8 150 165.2 175 190.7 200 216.3 (sheet2には、同様の表が上下左右に並んでいます) -- ここで、セルD17に入力されている関数について、VLOOKUPはたまに使うんですが、INDIRECTがサッパリ謎で困っております。 何故こんな簡単な式で、別シートの表の一部を参照できるのか?(しかもシート名の指定もないし・・)という点、どなたか教えていただけないでしょうか? よろしくお願いします!

  • エクセルで範囲内の条件を満たす数値を返す関数を教えてください。

    エクセルで範囲内の条件を満たす数値を返す関数を教えてください。 100以下なら1111 100超~200以下なら2222 200超~300以下なら3333 300超~400以下なら4444 400超~500以下なら5555 500超~600以下なら6666 600超~700以下なら7777 700超~800以下なら8888 800超~900以下なら9999 900超なら10000 上記のような条件があり、入力した数字が該当する条件の範囲内に該当している数字を抽出したいのですが、それができる関数を教えてください。 例えばA1セルに650と入力するとB1セルに上記の条件で該当する7777を表示する、 A1セルに100と入力するとB1セルに1111、 901とA1に入力するとB1に10000と表示されるなどのようにしたいのです。 IFを使った関数では7つまでしかネストできないので、上記の場合10ネストしなければならないのでIF関数が使えません(使える方法があるかもしれませんが私は知りません)。 ネストせずに「&」を使う方法も考えたのですが、それだと数値として扱われず文字として扱われてしまい表示形式を自在に編集することができなくなってしまいます。 良い解決方法を教えてください。

  • エクセルで塗りつぶしの色を設定する関数は?

    エクセル2007を使用です。あるセルに文字を入力すると、その文字に応じて色がつくようにする関数はありますか?具体的にはセルB4に「良」と入力するとC4に「管理」と自動的に入力され、さらにセルに色がつくようにしたいです。自動的に文字が入力される部分はVLOOKUPで設定できたのですが、ココに自動的に色を設定する方法がわからないのです。 条件付き書式で、数式の所に関数を設定できるのでしょうか?教えてください。

  • エクセル関数について

    条件として 例えば H20.1.1~H20,12.31生まれ のように 日にちに範囲をつけ それに該当する場合に 「お祝い」という文字を表示させたい場合は 何の関数をどのように使えばよいのでしょうか セルA  生年月日を入力 セルB  (条件の範囲の中に誕生日があれば) 「お祝い」と表示

  • Excelの関数について教えてください。

    Excelの関数について教えてください。 シート1に顧客表があります。 そこから検索をかけてシート2に該当する顧客を表示させたいです。 検索項目が一つならばVLOOKUPなどを使えばいいのですが、 検索に必要な項目が3つあります。 例えば   A B C D… 1 1 1 1 企業A 2 1 1 3 企業B 3 1 2 1 企業C のような感じで1000くらいのデータが並んでいます。 シート2にて   A B C D 1 1 1 1 企業A 2 それぞれのセルに1-1-1と入力するとD1に『企業A』と表示させ、 1-1-3と入力すれば『企業B』というようにA1~C3に入力する数値によりD1の表示を変えていきたいです。 そして該当がなければ『該当無し』と表示したいです。 この場合の関数は何を用いてどのような式を作ればいいのでしょうか? 関数に詳しい方、ご協力お願いいたします。

  • エクセル関数に関して

    エクセルの関数に関して教えてください。 添付画像のように【セル1】と【セル2】の入力結果に応じて【セル3】に数値として答えを出すには、どの関数を使用すれば可能ですか?

専門家に質問してみよう