• ベストアンサー

EXCELのINDEX関数(数行ごと抽出)について

たくさん検索をして、数行ごとの値を抽出するしくみはおよそ解りました。 (OFFSETやINDIRECT関数もふまえてどれが最適かピンときていない;;) ひとまずINDEX関数を使ってみようかと思いましたが、 例えば「8行ごと抽出」の場合、 先頭がA1…でなく、数行飛ばして1つ目がA6にある時はどうすればよいでしょうか。 なかなか検索で出て来なくてエラーで困っています。よろしくお願いします。

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

  • ベストアンサー
  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.5

 回答No.1、2です。  後になってから考えてみましたが、 >最初に表示するB2セルにはA6セルの値を表示させたいのですから、行数は6のままでそこへ何も足したり引いたりする必要はありません。 という観点、即ち、「B2セルとの行数の差に基づいて参照先のA列のセルの行番号を変える」という観点から考えますと、B2セルに入力する関数には、 ROWS(B$2:B2) を使うよりも ROW()-ROW(B$2) を使って次の様にした方が考え方として解りやすいかも知れません。 =IF(INDEX($A:$A,ROW($A$6)+(ROW()-ROW(B$2))*8)="","",INDEX($A:$A,ROW($A$6)+(ROW()-ROW(B$2))*8))

hiyoko777
質問者

お礼

さらなる補足をありがとうございます!昨夜というか今朝の頭では数式によろめきそうでしたが、今噛み砕きまして確かにスマートな気はしました。 何を使ってどう組み合わせて解りやすく…って大切なポイントですよね。こだわりは私にもよくわかります。 しかし、そもそも私がINDEXにこだわったのでご苦労をおかけしまして;; そこにお付き合い頂いて、速攻で頂いた回答により速攻で仕事が10倍くらい進みました^^ というお礼を含める意味でベストとさせて頂きました☆

その他の回答 (4)

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

B2: =OFFSET(A$6,(ROW(A1)-1)*8,)

hiyoko777
質問者

お礼

msMike さん、シンプルな回答に驚きを隠せません(汗;)やっと今試すことができました。 質問者の「INDEXでいく」にこだわらず、「目的」から行けば、これがベストな答えですね。。自分が試した時(OFFSETも)失敗したのは、別で触れている-1の意味が解らずいじってしまったのが大きな原因で、その結果OFFSETの優先順位を下げてしまったのが残念な脳みそでした( ;∀;) (※目的からいうベストアンサーです、2つつけられないので何とぞお許し下さい~;;)

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

>先頭がA1…でなく、数行飛ばして1つ目がA6にある時はどうすればよいでしょうか。 A列の値から目的の値が複数あるときのすべてをB列に抽出したいときの論理を考えれば良いのでしょうか? 例えば0から99までの値がランダムにA1セルからA20に入力されているものとしたとき、50以上の値を上から順に抽出するようなときは次のような数式で良いと思います。 B1=IF(COUNTIF(A$1:A$20,">=50")>=ROW(),INDEX(A:A,LARGE(INDEX((A$1:A$20>=50)*ROW(B$1:B$20),0),COUNTIF(A$1:A$20,">=50")-ROW()+1)),"") 添付画像はExcel 2013で検証した結果ですが他のバージョンでも再現できるはずです。

hiyoko777
質問者

お礼

bunjii さん、なんと画像まで添付して下さって( ;∀;)恐縮です。先に頂いた回答を使ってもう8時間ほど作業をすすめておりました。 なるほど、これはこれでまた使える技ですね!!ネタ帳にメモりました。 いやー、関数の深さには終わりなき楽しさがあって、苦しいと楽しいの背中合わせです。すごいアイデアをありがとうございました^^♪

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.2

>引数にある「-1」はどういう意味なのでしょうか?  まず、 ROW($A$6) の所でA6セルの行数である6が指定されます。  最初に表示するB2セルにはA6セルの値を表示させたいのですから、行数は6のままでそこへ何も足したり引いたりする必要はありません。  ところがROWS関数の値は1から始まっていますので、それを0から始まる値に変換するために ROWS(B$2:B2) から1を引いた形にしているわけです。  その次のB3セルになるとROWS関数の所は ROWS(B$2:B3) となり、その結果は2になりますから、そこから1を引いた1に8を掛けた値である8が、 ROW($A$6) の結果である6に加わる事で14となり、 INDEX($A:$A, と組み合わせる事で、A列の14行目のセルであるA14セルの値を取得する事が出来るわけです。

hiyoko777
質問者

お礼

なるほど…すごくよくわかりました。 趣味が多くて色んなデータを管理する上で関数や書式もたくさん使いましたが、なにせ初めてな関数で自分だけでは大きな壁でした。 回答いただいてから今もずーっとその続きをやっていました(笑) 一気に進んで感激です、ほんとうにご親切に丁寧にありがとうございました。

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.1

 御質問文の内容が今一つ説明不足なため、質問者様がやりたい事が不明瞭ですが、例えば B2セルにA6セルの値を表示させ、 次のB3セルにはA6の8行下のA14セルの値を表示させ、 そのまた次のB4セルにはA14の8行下のA22セルの値を表示させ・・・ という形にしたいという事なのでしょうか?  もしそれで宜しければ、B2セルに次の関数を入力してから、B2セルをコピーして、B3以下に貼り付けると良いと思います。 =IF(INDEX($A:$A,ROW($A$6)+(ROWS(B$2:B2)-1)*8)="","",INDEX($A:$A,ROW($A$6)+(ROWS(B$2:B2)-1)*8))

hiyoko777
質問者

お礼

kagakusuki さん、速攻でお返事ありがとうございます、まさにコレです!!感激で、貴方様が神様に見えます( ;∀;) はぁ…IFをかませるなんて、思いつきもしませんでした。未熟者です。 あの、この3日考えてどうにもわからない点を1つ教えて下さいませんか? 引数にある「-1」はどういう意味なのでしょうか? 例えば参照した最初の位置から上下に-2とか-3とか+5とか変化するのかと思いきや、検索するとみんな-1なので、理解不能でおります。 (これでも、そこそこのことは解るので専門用語でもOKですm(__)m)

関連するQ&A

  • エクセル index関数で

    エクセルindex関数で疑問を持ったのですが a1:a4が 1,2,3,4の値が入っていたとき =index(a1:a4,3,1)とやるとa3の値3が入ります しかし =sum(a1:index(a1:a4,3,1))とやると =sum(a1:a3)と計算されますがなぜでしょうか? =sum(a1:3)となりエラーになるとおもいますが・・ なぜ下の場合だとセル番号が返されるのですか?

  • Excelの関数で

    お願いします。 Index関数とMatch関数を使用して表の中の値を求めようとしましたが、 検索行が複数あるため、うまくいきません。 検索する列は1列(a,b,c)ですが、検索行(あ、い、う~)が複数になっています。 更に空白もあります。 こんな感じ↓です。 ---------------------   あ  い   う   え      お   か ---------------------    a  10  20  30 b  40  50  60 c  70  80  90 --------------------- こういった場合にはどんな関数を使って一致する値を求めたら良いのでしょうか? 大変困っております。よろしくお願いします。

  • 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でズレるのは何故でしょうか。 詳しい方居ましたらご教授下さい。 よろしくお願い致します。

  • エクセル関数:他と異なる値が入っている行の抽出

    エクセル関数:他と異なる値が入っている行の抽出 商品の注文データがありまして、 同じ商品でも違う価格が入っている場合の注文があります。 この注文について抽出して、セルにフラグを付けたいのですが・・・ 詳しい方がいましたら計算式を教えて頂けないでしょうか? 添付画像のように、 同じネクタイでも、価格が違う(少数派)の行について、 フラグを立てて抽出したいです。 何卒、よろしくお願いしいます。

  • EXCELで、ある行のみ抽出したい(マクロ・関数)

    こんにちは! マクロまたは関数を使って、列DがA1のとき、次に続く行で、かつD1の行のみを残したい(もしくは新しいワークシートにコピー)と考えています。 なお、A1の入る行はいくつもあり、それらすべてを抽出できたらと思います。 何か良い方法はありますでしょうか? よろしくお願いいたします。

  • Excelの関数について

    エクセルで表を作っているのですが、関数についてひとつ質問です。 VLOOKUPなどの検索関数で、検索値として参照する値にひとつのセルの中の一定の文字列を指定したい場合はどうすればよいのでしょうか? MID関数で抽出しようとしたのですが、どうも関数で抽出した値はエラーが出るようで・・・。どなたかわかる方いらっしゃったら回答お願いします。

  • 関数で最終行を求めるにはどうすればいいでしょう

    A1からA5・A10に値が入ってるのですが VBAを使わずに関数で最終行を求めるにはどうすればいいでしょう? A10が最終行なので「10」が返ってほしいです。 空白行もあるのでCOUNTAだとダメみたいです。 COUNTA関数+INDEX関数を使えば求められるという情報を見ましたが使い方がわかりません。

  • エクセル抽出関数の使い方、教えてください!!

    大変恐れ入ります。過去の他の方の質問を一部引用しております。 <引用:2009/11/05 QNo.5425095> ---引用--- excel関数を用いてある行の範囲内の数値のみを違う行に抽出し、同じ列に対応する値も引っ張ってくることは可能ですか?     A   B   C   D 1   33   180 2   58   300 3   89   310 4   152   240 5   205   74 -------------------------------------------------- Q1. 上記にあるA1の”33”を、A1以外のセルにセットするとC,Dに正規のデータが抽出されない。    この際、    ・ =IF(AND(A1>=60,A1<=180),ROW(A1),"")    ・ =IF(OR(ROW(A1)>COUNT($C:$C),COLUMN(A1)>2),"",INDEX($A:$B,SMALL($C:$C,ROW     (A1)),COLUMN(A1)))    の抽出範囲も設定をしてみましたが、全く結果が得られません。必ずA1にデータがないとだ    めなのでしょうか。    もし可能であれば、その応用として下記の内容を検討しており、非常に苦戦しております。    是非教えていただければと思いますので、よろしくお願いします。 Q2. 上記サンプルの様なシートが2つ存在し、それを一枚のシートにまとめ、2つのデータベース     からそれぞれに対し異なる抽出条件を提示し、その結果一覧をそれぞれ表示したいと検討     しております。    大変申し訳ないのですが、少々急いでおります。是非よろしくお願いいたします。

  • Excel 関数 一度抽出された値を検索対象から外すには?

    Excel 関数 一度抽出された値を検索対象から外すには? Excelの関数について教えて頂きたいことがあります。例えばある検索範囲があり、vlookupか何かで対象の値を引っ張ってきたいのですが、検索値に対象となる値が複数ある場合、一度抽出された値を検索範囲から外し、次のvlookupではそれ以外の対象となる検索値から値を引っ張る、そしてそのまた次のvlookupでは既に抽出された2つの値を対象から外し検索値を探す、そしてそのまた・・・といったような関数の設定は可能でしょうか? もう少し詳しく状況を説明しますと、日付の"年"と"月"を検索値とし、範囲に該当する値が複数ある時に(仮に検索値を"2010年3月"とし、検索範囲の中に2010年3月1日、2010年3月8日、2010年3月15日を=year()&"/"&month()で表示させた値がある場合)、=vlookup("2010年3月",A:B,2,false)でまず一つ目を抽出し、次のvlookupでの検索の時に一つ目を検索対象から外して再度検索させ、さらに次では一つ目と二つ目を検索対象外として検索させたい、と考えています。 どなたかこのような関数の組み方をご存知の方、教えて頂きたく思います。別にvlookupにはこだわりませんので、近い方法でもいいのでどうぞ宜しくお願いします。

  • 逆インデックス関数。

    逆インデックス関数。 インデックス関数は、指定された行と列の値を返しますが、行と、列を指定してデーターを入力するにはどうしたら良いのでしょうか。

専門家に質問してみよう