質問
エクセル 表のなかから条件に合うものを詰めて一覧にする
- 投稿日時:2007/03/04 19:21

ある表のなかから条件に合うものリストを
詰めて一覧にするにはどういった関数などを
つかってどういう風に組めばよいでしょうか?
・VB等プログラム使用不可
・手動でのソートや抽出はしない
・「詰めて」が最も大きなポイント
例
シート1
| A B C D
---------------------------------
01 | あ ○ 58
02 | あ × u 4
03 | あ ☆ o 2
04 | × 87
05 | う j 7
06 | あ ○ k
07 | い n 9
08 | い × d 223
09 | あ ○ yua 0
10 | 66
11 | い ☆ j
12 | う × o 2
13 | う t 2
14 | あ ○ ykd 651
15 | い ☆ h 6
16 |
17 |
18 |
19 |
20 |
上記の中から
A列が「あ」かつ
B列が「○」かつ
D列が空白でないものを
詰めて別シートで下記のような
リストに自動的にしたい。
自動的・・・
・シート1の16以降の行に追加しても
自動的にシート2に詰めて反映される。
・シート1いずれかの行を削除しても
条件にあったリストがシート2に
反映される。
シート2 (完成)
| A B C D
---------------------------------
01 | あ ○ 58
02 | あ ○ yua 0
03 | あ ○ ykd 651
04 |
05 |
06 |
07 |
08 |
09 |
10 |
11 |
12 |
13 |
14 |
15 |
もちろん、計算のための隠し列や隠しシートを儲けるなどは可。
エクセルの関数の駆使だけではムリなのでしょうか?
どうかご教授くださいませ。
回答 (6件)
- 最新から表示
- 回答順に表示
- ベストアンサーのみ表示
No.6ベストアンサー20pt
- 回答日時:2007/03/08 05:43
◆参考◆配列数式{}付の回答
=IF(ROW(A1)>SUMPRODUCT((Sheet1!$A$1:$A$20="あ")*(Sheet1!$B$1:$B$20="○")*(Sheet1!$D$1:$D$20<>"")),"",INDEX(Sheet1!A$1:A$20,SMALL(IF((Sheet1!$A$1:$A$20="あ")*(Sheet1!$B$1:$B$20="○")*(Sheet1!$D$1:$D$20<>""),ROW(Sheet1!$A$1:$A$20),""),ROW(A1)))&"")
★この式は「配列数式」です。式を入力後、Ctrl+Shift+Enter をおして、式を確定させてください。
★確定すると、式の両端に{ }がつきます。
◆前回の回答は、Ctrl+Shift+Enter で式を確定させるのを、Enter だけで式を確定させるために変形した式です
★それが、INDEX であり、SUBSTITUTE です
◆なお、式の最後の )&"" は、データが無いときに、「0」表示されることを回避するためです
◆本来は、結果が文字列の場合は良いのですが、数値の場合は文字列になるので、この結果から再度計算するようなケースではおすすめではありません
◆配列数式の解説されたURLを添付しておきます
- 質問者のみ
- この回答にお礼をつける
No.5
- 回答日時:2007/03/07 06:55
>どうしてもわからない一点が、2つめのINDEXは INDEX(○,)と言う形式になっているので○の値そのものを指し、
>一見 要らないような気がするのですがなぜ必要なのでしょうか?
SUMPRODUCT((Sheet1!$A$1:$A$20="あ")*(Sheet1!$B$1:$B$20="○")*(Sheet1!$D$1:$D$20<>""))
◆上の部分は、対象の個数を計算しています、その個数を上回ると、"" にするようにしています
◆zenyasaiさんのEXCELが、2002?か2003以上であれば、その数式のセルを指定して、メニューバーの[ツール]-[ワークシート分析]-[数式の検証]をためしてください
この回答への補足
再度回答いただきありがとうございます。
>どうしてもわからない一点が、2つめのINDEXは INDEX(○,)と言う形式になっているので○の値そのものを指し、
>一見 要らないような気がするのですがなぜ必要なのでしょうか?
ですが、少し、私の質問のしかたがまずかったようです。
INDEX文は2回出現していますが、2つ目(内側の)の方は
INDEX(SUBSTITUTE((Sheet1!$A$1:$A$20="あ")*(Sheet1!$B$1:$B$20="○")*(Sheet1!$D$1:$D$20<>""),0,10^5)*ROW(Sheet1!$A$1:$A$20),)
であり
つまり
INDEX(SUBSTITUTE(yyy)*row(zzz)、) の形式で
さらにつまり
INDEX(xxx、)の形式なので
この値はXXXそのものの値であり
INDEX(SUBSTITUTE(yyy)*row(zzz)、) = SUBSTITUTE(yyy)*row(zzz)
のような気がする・・・
(実際この式だけを行きだし別セルで入れると同じ値になる。
しかし、当初のIFから始まる全文でこの2つめのINDEX
だけをカットすると、確かにエラーにはなってしまう。)
と言った意味でした。
検証についても試してみます。
またよろしくお願いします。
- 質問者のみ
- この回答にお礼をつける
No.4ベストアンサー10pt
- 回答日時:2007/03/04 23:39
Sheet2 において、
1.セル A1 に次の配列数式を入力
{=INDEX(Sheet1!A$1:A$20,SMALL(IF((Sheet1!$A$1:$A$20="あ")*(Sheet1!$B$1:$B$20="○")*(Sheet1!$D$1:$D$20<>""),ROW($1:$20),""),ROW()),1)}
2.セル A1 を選択して、次の[条件付き書式]を設定
数式が =ISERROR(A1)
フォント色 白
3.セル A1 を範囲 B1:D1 に複写
4.セル C1 を選択して F2キーを一発叩く
5.末尾に「&""」を追加入力した後、Ctrlキーおよび Shiftキーを抑えたまま
Enterキーを「エイヤッ!」と叩き付けて、結果的に次の配列数式を入力
C1: {=INDEX(Sheet1!C$1:C$20,SMALL(IF((Sheet1!$A$1:$A$20="あ")*(Sheet1!$B$1:$B$20="○")*(Sheet1!$D$1:$D$20<>""),ROW($1:$20),""),ROW()),1)&""}
4.範囲 A1:D1 を下方にズズーッと複写
この回答への補足
回答ありがとうございます。
教えていただいた式の仕組みと意味を理解し
応用が利くように解析中です♪
理解できたのち、あらためてお礼返信させていただきます♪
追伸
何も考えずにとりあえず実行してみましたところ
うまくいきませんでした。
- 質問者のみ
- この回答にお礼をつける
No.2
- 回答日時:2007/03/04 19:55
◆別のシートならば
Sheet2のA1の式
A1=IF(ROW(A1)>SUMPRODUCT((Sheet1!$A$1:$A$20="あ")*(Sheet1!$B$1:$B$20="○")*(Sheet1!$D$1:$D$20<>"")),"",INDEX(Sheet1!A$1:A$20,SMALL(INDEX(SUBSTITUTE((Sheet1!$A$1:$A$20="あ")*(Sheet1!$B$1:$B$20="○")*(Sheet1!$D$1:$D$20<>""),0,10^5)*ROW(Sheet1!$A$1:$A$20),),ROW(A1)))&"")
★少し式が長いですが
この回答へのお礼
おかげさまでなんとか式の意味・理屈が解りました。
どうしてもわからない一点が、
2つめのINDEXは INDEX(○,)と言う形式になっているので
○の値そのものを指し、一見 要らないような気がするのですが
なぜ必要なのでしょうか?
(とはいえ実際にその2つ目のINDEXを外すとエラーになる事実は
試しています。でもなぜだかわかりません。)
これについては、「何について」を勉強すればよいのでしょうか?
よろしければ引き続きご教授願います♪
この回答への補足
回答ありがとうございます。
教えていただいた式の仕組みと意味を理解し
応用が利くように解析中です♪
理解できたのち、あらためてお礼返信させていただきます♪
No.1
- 回答日時:2007/03/04 19:33
>エクセルの関数の駆使だけではムリなのでしょうか?
無理です。
関数とは何か分かっていませんね。
関数とは、関数を入力したセルの値を、与えられた引数で決めるものです。したがって、行の追加削除、列の追加削除など、他の行や列に対して作用させるものではありません。
この回答へのお礼
早い回答ありがとうございます♪
関数とは何か・・・
すみません、十分に理解しております。
ただ関数について全てを知るわけではないので
指定範囲内の指定列で条件に合ったもののうち
n番目を抽出・・・
なんてことが出来る関数がないかな・・・
あるいは、関数をいくつか組み合わせて
計算エリアも設けて、結果的にそのようなことが
できないかな・・
あるいはまた
VLOOKUPやMATCH、CHOOSEなんていう結構なものも
あるぐらいなのでそのようなものが
あるかな・・・・
と思いまして。
やはりむりですか?
このQ&Aを見た人はこんなQ&Aも見ています
- エクセルで条件に合うものを別シートに抽出(関数)
- 希望日 りんご ばなな みかん 担当 配達チェック 6月1日 2 ・・・
- エクセルで、条件に一致した行を別のセルに抜き出す方法
- エクセルで、指定した条件に一致するセルを含む行をすべて抜き出す方法が知りたいです。 たとえば、 <A列・・・
- 【エクセル】表から条件に合ったデータを別シートに順番に抽出したい
- エクセルの表である条件にあてはまる行を 別シートに順番に抽出されるような関数を教えてください。 シート1のB・・・
- 4エクセルで複数の条件を抽出し自動的に別シートに反映する方法を教えてください。
- こんばんは。教えてください。 元データ(sheet1)を更新するたび 2つの条件にあったデータを 別シートに自・・・
- 5エクセルの複数条件に一致したセルを抽出したいのですが、関数で教えてくだ
- エクセルの複数条件に一致したセルを抽出したいのですが、関数で教えてください。 A列 ・・・
- 6エクセル 複数条件での検索を関数を使って解決したいです。
- 7Excelで、複数条件で抽出した複数データを別シートに出力したい
- 8MS-Excel:二つ以上の条件で入力規則のリストを変更したい
- 9エクセルで別シートに条件の合う全てのデータ抽出
- 10EXCEL関数 空白セルを詰める関数
- 11VLOOKUP関数で複数の検索値を設定したいのですが
- 12EXCELで空白行を詰めるには
- 13【エクセル】表から条件にあったデータを別のシートに抽出する関数
- 14エクセル-条件に合うデータだけを別シートへ
- 15エクセルで重複しているデータの抽出のしかたを教えてください。
- 16EXCELの日付データを文字列に変換したい
- 17Excel 指定の文字列を含むとカウントするようにしたい場合は?
- 18エクセルで複数の条件範囲に合う行を別シートに抽出
- 19Excel 複数のデータを別シートに上から詰めて表示させたい
- 20excelで条件に一致するデータ全てを抽出する方法
注目の記事
教えて!Firefox
より速く、より安全なウェブブラウザ「Firefox(ファイアーフォックス)」に関する疑問をみんなで解決。全くの初心者から上級者までFirefoxの魅力を十分に味わうために、教えて!gooのユーザーみんながお手伝いします。
このQ&Aを見た人がよく見るQ&A
このカテゴリで人気のQ&Aランキング
- 4エクセル STDEVとSTDEVPの違い
- 5Excel文書が読み取り専用になって解...
- 6エクセルのセルに入力した文字数
- 7excelからexcelへの差し込み印刷
- 8VLOOKUP関数で複数の検索値を設定し...
- 9エクセルに写真の貼り付けが出来ま...
- 10EXCELの日付データを文字列に変換し...
- 11エクセルで列の全ての項目に文字を...
- 12エクセルで条件に合うものを別シー...
- 13Excelで、エラーの #DIV/0! を表示...
- 14エクセルにおいて、シートの保護を...
- 15行間を詰めるには・・・
- 16エクセルで、条件に一致した行を別...
- 17エクセルで図形やオートシェイプの...
- 18ワードのチェックボックス
- 19エクセル 0や空白のセルをグラフに...
- 20Excelで入力したデータを他のシート...






