- ベストアンサー
エクセルでデータの抜き出してについて
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
#3です。まだ開いていたので、関数による抜出しの考え方(解説版)を述べてみる。 作業列を使わない代わり、配列数式という、(人によっては)馴染みのない、仕組みを使わざるを得ない。 例データ A,B列 A1:B10 東京 山田 千葉 今井 東京 今中 東京 今野 神奈川 久米田 千葉 矢代 東京 田川 神奈川 木村 埼玉 西田 東京 上村 ーー ここからA列で、東京の行を抜き出すことを考えるとする。 目視でわかるように、該当行は複数ある。 エクセルでは、関数では、1セル1式で、返してくれる結果は1つが普通。 これを複数個を返させるには、配列数式というものを使わざるを得ない。 そこから配列数式の出番になる。VBAの関数でも複数の値を返す関数は は配列形式で返される。 まず、A列から「東京」の行を抜き出して、D列D1から下方向に、「詰めて」!出すとする。 D1の式は =IFERROR(INDEX(A:A,SMALL(IF(A:A="東京",ROW(A:A)),ROW())),"") と入れて、SHIFT,CTRL、ENTERの3つのキーを同時押しする。これが配列数式の作成の操作。この式を、+ハンドルをD1セルで出して、下方向に第10行(データ最下行番号)まで引っ張る。 東京 東京 東京 東京 東京 #NUM! #NUM! #NUM! #NUM! #NUM! となる。 この,実データでの該当数(4行)越えの行の(複写した)式結果で、#NUM!エラーを出さないように、IFERROR関数を被せる。これはVLOOKUPなどでも多用される。 すると 東京 東京 東京 東京 東京 のようになる。エラー表示がセルより消える。 ーー 元データの条件(=東京)該当行のB列のデータを採るには =IFERROR(INDEX(A:B,SMALL(IF(A:A="東京",ROW(A:A)),ROW()),2),"") と式の一部のROW()),2の、2がB列を指し示している。 3キーを同時押しして(CSE方式と言われることあり)、配列数式にして、下方向に式を複写する。 結果 A列データも含めて、A,B列は、下記になる。 東京 山田 東京 今中 東京 今野 東京 田川 東京 上村 なお、上記操作のように、後で該当の第2行以下の式を複写しないで、初めに結果を出すE列でE1:E10までを範囲指定しておいて、配列数式を確定する方法もある。 この INDEXーSMALL関数の組み合わせの理屈が理解しずらい、思いつきにくいと思うが、 http://office-qa.com/Excel/ex256.htm データを詰めて別領域に取り出すSMALL関数 の説明が丁寧だと思う。 SMALL関数が使われるのは、「該当行データを上から詰めて!出したい」からだということです。 こういう過去の勉強が必要(なアイデア)のものなので、お勧めはしないが、他に関数では方法がない。 (1)該当が複数 (2)該当を行的に、上から詰めて出す このために苦労するわけです。出なければ、お馴染みVLOOKUPを使っておしまい、であろう。 VBAなら、上例で、東京の第3番目の出現行(結果を作るのはその列の第3行目)は何行目ーー>第4行の4 を返す関数を、数行のコードで作れる。しかしVBAはお呼びでない人には、上記の方法と変わらないだろう。 ー
その他の回答 (3)
- imogasi
- ベストアンサー率27% (4737/17069)
Excel2019なら、Filter関数があるのでは?と思ったが、 https://www.pc-koubou.jp/magazine/33300などで >Office2013・2019および以前のバージョンのOfficeでは・・使えないようだ。 ーー Excel関数での「抜出し」は、式が複雑になる。 総務課の判別と、該当のみで、順次上行詰め、を同時にしなければならない点がむつかしい。 しょっちゅう、このタイプの質問が出るが、自力で関数に拘ると、数日調べまくって、時間の無駄をするよ。 ーー 作業列を1列使ってよいなら、比較的簡単に出来る。 ーー 操作のFilterを用いて、結果の可視セルを他のシートの空きエリアに張り付けるで、我慢したら。
- msMike
- ベストアンサー率20% (364/1804)
- iyonohanamuko
- ベストアンサー率54% (6740/12373)
・フィルタで総務課のみデータを表示させ、コピーし、貼り付け ・統合機能を使用する ・ピポットテーブルを活用する このくらいでしょうか。 関数を用いて表作成はおすすめできません。