• ベストアンサー

エクセルで、指定の値よりも大きい数字を最初に越えたときの列番号を返すには?

テストの点数で、初めて40点を下回ったときの日付と、初めて80点を越えた時の日付を返すような関数を組みたいのですが、どうやればいいか分かりません。MATCH関数を使うような気がするのですが、そこから先が分かりません。 例) 1月1日  43点 1月2日  83点 1月3日  81点 1月4日  26点 ・・・ この例であれば、80点を初めて越えるのは「1月2日」、 初めて40点を下回るのは「1月4日」という形で答えを返したいのですが、どなたかお知恵を貸してください。よろしくお願いします。

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

  • ベストアンサー
  • maron--5
  • ベストアンサー率36% (321/877)
回答No.2

◆こんな方法はいかがでしょう >80点を初めて越えるのは「1月2日」 D2=MIN(INDEX((B2:B10<=80)*10^5+A2:A10,)) >初めて40点を下回るのは「1月4日」 D5=MIN(INDEX(((B2:B10>=40)+(A2:A10=""))*10^5+A2:A10,))

kenken18
質問者

お礼

ありがとうございます。 私が理想にしていた形そのものです。 質問なのですが、INDEX関数内で範囲を指定して掛け算、足し算まで入っていて、この関数の意味するところが良く理解できません。 この部分についても教えていただけないでしょうか? よろしくお願いいたします。

その他の回答 (5)

  • maron--5
  • ベストアンサー率36% (321/877)
回答No.6

>INDEX関数内で範囲を指定して掛け算、足し算まで入っていて、この関数の意味するところが良く理解できません。 1)((B2:B10>=40)+(A2:A10=""))*10^5 は40未満のデータを排除しています 2)「B2:B10の40以上」または、「A2:A10が空白」に10^5(100000)を掛けます 3)数式バーのうち、((B2:B10>=40)+(A2:A10=""))*10^5 の部分を指定して、「F9」をクリックします 4){100000;100000;100000;0;0;100000;100000;100000;100000} になり、B列40以上、A列空白が「100000」になっています 5)それに、A2:A10 を足しますと 6)数式バーのうち、((B2:B10>=40)+(A2:A10=""))*10^5+A2:A10 の部分を指定して、「F9」をクリックします 7){139814;139815;139816;39817;39818;100000;100000;100000;100000} になり、これのMINは「39817」になります 8)「39817」はシリアル値なので、表示形式を「日付」にすると、「1月4日」になります

kenken18
質問者

お礼

ありがとうございました。大変ためになりました。 F9キーの使い方まで教えていただき、大変感謝です。 本当にありがとうございました。

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

80点以上の行で、行番号の最小の行の日付、を求める。 配列数式ですが 例データ 2月3日 23 2月14日 45 2月25日 82 3月4日 81 4月4日 34 4月7日 89 =INDEX(A1:A8,MIN(IF(B2:B8>80,ROW(B2:B8),99))) と入れて、SHIFT+CTRL+Enterを同時押し。 99はこのデータではありえない行数を入れる。 結果 2009/2/25 (このセル書式は日付に設定) ーー 作業列を使うなら A2:B7  にデータ A列   B列  C列 2月3日 23 2月14日 45 2月25日 82 1 3月4日 81 4月4日 34 4月7日 89 C列は =IF(COUNTIF($B$2:B2,">80")=1,1,"") 求める日付は =INDEX(A2:A8,MATCH(1,$C$2:$C$8,0),1) (このセル書式は日付に設定) ーーー 下回った日も上記式を 初出だからMIN、点数判定部部分を<40に変えることで出来ると思います。

kenken18
質問者

お礼

ありがとうございます。配列数式という方法があるんですね。 話には聞いていたんですが、こういうときに使うんですね。 あまり馴染みがなっかたので、今後覚えていこうと思います。 ありがとうございました。

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.4

作業列を使った方法を紹介します。 データがAおよびB列の2行目から下方にあるとします。 C2セルには次の式を入力して下方にオートフィルドラッグします。 =IF(B2="","",IF(COUNTIF(B$2:B2,"<="&40)=1,"A",IF(COUNTIF(B$2:B2,">="&80)=1,"B",""))) 最初に40点以下となった行にAが、80点以上になった行にBが表示されます。 たとえばD2セルに40点以下となった日、D3セルに80点以上になった日と入力し、E2セルには次の式を =INDEX(A:A,MATCH("A",C:C,0)) E3セルには次の式を入力します。 =INDEX(A:A,MATCH("B",C:C,0)) なお、E2およびE3のセルの表示形式は日付にします。 いずれの式も列を対象にしていますのでデータが次々に入力されても即座に対応できます。 なお、MATCH関数を検討したことでしょうが何点以上とか、何点以下とかの形で式をたて使うことができません。点数を昇順や降順で並べ替えをしたうえで使うことができなくもないですが、元のデータを並び替えるなど操作が面倒になりますね。

kenken18
質問者

お礼

ありがとうございます。やはり作業列を使うのがスマートのようですね。 MATCH関数を使おうかと思ったんですが、KURUMITOさんのおっしゃるとおり、昇順並び替えの必要などがあり、あまり実用的なものにならず困っていました。。。 ありがとうございました。

  • maron--5
  • ベストアンサー率36% (321/877)
回答No.3

◆先ほどの回答での添付図で「83越え」になっていますが、正しくは「80越え」です ◆なお、回答式は「80越え」になっています

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

こんばんは! 色々方法はあると思いますが・・・ 一例です。 ↓の画像のような感じで作業列を使っています。 C2セルに =IF(OR(B2="",B2<=80),"",ROW(A1)) D2セルに =IF(OR(B2="",B2>=40),"",ROW(A1)) という数式をいれて、C2・D2セルを範囲指定した後に C2セルのフィルハンドルで下へオートフィルでコピーします (とりあえず100行まで対応できる数式にしていますので、100行までオートフィルでコピー) そしてF2セルに =INDEX($A$2:$A$100,SMALL(C$2:C$100,1)) と入れてG2セルまでオートフィルでコピーします (セルの書式設定から表示形式は「日付」で・・・) これで何とか希望に近い形にならないでしょうか? 以上、参考になれば幸いですが、 他に良い方法があれば読み流してくださいね。m(__)m

kenken18
質問者

お礼

ありがとうございます。作業列を使えばいいんですね。 なんとか関数だけで完結させようとしてたので、 今後はこういうやり方も考えるようにしたいと思います。 ありがとうございました。

関連するQ&A

  • エクセル 日付文字列からの数字のみ抽出

    エクセルについてですが、 「1月1日分」と書かれた日付文字から 「0101」と言う数字を抽出するにはどのようにすれば良いでしょうか?…例えば、「12月12日分」であれば「1212」です 最終的には「241001」と言う文字に変更したと思うのですが、どうしても01日のような一桁の月日の時に0を入れる方法が思い浮かびません。 知恵を貸していただければ助かりますm(__)m

  • 同じ数字の時塗りつぶす エクセル

    Sheet1のA1セルからH1セルまでに日付が入っています(1月1日~1月7日) Sheet2のA1セルには赤、B1には白と文字入力しており、A2~B32までそれぞれ日付が入力してあります。(日付のダブりはありません) 例:A2~A9までは1月1日~1月7日 B10~B17は1月8日~1月15日といったような Sheet1のA1セルに日付を入力したときにSheet2の赤または白に日付が該当する場合にその色で自動的に塗りつぶすような動作はできないでしょうか? 例えばSheet1のA1セルに1月1日と入力した場合、Sheet2ではA列(赤)に1月1日と記載があった場合そのタブ1のA1セルが塗りつぶされるといった内容です。 お手数ですがご回答のほどよろしくお願いいたします

  • EXCEL 2種類の関数を交互列にコピーする方法

    EXCEL2007を使用しています。 交互の列にそれぞれ違う関数を使用し日毎の統計をとっています。 (行数は固定です) 先日付まで予め関数をコピーしたいのですが、 どちらかでオートフィルハンドルを使用すると、 もう片方の関数が消えてしまいます。 VBA等は詳しくないので、 できるだけ関数で処理したいと考えているのですが・・・ 何かいいお知恵はありますでしょうか。 画像に参考例を載せました。 よろしくお願いいたしますm(_ _)m

  • エクセル「3つの数字の合計がある数字になる組み合わせ」を調べたい。

    こんにちは。 エクセルで、以下のような問題を解くことはできますでしょうか? 基本的な関数しかできず、自分で調べたところ。ソルバーやVBAを使えばできるのかもしれないとは思ったのですが、なかなか良い類似例を見つけられず、苦戦しています。 <問題> 「3」「5」「6」「8」…といったランダムな数字が合計になる3つの数字のすべての組み合わせを知りたいです。 たとえば、 「3」なら答えは「1+1+1」 「5」なら答えは「2+1+1」「1+2+1」「1+1+2」 「6」なら答え「4+1+1」「1+4+1」「1+1+4」「3+2+1」「2+3+1」「1+2+3」「3+2+1」…のような形です。 ※実は子どもの名付けで、画数の組み合わせを出そうと思っています。 わかりづらい点があるかとは存じますが、お力添え何卒よろしくお願い致します。

  • EXCEL 作業列を使わずにどこまでできるか。

    適切なタイトルでなくてすみません。添付の画像にあるエクセルの表があるとします。表1は、縦軸は生徒の名前、横軸は複数回行ったテストの各自の得点とします。 表2は、表1を検索して点数毎の人数を得るものです。(例では、1回でも20点以上とった人は5人、30点以上とった人は3人、40点以上とった人は1人を示しています)。表2のB12~B15の各セルに答えを入れます。 さて、B12~B15に入れる関数を知りたいのですが、作業列を作ってしまえば簡単にできてしまいますが、今回は作業列を使わないでこれを求めたいのです。いくら考えても良いアイデアが浮かびません。配列数式を使う場合と使わない場合と両方ともに解があるならば、両方とも教えてもらえないでしょうか。

  • Excel MATCH関数で検索範囲内に同じ値の検索値が複数ある場合

    MATCH関数で、検索した値が複数ある場合に1つしか出なくて困っています。 (例)    A B C D 1 年月日 種類 番号 備考 2 4月1日 肉類 1 3 4月2日 野菜 2 4 4月3日 肉類 1 5 4月4日 果物 2 6 4月5日 野菜 1 7 4月6日 果物 3 8 4月7日 果物 2 9 4月8日 肉類 1 この表で、D9の備考の欄に「種類:肉類、番号:1」と同じものがあった時の日付を、新しい日付で取り出したいのです。 INDEX(A2:A8,(MATCH(B9,B2:B8,0)+MATCH(C9,C2:C8,0))/2) としたのですが、本当は4月3日を取り出したいのですが、4月1日が出てきます。 どのようにしたら良いでしょうか? Excel2003です。 よろしくお願いします。

  • Excel 期間指定

    電気料金の計算方法で7月1日から8月31日までの電気の単価を100円とします。それ以外の9月1日から6月30日までを50円とした時の電気料金の算出方法を考えています。 まず、A1=TODAY() で本日の日付をだして、次にB1セルに100、C1セルに50とします。D1=if(A1=7月1日から8月31日,B1,C1)の様な関数を使いたいのですが肝心の論理式をどのように書き出してよいか分かりません。宜しくお願いします。

  • エクセルで生年月日の数字のみを別々の列に取り出すには…?

    うまく説明できるか心配なのですが…どなたか教えてください。  A列に生年月日が以下のように入っています。  平成9年3月15日 がセルA1  平成13年12月4日 がセルA2  平成2年1月1日 がセルA3  …のようになっています。  これをB列に年の数字のみ 9,13,2,…     C列に月の数字のみ 3,12,1,…     D列に日の数字のみ 15,4,1,…  と取り出したい?(分けたい?)のです。 というのも、アクセスのテーブルがこの形で入力するようになっていて、エクセルのワークシートにはすべてがつながって(スペースもなく)入力されているため、上記のようにできればアクセスに貼り付けやすいと考えました。どちらのソフトも詳しくはないので、アクセスのデータベースは変更したくないのです。 どなたか知恵をお貸しください。お願いします。

  • Excel 表でまとめた値をテンプレートの書式へ

    こんにちは。 Excelについての質問です。 Excelに以下のようなデータがあったとします。 項目名: 生徒名 クラス名 教科 担当教師 テスト名 テスト受験日  テスト点数 コメント これをExcelのそれぞれの項目名にし、以下のようなデータをまとめたとします。 生徒名   クラス名 教科 担当教師 テスト名      テスト受験日 テスト点数 コメント 山田花子 花組   英語  佐藤   春休み復習テスト 4月10日   80     間違えた問題の復習を頑張りましょう。 田中一郎 星組   国語  安永   春休み強化テスト 4月8日    95     大変良いです。 この結果をテンプレートの書式を作って、表彰状のようにして、生徒一人一人に渡したいとします。 テンプレート書式例: ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー (生徒名の値) さん (クラス名の値) の (教科の値) のクラスで受験して頂いた (テスト名の値) の 結果をお知らせします。 (生徒名の値) さんの (テスト受験日の値)に受験した (テスト名の値) の点数は (点数の値) 点でした。 担当の (担当教師の値)からコメントが届いていますので、確認してください。 (コメントの値) 次回のテストもしっかり頑張ってください。 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー このような書式に各行の値を埋め込み、ExcelまたはWordで文章を作りたいのですが、どのように作ったらいいかわかりません。 どなたかご教授ください。

  • 【エクセル】 行番号を変数とする方法について

    下表のようなデータがあったとします。 A B C D 1 2 TEST 3 4 5 合計 100 6 <目的>ある文字列が含まれる行番号以下の範囲を指定して、VLOOKUP関数を使用。       ある文字列が含まれるセル行番号は、毎回異なる。 <具体例> 1) MATCH関数で、「TEST」という文字が含まれる行番号を取得     この場合「2」 2) VLOOKUP関数で VLOOKUP("合計",A2:D5,2false) というように   MATCH関数で得た行番号を他の関数に組み込みたいです。     どなたか、良い方法を教えて頂けないでしょうか? よろしくお願い致します。

専門家に質問してみよう