• ベストアンサー

【エクセル】表から条件に合ったデータを別シートに順番に抽出したい

エクセルの表である条件にあてはまる行を 別シートに順番に抽出されるような関数を教えてください。 シート1のB列にあるデータが"渋谷区"のとき シート2のE74からE80くらいまでに シート1のC列のデータを上から順に抽出されるようにしたいです。 【シート1】 A        B         C 1 東京都 渋谷区  PC 2東京都  港区  PC 3東京都 新宿区  マウス 4東京都 渋谷区  ペン 5東京都 渋谷区  モニタ ・ ・ ・ 10 【シート2】 E 74 PC 75 ペン 76 モニタ ・ ・ ・ 80  【補足】 元の表(シート1)を編集することがあるので 自動的に反映されるよう、関数で作成できたらと思います。 シート2の構成上、抽出後のソートや、フィルタオプションは避けたいです。 わかりづらい文章で申し訳ございませんが どなたかいいアドバイスがありましたら教えてください。 お礼は明日になってしまいますが、必ずご返答いたします。 よろしくお願いいたします。  

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

  • ベストアンサー
回答No.6

>E74に関数を入力し、その後関数をE80までドラッグすればよいのでしょうか? いいえ。 1. =INDEX(シート1!C1:C11,SMALL(IF(シート1!B1:B10="渋谷区",ROW(A1:A10),11),ROW(A1:A10)))&"" の数式を掲示板上でコピーします(シート名は合わせてください) 2. E74:E80セル範囲を選択します 3. 数式バーで[Ctrl]+[V]貼り付け 4. [Ctrl]+[Shift] +[Enter] でセルへの入力を確定させます >その際、絶対参照や相対参照は必要でしょうか? セルのコピーはしませんので不要です。 参考まで

usamingolf
質問者

お礼

ご連絡おそくなりまして 申し訳ございません! なんとかできました!ありがとうございました。 助かりました!

その他の回答 (5)

noname#204879
noname#204879
回答No.5

[回答番号:No.1この回答へのお礼]に対するコメント、 1.例えば Sheet2 のセル H73 に 渋谷区 を入力して、次式を入力し   たセル H74 を下方にズズーッとドラッグ&ペースト   =IF(Sheet1!B1=H$73,ROW(A1),"") 2.同シートのセル E74 に次式を入力して、此れを下方にズズーッと   ドラッグ&ペースト   =IF(ISERROR(SMALL(H$74:H$99,ROW(A1))),"",INDEX(Sheet1!C:C,SMALL(H$74:H$99,ROW(A1))))

usamingolf
質問者

お礼

わざわざすみません。 やっと、理解できました。 本当にありがとうございました。

回答No.4

配列数式を提示しても意味がわからないと、また、質問することになるんだろうなあ と思いつつ、軽量と思われる配列数式 シート1のC11セルは未入力とする シート2のE74:E80セルを選ぶ =INDEX(シート1!C1:C11,SMALL(IF(シート1!B1:B10="渋谷区",ROW(A1:A10),11),ROW(A1:A10)))&"" と入力後、[Ctrl]+[Shift] +[Enter] で確定({}で囲まれる) 参考まで

usamingolf
質問者

お礼

ご回答ありがとうございます。 画面まで貼り付けていただき、わかりやすくて助かります。 ご指摘のとおり、配列数式については知識がなく ちょっとわからないので 再度質問させてください。 >シート2のE74:E80セルを選ぶ とありますが E74に関数を入力し、その後関数をE80までドラッグすればよいのでしょうか? その際、絶対参照や相対参照は必要でしょうか? よろしくお願いいたします。

  • masa_019
  • ベストアンサー率61% (121/197)
回答No.3

No.2です。 書き忘れましたけど、配列数式なので、 式の確定時はCtrl +Shift + Enter をお忘れなく。

  • masa_019
  • ベストアンサー率61% (121/197)
回答No.2

こんにちは。 もう少し短い数式でもできるかもしれませんが、 一例ってことで・・・。 Sheet2のE74に {=IF(ISERROR(INDEX(Sheet1!$A$1:$C$5,SMALL(IF((Sheet1!$B$1:$B$5)="渋谷区",ROW(Sheet1!$C$1:$C$5),""),ROW()-73),3)),"",INDEX(Sheet1!$A$1:$C$5,SMALL(IF((Sheet1!$B$1:$B$5)="渋谷区",ROW(Sheet1!$C$1:$C$5),""),ROW()-73),3))} として、下にズリズリ~っとコピーして下さい。 Sheet1のリスト範囲はA1:C5としています。実情に合わせて変更して下さい。 数式中の ROW()-73 は74行目から始まる場合です。

usamingolf
質問者

お礼

ご回答ありがとうございます! こんなに難しそうな関数をわざわざ作成していただき 感謝してます。 ちょっと内容を理解するのに時間がかかりそうなので 取り急ぎ、お礼をさせていただきます。

noname#204879
noname#204879
回答No.1

「シート2」の何処かの空き列を1列だけ(作業列として)使ってもOKですか?

usamingolf
質問者

お礼

ご回答ありがとうございます。 作業列を作成してもOKです! アドバイス、よろしくお願いいたします。

関連するQ&A