• ベストアンサー

エクセル 表のなかから条件に合うものを詰めて一覧にする

ある表のなかから条件に合うものリストを 詰めて一覧にするにはどういった関数などを つかってどういう風に組めばよいでしょうか? ・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 | もちろん、計算のための隠し列や隠しシートを儲けるなどは可。 エクセルの関数の駆使だけではムリなのでしょうか? どうかご教授くださいませ。

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

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

◆参考◆配列数式{}付の回答 =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を添付しておきます

参考URL:
http://pc.nikkeibp.co.jp/pc21/special/hr/index.shtml
全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (5)

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

>どうしてもわからない一点が、2つめのINDEXは INDEX(○,)と言う形式になっているので○の値そのものを指し、 >一見 要らないような気がするのですがなぜ必要なのでしょうか? SUMPRODUCT((Sheet1!$A$1:$A$20="あ")*(Sheet1!$B$1:$B$20="○")*(Sheet1!$D$1:$D$20<>"")) ◆上の部分は、対象の個数を計算しています、その個数を上回ると、"" にするようにしています ◆zenyasaiさんのEXCELが、2002?か2003以上であれば、その数式のセルを指定して、メニューバーの[ツール]-[ワークシート分析]-[数式の検証]をためしてください

zenyasai
質問者

補足

再度回答いただきありがとうございます。 >どうしてもわからない一点が、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  だけをカットすると、確かにエラーにはなってしまう。) と言った意味でした。 検証についても試してみます。 またよろしくお願いします。

全文を見る
すると、全ての回答が全文表示されます。
noname#204879
noname#204879
回答No.4

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 を下方にズズーッと複写

zenyasai
質問者

補足

回答ありがとうございます。 教えていただいた式の仕組みと意味を理解し 応用が利くように解析中です♪ 理解できたのち、あらためてお礼返信させていただきます♪ 追伸 何も考えずにとりあえず実行してみましたところ うまくいきませんでした。

全文を見る
すると、全ての回答が全文表示されます。
  • maron--5
  • ベストアンサー率36% (321/877)
回答No.3

◆説明が漏れていました ◆先程の式を、右と下にコピーです

全文を見る
すると、全ての回答が全文表示されます。
  • maron--5
  • ベストアンサー率36% (321/877)
回答No.2

◆別のシートならば 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)))&"") ★少し式が長いですが

zenyasai
質問者

お礼

おかげさまでなんとか式の意味・理屈が解りました。 どうしてもわからない一点が、 2つめのINDEXは INDEX(○,)と言う形式になっているので ○の値そのものを指し、一見 要らないような気がするのですが なぜ必要なのでしょうか? (とはいえ実際にその2つ目のINDEXを外すとエラーになる事実は  試しています。でもなぜだかわかりません。) これについては、「何について」を勉強すればよいのでしょうか? よろしければ引き続きご教授願います♪

zenyasai
質問者

補足

回答ありがとうございます。 教えていただいた式の仕組みと意味を理解し 応用が利くように解析中です♪ 理解できたのち、あらためてお礼返信させていただきます♪

全文を見る
すると、全ての回答が全文表示されます。
回答No.1

>エクセルの関数の駆使だけではムリなのでしょうか? 無理です。 関数とは何か分かっていませんね。 関数とは、関数を入力したセルの値を、与えられた引数で決めるものです。したがって、行の追加削除、列の追加削除など、他の行や列に対して作用させるものではありません。

zenyasai
質問者

お礼

早い回答ありがとうございます♪ 関数とは何か・・・ すみません、十分に理解しております。 ただ関数について全てを知るわけではないので 指定範囲内の指定列で条件に合ったもののうち n番目を抽出・・・ なんてことが出来る関数がないかな・・・ あるいは、関数をいくつか組み合わせて 計算エリアも設けて、結果的にそのようなことが できないかな・・ あるいはまた VLOOKUPやMATCH、CHOOSEなんていう結構なものも あるぐらいなのでそのようなものが あるかな・・・・ と思いまして。 やはりむりですか?

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • エクセルの条件付き書式の設定について

    いつもお世話になっております。 エクセル2007を使っていますが、エクセルの条件付き書式設定について伺います。 Sheet1 A列  B列 A    a B    b C    c Sheet2 A列  B列 B    c A    a D    b C    c のような2つのシートがあり。 Sheet2でSheet1と同じ項目になるのは2行目と4行目ですが、この2行目と4行目を条件付き書式で設定する方法はありますでしょうか? どうぞよろしくお願いいたします。

  • エクセル 別れたシートでの条件検索

    別れたシートでの検索で一致したものを探す関数について。 VLOOKUP関数だと列に対してだと思うのですが、行に対して検索したいです。うまく伝えられないので、例えば 【シート1】    A   B   C   1  555 2  666 3  777 4  222 【シート2】    A   B   C   D 1  777    555    222 2 3 上のようなシートがあり、 シート1のA列の番号がシート2の1の行に有ったら、 シート1のB列にOKと表示、無かったらNGと表示、 の様な関数ってありますか? どなたか解る方お願いします。

  • エクセルで二つの条件での合計値

    こんにちわ。 関数でいろいろやってみているのですが、どうしてもうまくいきません。 シート1に一覧表があります。A列にコード番号(約500番)、B列に名前、C列に種類わけ(10種類・リストにしています)、D列に数字が入っています。これが約5000行あります。 これをシート2に、コード番号(A列)及び種類(C列)が一致するものの数字(D列)の合計を出した、自動更新される集計表を作りたいのです。 しかも、C列の種類わけしているものの中から、2つずつペアリングしての数字(D列)の合計を出したいのです。 ピボットテーブルやオートフィルターでひとつずつ出していってもいいのですが、次々と追加で行が増えていくので、その都度集計表を更新していくのもタイヘンだと思い、自動的に更新されるといいなと思っています。 説明不足なことがありましたら、返答します。 相当困っています。 どなたか助けてください。 よろしくお願いします。

  • エクセルで表引き

    こんにちは  エクセルで「4月」シート、「5月」シートがあります。 「4月」シートのA,B,C列(A3からデータ)にデータが入っています。A列には数字(ランダムだが50行目までは重複なし、51行目から重複あり。添付画像ではソートしてありますが、実際はランダムです)、B列には文字(すべて重複なし)、C列にはローマ数字(I、II、III、IV)がランダムに入っています。 「5月」シートのA3セルに「4月」シートのA列のデータを引いてくる関数を教えてください。  つまり、「4月」シートのA列はA3からA50行目まで1から48の数字が重複せずに入力されていますが、51行目以降は、また、1から始まる数字が入力されています。今回、A列から引きたい行はA3からA50までです。また、「4月」シートのB列の文字列は今回の関数には関係しないかもしれません。  条件としては、例えば、「4月」シートのC列に「 I 」がある行のA列のデータ(数字)を引いてこられる関数を「5月」シートのA3からA20にフィルハンドルで入れたいです。データが入りきるように余裕を持たせています。「5月」シートのデータを参照する必要はなく、単純にC列に I がある行のA列のデータを引いてくるだけです。A21からA40にはC列に II がある行のA列のデータを引いてくる関数を入れたいです。以下同じ要領でA41から60にはC列に III があるもの、A61から80にはC列に IV があるものを引きたいです。 わかりにくい説明ですみません。 応用の効く初心者用の関数だと助かります。

  • エクセルVBAで2つの条件が一致すれば結果を転記

    エクセルVBAの書き方を教えてください。 以下3つのエクセルファイルがあります。 ・F依頼(使うSheet:ナンバリング ・F結果(使うSheet:OKリスト ・F回答(使うSheet: F結果の「OKリスト」シートのA列3行目に結果が入っています。     A列         B列     C列 3行目 OK(結果)    12345678    9012 F依頼の「ナンバリング」シートには、過去からの番号が書き続けられています。     A列      B列     C列     D列 2行目 日付    12345678    9012    OK(結果) OKリストのB&Cの12桁をナンバリングシートのB&Cから検索し 一致するものがあれば、ナンバリングシートのD列(結果)にOKリストのA列(結果)を 貼り付けたいです。

  • EXCEL 2003で条件に合った合計を求めたい

    ______A ____B____ C_____D 1___111___ 1 ___10___ 60 2___111___ 2 ___10 3___222___ 2 ___10 4___333___ 1 ___10 5___333___ 2 ___10 6___333___ 3 ___10 7___444___ 1 ___10 8___444___ 3 ___10 9___555___ 1 ___10 Excel 2003環境において、上記A1:C9を対象に関数で下記条件を元に数式をD1に入力して値を求めたいです。 条件: A列の同じ値のセルを一つのグループとし、かつその中で、B列で1から始まる連番となっているグループを対象にC列のセルを合計する。 上記のセル範囲で条件に合う行は1,2,4,5,6,9行目で答えは60になります。 SUMPRODUCT関数やIF関数を併用してみましたが、うまく作ることができませんでした。 なんとか作業列やVBAを用いずに一つの数式で済ませたいです。 よろしくお願いします。

  • エクセル 複数の条件に一致

    複数の条件に一致したセルの内容によって、別のセルに別の文字を自動で表示したいのですが可能でしょうか? 詳細はこのような形で、 【シート1】       A     B       C 1      0001     3/1    有 2      0002     3/1    無 3      0001     3/2    不明 【シート2】       A     B       C 1             3/1      3/2 2      0001       ○      △ 3      0002       ×     "空欄" ・シート2のB2からC3を自動で表示できるようにしたい。 ・シート1のA列とシート2のA列が一致、更にシート1のB列とシート2の1行が一致。 ・シート1のC列が「有」の場合「○」、「無」の場合「×」、「不明」の場合、「△」、「空欄」の場合、「"空欄"」と表示。 知りうる限りの関数を合わせてみましたが、できませんでした。 どなたかいい方法を教えて頂ければと思います。 環境はXPpro、エクセル2000です。 宜しくお願いします。

  • エクセル関数の自動表示について

    自動表示についてご質問いたします。 シート1 (3月入力時)       A列  B列  C列  D列  E列  F列  G列  H列 1行目  1月   2  10  11  12  30  31  33 2行目  2月   1   2   5   8   9  10  48 3行目  3月   3   5  10  11  30  31  32 4行目  4月   こういうシート1の表があったとします。 シート1で3月入力した時点で、シート2では以下の表があったとします。        A列  B列  C列  D列  E列  F列  G列   1行目    3   5  10  11  30  31  32 と、自動で表示され。 4月(シート1)に数値を入力すれば、シート2の数値が最新数値に自動で入れ替わる・・・と、いう関数を作りたいのですが、いい関数ありますでしょうか? この場合、シート1ではB列~H列の数字の個数は固定(今回は7個)であり、毎回ランダムで数字が入力されていきます。 これをシート2の1行目、A列~G列に最新数値を毎回反映させて、表示したいのです。 どなたか、ご存知の方よろしくお願いします^^;

  • 複数の条件に合う行の特定のセルを返す

    ほぼ同じ質問をいくつか見かけたのですが、その式を自分の内容に置き換えても全く希望通りの結果が出ず、質問させてください。 2 1 Aさん 4 1 Bさん 5 1 Cさん 2 2 Dさん 5 2 Eさん セルのA1には「2」、B1には「1」、C1には「Aさん」と入ったシートがあり、例えばセルのD1に A列、B列ともに「2」が入力されている4行目のC列「Dさん」という値が反映して欲しいのですが、その関数が分からなく困っています。 他にもA列が「5」、B列が「1」の結果が(Cさん)が欲しい時もあり、条件にはA列の値とB列の値を使う方法で考えています。 お知恵を貸してください。

  • 一つのセルに特定の文字が入ると隣のセルに条件に合った文字を入力したい

    列Aと列Bに特定の条件を入力します。 列Cに列Aに入力した行の文字を入力規則のリストで呼び出すと、列Dに列Aと同じ行に入っている列Bの文字を自動で入力するようにしたいのですが、どのようにしたらいいでしょうか? IF関数で条件分岐させようと思ったのですが列AもBも随時追加されていくのでこの方法が使えませんでした。

専門家に質問してみよう