• ベストアンサー

【エクセル】表から条件にあったデータを別のシートに抽出する関数

エクセルの表である条件にあてはまる行(複数の列を指定したい)を、 別シートに順番に抽出されるような関数を教えてください。 元の表を編集するので、自動的に反映されるように関数で作成したいと思っています。できれば、抽出後のソートやフィルタオプションは避けたいです。 シート1のコード(A列)が100番台のもの、200番台のもの、300番台のものの、それぞれ食品名(B列)と総量(D列)を、シート2~シート4に別表として抽出したいです。 食材の注文をするのに、業者別にしなければいけませんが、量が多くて毎回大変なんです。お助けください。 【シート1】 元データ    A     B        C       D 1 コード  食品名    一人分分量   総量 2 101    牛肉      30      150 3 201    じゃが芋    80      400 4 202    玉葱      40      200 5 203    人参      20      100 6 301    しょうゆ    6       30 7 302    砂糖      4       20 【シート2】 コード100番台   A     B   1 牛肉   150 【シート3】 コード200番台   A     B       1 じゃが芋 400 2 玉葱   200 3 人参   100 【シート4】 コード300番台   A     B  1 しょうゆ 30 2 砂糖   20 無謀な事をやろうとしているのかもしれませんが、どなたかアドバイスをください。 よろしくお願い致します。

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

  • ベストアンサー
  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.4

>恥ずかしながら、ピボットテーブルを初めて知りました。 とても面白くて便利ですね。すぐにできました。 関数とどちらが自分の仕事に合うのかやってみます。 ピボットテーブルはうまく使いこなすと非常に便利な機能です。 今回の回答では、簡潔に回答するため、操作上の細かい注意点やノウハウなどを書きませんでしたが、今回のケースでピボットテーブルを利用されるなら、たとえばグループ化したコードのフィールドをページフィールド(A1セルの部分)にドラッグすれば、その部分のドロップダウンリストから該当データだけを表示させることができます。 また、予備のデータ範囲を広くとるため、ピボットテーブルのA列に「0」のダミーデータを入れる方法を提示しましたが、名前定義を利用して範囲に名前をつけ、データ数に応じて自動的にピボットテーブルの範囲を広げる設定にするほうがお勧めです。 http://www.officetanaka.net/excel/function/function/offset.htm http://www.becoolusers.com/excel/pivottable-table.html

hakatanegi
質問者

お礼

URLまで載せていただきましてありがとうございます。 食材の注文だけでなく支払いや産地集計などの事務処理がありますので、そちらにも応用できそうです。 年度末に向けて使いこなせるようになろうと思います。

その他の回答 (4)

noname#204879
noname#204879
回答No.5

[回答番号:No.3この回答へのお礼]へのコメント、 申し訳ないことですが、ステップ1に載せた式を間違えていました。 ステップ3のそれと同じものをコピーしていました。 正しくは、 =IF(AND(Sheet1!A2>=C$1,Sheet1!A2<C$1+100),ROW(A2),"") でした。

hakatanegi
質問者

お礼

お返事ありがとうございます。 式を入力しなおしたらできました。

noname#204879
noname#204879
回答No.3

  A   B    C  D 1   コード   200 番台 2 3   食品名  総量 4   じゃが芋  400 5  3 玉葱    200 6  4 人参    100 7  5 8 9 10 Sheet2 において、 1.セル A4 に次式を入力して、此れを(セル A1004 まで)下方にズ   ズーッとドラッグ&ペースト   =IF(ISERROR(SMALL($A$4:$A$1004,ROW(A1))),"",OFFSET(Sheet1!$B$1,SMALL($A$4:$A$1004,ROW(A1))-1,(COLUMN(A1)-1)*2))   ちなみに、「セル A1004 まで」としたのは「元データ」のレコード数が 1000個以内と仮定したためで、「元データ」のレコード数が 100個以内なら「A1004」は「A104」とするのが得策です。 2.目障りを避けるために、A列全体を非表示に設定 以上の下準備ができたら、 3.セル B4 に次式を入力して、此れを右隣にドラッグ&ペースト   =IF(ISERROR(SMALL($A$4:$A$1004,ROW(A1))),"",OFFSET(Sheet1!$B$1,SMALL($A$4:$A$1004,ROW(A1))-1,(COLUMN(A1)-1)*2)) 4.範囲 B4:C4 を下方にズズーッとドラッグ&ペースト セル C1 を数値 100 あるいは 300 に変更してみてください。どうなりますか?

hakatanegi
質問者

お礼

回答ありがとうございます。 シート2のセルA4に式  =IF(ISERROR(SMALL($A$4:$A$1004,ROW(A1))),"",OFFSET(Sheet1!$B$1,SMALL($A$4:$A$1004,ROW(A1))-1,(COLUMN(A1)-1)*2)) をコピーしましたが、「数式が計算されません」と出て0になります。 かまわず次の工程に進んでも0のまんまです。 シート2のB1にコード、C1に200、D1に番台を入力しています。 式を入れる前に何かしなくてはいけないんでしょうか?

  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.2

複雑な数式は管理がしにくい面がありますので、ピボットテーブルとグループ化を利用する方法を提示します(エクセルのバージョンが書いていないので2003のケースで説明します)。 元データのシートの上にカーソルを置いて、「データ;」「ピボットテーブル・・・」でウィザードを起動し、「次へ」「次へ」で「完了」して、行フィールドに「コード」と「商品名」をデータフィールドに「総量」をドラッグします。 作成されたテーブルのコードの数字の上で右クリックし「グループ化」で表示されるダイアログで先頭の値に欄に「101」、末尾の値に「399」、単位を「100」にしてOKします。 集計行などが必要ないなら、右クリックから「表示しない」を選択してください。 データの追加や変更などに対応するには、たとえばA列のコードの列の空白セル(たとえば100行目まで)にすべて「0」と入力しておいて、ピボットテーブル上で右クリックし、ピボットテーブルウィザードで「戻る」でデータ範囲の行を100までに変更してください(必要のない表示項目は「表示しない」設定にします)。 データを更新した場合は、右クリックまたはピボットテーブルツールバーから「データの更新」を行います。

hakatanegi
質問者

お礼

分かりやすく回答していただきましてありがとうございます。 恥ずかしながら、ピボットテーブルを初めて知りました。 とても面白くて便利ですね。すぐにできました。 関数とどちらが自分の仕事に合うのかやってみます。

  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.1

Sheet1のA列が200番代のデータを数式で表示させるなら、以下のような関数を表示用のシートのA列に入力し、右方向に3つ、下方向に適当数オートフィルし、B列を選択して右クリックから「削除」してください。 =INDEX(Sheet1!B:B,SMALL(INDEX((INT(Sheet1!$A$2:$A$10/100)<>2)*1000+ROW($A$2:$A$10),),ROW(A1)))&"" 100番代は「<>2」の部分を「<>1」に変更します。

hakatanegi
質問者

お礼

できました! エクセルの本やネット上の投稿を見ても全然できなかったのに、あっという間に解決しました。関数の意味は理解できませんが・・・。 これで仕事の事務時間が大幅に短縮できます。 ありがとうございました。

関連するQ&A

  • Excelの質問です。2つの条件のどちらかを満たすデータを抽出し、別シートにデータを移したいです。

    こんばんは。以前の質問でも、データの抽出に関して教えていただいた者です。皆様の優しさに頼りっきりです。 今回は2つ以上の条件でデータを抽出したいと思ったのですが・・・なかなかスマートなやり方が浮かびませんでして(>_<) 今、手元には『名言.xls』というファイルがあります。 シートには名前をつけていません。(Sheet1,Sheet2・・・)といった感じになっています。 Sheet1のA列とB列には、以下のようなデータが入っています。 A列--------B列 sa-1--------若木に腰掛けな ar-1--------毎日少しずつ。それがなかなかできねんだなあ。(相田みつを) sp-1--------「がんばれ、がんばれ」という人がいるより、僕は、「できないでくれ」という人がいる方が熱くなる。(イチロー) sa-2--------骨肉相食む ar-2--------お前自身を知ろうとするならば、いかに他の人々が行動するかを観察せよ。お前が他の人々を理解しようとするならば、お前自身の心を見よ。(シラー『書き板』) ac1--------仕事は来た順。だってそれが誠意でしょ。(哀川翔) というように、A列には番号、B列には名言のデータが、ズラリと入っています。 sa-(=ことわざ)、ar-(=芸術家・思想家)、sp-(=スポーツ選手)、ac(=俳優)といった感じです。 この一覧のデータの中から、A列が「sa-*(ワイルドカード)」あるいは「ar-*」という、2つの条件のどちらかを満たした場合、そのセルの隣にあるB列のデータを抽出し、Sheet2のA列に、抽出したデータを並べたいのです。 皆様の英知をお借しください(>_<) よろしくお願いします<m(__)m>

  • Excelの関数を使ってデータを抽出する方法教えてください!!

    1のシートには、AとBの全てのデータがあります。2のシートには、1部だけのデータがあります。 データは、「コード」、「店名」、「住所」などが入力されています。 Aのシートから、Bのシートのデータを省いて抽出したいのですが、どうしたらいいでしょうか?? なお、それぞれに入っている「住所」や「店名」、「コード」などのデータは完全一致していないものもあります。 また、Aのシートの「コード」などの各データは、全て同じ列に入っていません。 これでは、無理でしょうか??

  • 二つの検索値から別のシートに抽出する

    WinXP,Excel2000 下記のような表から例えば氏名コード(A列)103番と 日付(B列)2006/5/3からE列のデータ3.50を導きたい のですが、この場合検索値がA列・B列と2つあるので 同じシートに答えを出す場合は F3=SUMPRODUCT((A1:A9=F1)*(B1:B9=F2)*E1:E9)で できるのですが、別のシートに抽出するにはどうしたら よいでしょうか。ご教授ください。<m(__)m> A列 B列 C列 D列 E列    F列 1 100 2006/5/3 東京 8:10 8.00   103 2 101 2006/5/3 名古屋 9:10 7.25  2006/5/3 3 102 2006/5/3 大阪 7:45 5.00   3.50 4 103 2006/5/3 京都 10:30 3.50 5 104 2006/5/3 札幌 8:40 4.75 6 100 2006/5/4 福岡 8:45 5.00 7 101 2006/5/4 東京 9:05 6.25 8 103 2006/5/4 大阪 8:15 1.50 9 105 2006/5/4 横浜 10:15 3.00

  • エクセル 別シートから一覧を抽出したい

    部品一覧表を作成しているのですが、2シートあり 1入力シート・2部品コードシートとあります。 部品コードシートにはB列に部品番号・C列部品名・D列部品番号・E列部品名と2行ずつ使い番号・品名がB~Wまで47行分入力されています。 B1:C47、D1:E47…と2列47行にはそれぞれ【A】、【B】、…とセルの名前の定義をつけました。現在【H】までありますが、今後増える可能性があります。 入力シートに、セルの名前を指定したときに部品コードのシートから 一覧を抽出したいのですが、どの関数を使えばよいのかわかりません。 入力シート                 |部品コードシート G   H                  | A Bコード C部品名  Dコード E部品名 4式入力用にあけています。     |1 1800  ユニットA   1501 電源A 5コード 部品名             |2 1801  ユニットB   1502 電源B 6                       |3 G4に関数を入れてG6~G52まで部品コードのシートA1~A47を一気に表示 させたいのです。部品コードシートの行数が変わることはありません。 マクロを使わないと、関数では難しいでしょうか?

  • VBAを使った、Excelでのシート間データ抽出

    はじめまして。みなさまどうか教えてください。 Sheet1にはA列に250行程、コードが存在します。 Sheet2にはA列(コード)からI列まで、そして1000行程データが存在します。 Sheet1にあるコードは重複はなく、Sheet2のコード内に必ず同じコードがあります。 Sheet2にも重複コードはありません。 そこでSheet1のコードを使い、Sheet2を検索し、同一コードのデータ(A列からI列の行すべて)を全て(250件分)、Sheet1のコード記載順(A1、A2、A3・・・・)で、Sheet3に抽出したいのです。 どうか、よろしくお願いします。

  • (エクセル)一覧表の縦・横を並び替えたいです。

    一覧表の縦・横を並び替えたいです。 例えば表(1)を表(2)のように加工できませんでしょうか? 【料理名・材料一覧】 表(1)  A     B   C     D       1 肉じゃが 牛肉  たまねぎ にんじん    2 オムライス   卵   たまねぎ ケチャップ  3 カレーライス  ルー   たまねぎ じゃがいも 表(2)   A     B 1 肉じゃが 牛肉 2 肉じゃが たまねぎ  3 肉じゃが にんじん 4 オムライス  卵 5 オムライス  たまねぎ ・ ・ ・ どうぞ宜しくお願いいたします。

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

    エクセルの表である条件にあてはまる行を 別シートに順番に抽出されるような関数を教えてください。 シート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の構成上、抽出後のソートや、フィルタオプションは避けたいです。 わかりづらい文章で申し訳ございませんが どなたかいいアドバイスがありましたら教えてください。 お礼は明日になってしまいますが、必ずご返答いたします。 よろしくお願いいたします。  

  • エクセルマクロでシートを作成し、データを移行

    こんばんは、ややこしいのですが、エクセルマクロで1つのシートから別シートを作成し、データをコピーさせたいです。 カレーというシートに    A B 1<山田>     2ニンジン 5個 3ジャガイモ   2個 4<吉田> 5タマネギ 3個 6米       2合 という記入がある場合 カレー山田というシートを作成し、A1~A5セルにニンジン、A6~A7セルにジャガイモ(個数分セルを繰り返す)とコピーさせたいです。 同じくカレー吉田というシートを作成し、A1~A3セルにタマネギ、A4~A5セルに米と入れさせたいです。 こういったことが自動でできませんでしょうか? よろしくお願い致します。

  • エクセル関数 複数の条件でのデータ抽出

    エクセルの初心者です。 関数で複数の条件からデータを抽出する方法をおしえてください。 [Sheet1] date type Qty. 7/1 b-1 100 7/1 a-2 200 7/3 b-1 500 上のようにデータが並んでいます。 その中で条件にかなうQty.を下のシートに抽出したいのです。 行にはtypeが、列にはdateが並んでいます。 [Sheet2] 7/1 7/2 7/3 a-1 0 0 0 a-2 200 0 0 b-1 100 0 500 SUMPRODUCT, DGETなどいろいろ試したのですが、うまくいきません。 (条件が、列と行になっているからでしょうか) これは、同じtypeが異なるdateに出てくる場合があります。 また、dateの順番がばらばらの場合は抽出は不可能ですか。 ご多忙の中申し訳ございませんがよろしくお願いします。

  • エクセルで別シート同士の照合結果を抽出

    シート1(担当者アの案件): A列に会社名 B列に担当者名 シート2(担当者イの案件): A列に会社名 B列に担当者名 シート3(担当者未定の案件): A列に会社名 B列に担当者名 シート4 シート1とシート3を照合して、シート1に存在する場合、シート4に抽出 シート2とシート3を照合して、シート1に存在する場合、シート4に抽出 としたいのです。やり方を教えていただけますでしょうか。 ちなみに結果の抽出はシート4でなくてもどこでもいいのです。 お手数ですがよろしくお願いいたします。

専門家に質問してみよう