• ベストアンサー

EXCEL関数でフィルタの様にデータ抽出したい

発注品一覧表から社別にデータを抽出した発注シートを関数で作りたいです。 オートフィルタは諸事情あって使用しません。 過去の質問のこちらが、かなり近い回答なのだと思いますが 不勉強で自分用に修正ができませんでした。 http://okwave.jp/qa/q3157199.html 一覧表はこのようになっています。 日付 社名 品目 値段 4/1  C社 鉛筆 50円  4/1  A社 定規 150円 4/2  C社 ペン 100円 4/2  B社 鉛筆 100円 社別の別シートに日付・品目・値段を一覧から関数で抽出できるでしょうか? どうぞよろしくお願いします。

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

  • ベストアンサー
  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.2

拝見いたしましたが参考にされたサイトですが データが社名順に並んでいますよね。 今回の質問ですが、データが順に並んでいませんので全く違った発想が必要になります。 簡単な方法では、作業列を一列入れる方法がわかりやすいです。 データのシートに作業列も作れないのであれば 配列関数を使うことになりますが データの量が多くてその式を縦横にコピーして使うですからパソコンの負担も重くなります。 式の意味を理解が難しいかと思いますが INDEX関数で 範囲の指定の部分を条件で抽出した内容が入るように工夫した式がよく見受けられます ので一応紹介しておきます 仮に シート名 データ 日付 社名 品目 値段 4/1  C社 鉛筆 50円  4/1  A社 定規 150円 4/2  C社 ペン 100円 4/2  B社 鉛筆 100円 別のシート    社名 品目    C社 日付 社名 品目 値段 とB2セルに抽出したい社名が入っているとして A4セルに =INDEX(データ!A:A,SMALL(INDEX((データ!$B$1:$B$100<>$B$2)*1000+ROW(A$1:A$100),),ROW(A1)))&"" と入れて 右へコピー、下へコピーしてみてください。 INDEX((データ!$B$1:$B$100<>$B$2)*1000+ROW(A$1:A$100),) の部分が理解しにくいと思います。 社名の範囲でC社でなかったら1000倍したとてつもない大きな数字を加える C社でればそのまま、その行番号 といった架空の列を作成します。 その架空の列の小さい数値の順に 最初のINDEX関数で取り出します といった感じです。(なかなか文書で説明するのも難しくてすみません) 別案ですが フィルターオプションの設定(オートフィルターではありません) をしたほうがシンプルでデータ量が増えた時も勝手に対応してくれます。

rock-on-
質問者

お礼

丁寧な説明と回答ありがとうございます。 参考サイトの質問と今回の質問との相違は社順など関係していたんですね…。 目的のための関数の組み合わせがわからなくて式の意味がまだ理解できていないんです…。 まったくわからなかった式も、今回説明いただいた内容でなんとなくですが理解できました! また、「フィルターオプションの設定」も良いですね!(いつもオートフィルタしか使わなかったので知りませんでした…) 一緒にデータを使う知り合いもあまりエクセルに詳しくないので、相談してどちらが使いやすいか相談の上進めていくことにします。 本当にありがとうございました。

その他の回答 (4)

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.5

ご回答者様には失礼とは思いますが関数はマニアックなもので、非常に難解です。 前回のご回答で解釈できない事ですので次の方法は如何でしょうか。 (1)発注シートのA1に社名と入力、A2に社名を入力 (2)データ→フィルタ→フィルタオプションの設定 (3)「指定した範囲」を選択、リスト範囲欄うぃお右クリック→対象シートクリック→対象列範囲を選択、検索条件範囲欄をクリック→A1:A2を選択→抽出範囲欄を選択、表示開始セルを選択→OK (4)操作を簡略したい場合、マクロ記録→(2)(3)操作→マクロ記録終了すればショートカット等のワンタッチ操作で可能です。

参考URL:
http://www.eurus.dti.ne.jp/~yoneyama/Excel/filter3.htm
rock-on-
質問者

お礼

丁寧なご回答ありがとうございます。 いえいえ、本当に仰るとおり、関数は簡単なものが使えるからといって目的どおりに使うには理解と発想が大きく必要になるんだと今回つくづく感じました。 ほかのご回答にもありましたが、今回ご回答いただいた「フィルタオプションの設定」はとてもいい方法ですね! マクロの記録の仕方までありがとうございます。マクロを使うとより作業が楽になりますね!! 一緒にデータを使う相手も初心者なので、関数にこだわらずフィルタオプションの設定を勧めてみようと思います。 本当にありがとうございました。

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.4

 今仮に、元データの表の中で、「日付」と入力されているセルが、Sheet1のA1セルであり、 別シートのB2セルに、社名を入力するものとします。  まず、別シートの A1セルに  社名 A3セルに  日付 B3セルに  品目 C3セルに  値段 と入力して下さい。  次に、別シートのA4セルに次の数式を入力して下さい。 =IF(OR(COUNTIF(Sheet1!$1:$1,A$3)=0,ROWS($4:4)>COUNTIF(Sheet1!$B:$B,$B$2)),"",INDEX(OFFSET(Sheet1!$A:$A,,MATCH(A$3,Sheet1!$1:$1,0)-1),SUMPRODUCT(ROW(Sheet1!$B$1:INDEX(Sheet1!$B:$B,MATCH(9^9,Sheet1!$A:$A)))*(Sheet1!$B$1:INDEX(Sheet1!$B:$B,MATCH(9^9,Sheet1!$A:$A))=$B$2)*(COUNTIF(Sheet1!$B$1:INDEX(Sheet1!$B:$B,ROW(Sheet1!$B$1:INDEX(Sheet1!$B:$B,MATCH(9^9,Sheet1!$A:$A)))),$B$2)=ROWS($4:4)))))  次に、別シートのA4セルをコピーして、別シートのB4セルとC4セルに貼り付けて下さい。  次に、別シートのA4セルの書式設定を[日付]として下さい。  次に、別シートのA4~C4の範囲をコピーして、同じ列の5行目以下に貼り付けて下さい。  後は、別シートのB2セルに C社 等の社名を入力すれば、抽出結果が自動的に表示されます。

rock-on-
質問者

お礼

簡潔でわかりやすいご回答ありがとうございます。 ご説明いただいたとおり別シートに入力していったところ、すぐに目的の結果が出ました! あとは教えていただいた数式が理解できるように、これから勉強していきます。 本当にありがとうございました。

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.3

シート1にお示しのデータがあるとしてら作業列を作って対応するのが式も単純で分かり易く計算にも負担がかかりません。 E2セルには次の式を入力して下方にオートフィルドラッグします。 =IF(A2="","",B2&COUNTIF(B$2:B2,B2)) そこで別のシート例えばC社についてのデータを表示したい場合には別のシートのA1セルにはC社と入力します。 2行目には項目を表示させるとしてA2セルには日付、B2セルには品名、C2セルには値段と入力します。 A3セルには次の式を入力してC3セルまでオートフィルドラッグしたのちに下方にもオートフィルドラッグします。 =IF(COUNTIF(Sheet1!$E:$E,$A$1&ROW(A1))=0,"",INDEX(Sheet1!$A:$D,MATCH($A$1&ROW(A1),Sheet1!$E:$E,0),IF(COLUMN(A1)=1,1,IF(COLUMN(A1)=2,3,4)))) その後にA列のセルの表示形式を日付にします。 これでA1セルに入力した社名のデータのみが表示されることになります。他社の場合でも入力の式は同じで、A1セルの社名を変えることで良いでしょう。

rock-on-
質問者

お礼

簡潔でわかりやすい回答ありがとうございました。 シート1で作業列を作って、ご回答の数式を当てはめたところすぐに思い通りの結果が反映されました。 データを共有する相手からの注文通りの結果にできましたので、これで相手も満足すると思います。 本当にありがとうございました。

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.1

質問に載っている、質問に回答している者です。 imogasi方式でやってみます。 データ Sheet1のA1:D5に 日付 社名 品目 値段 C社 <-F列です=作業列 4月1日 C社 鉛筆 50円 1 4月1日 A社 定規 150円 4月2日 C社 ペン 100円 2 4月2日 B社 鉛筆 100円 F1に選択する社名を要れます。 F2の式は =IF(B2=$F$1,MAX($F$1:F1)+1,"") 下方向に式を複写します。 F列には上行からC者の行の連番が入ります。 Sheet2に行って、?1には =Sheet1!F1 A2セルには =INDEX(Sheet1!$A$1:D10,MATCH(ROW()-1,Sheet1!$F$1:$F10,0),COLUMN()) 右方向にD列まで式を複写。 その後A2:D2の式を下方向に式を複写。 D10やF10の10は実情に合わせて増やしてください 結果 Sheet2 C社 2011/4/1 C社 鉛筆 50円 2011/4/2 C社 ペン 100円 A列は表示形式を日付に設定すること。 本件で3件目以降に式を複写すると#N/Aが出ますが、 =IF(ROW()-1>MAX(Sheet1!$F$1:$F$10),"",INDEX(Sheet1!$A$1:D10,MATCH(ROW()-1,Sheet1!$F$1:$F10,0),COLUMN())) とすると見えなくなります。 ーー これはShhet1で作業列F列を使ってます(欠点) ーー Googleで「imogasi方式」で照会すれば、沢山の関数での抜き出し問題が出てきます。 その中に一発の式で、該当のC社の1項目セルが出る式が載ってます。この式が理解できれば良いですが、そうでなければ上記方法が難易度で次になると思う。 == いつも言っているが、関数は抜き出し問題は苦手(不適)だと思う。エクセル(関数)はもともと計算用です。 操作のフィルタなどで考えることをすすめます(特に初心者には)。 ーー 週に3度程度は抜き出し問題がこのコーナーに出て、うんざりしてますが。 上記imogasi方式で出る質問の数個を読めば、解法のタイプは出つくしていると思う。

rock-on-
質問者

お礼

丁寧なご回答ありがとうございます。 自分なりに検索をかけてみたのですが、まだまだ甘かったようですね。 フィルタを使うなど未熟なりにできる範囲でやっていけるよう考えます。 教えていただいたこと、きちんと理解できるように勉強します。 ありがとうございました。

関連するQ&A

  • Excel関数でデータを抽出する方法

    Excel初心者教室での課題で、以下のような問題を出されました。 次の表から、データが全てあるものだけを抽出し、sheet1からsheet2に移しなさい。 〈名前〉〈 E社〉〈 F社〉〈 G社〉 〈 A 〉〈 1 〉 〈 2 〉 〈 3 〉 〈 B 〉 〈 2 〉 〈 2 〉 〈 C 〉〈 3 〉〈 1 〉〈 5 〉 〈 D 〉 〈 1 〉 上の表からAとC(3社共にデータがある)ものだけを抽出したいのですが、回答条件が ●データ抽出にはオートフィルター機能は使用せず、関数で処理すること ●今まで習った知識で回答可能 とあり、まだ初心者クラスで、データ抽出に関係がありそうな関数はIF関数やVLOOKUPくらいしか思い当たらず、それらを使って抽出を試みたのですが「三社共にデータがあるものだけ抽出」という条件が処理出来ず、上手く出来ませんでした。 手詰まりで先に進めずに今、困っています。 そこで、Excelに詳しい方にアドバイス頂けたらと思い、書き込みしました。 宜しくお願いします。 文章力が低いので分かり辛い文面で、表も見辛くてすみません。

  • Excelでデータ抽出処理をオートフィルタではなく関数でできませんか?

    Excelで、発注書を作成しようとしています。 1、Sheet1には<発注先><品名><数量>のデータになっており、   同じ発注先のデータも含んでいます。   <発注先> <品名> <数量>    A社   みかん   10    A社   もも     5    B社   ぶどう    3    C社   みかん    5    C社   バナナ    5 2、このSheet1のデータを各発注先ごとに発注書を作成するため   別シートに用意した発注書フォーマットに貼り付けたい。   (注:発注先は60社ほどあり、オートフィルタで発注先ごと      にコピペしていくのは、困難です)  できれば関数でできればいいのですが、何かよい方法はないでしょうか?よろしくお願いします。    

  • 【EXCEL関数】違うシートに抽出結果を出したい

    一覧表から「○」の条件が付いたデータのみを別シートに関数で抽出したいです。 フィルタではなく関数を使用したいのは、抽出したデータから名前の定義を使用して リスト表示をさせたいためです。ご教示のほど、宜しくお願いします。 シート1は一覧表となっており、A列に「○」のついたデータのみをシート2に表示 シート1(一覧表)   A  B 1  ○  山田太郎 2  ×  佐藤次郎 3  ○  高橋三郎 4  ×  鈴木四郎 5  ×  中村五郎 シート2(抽出結果を表示させる)   A  B 1  ○  山田太郎 2  ○  高橋三郎 3  4  5 フィルタオプション、当方の考え得る限りの配列関数等、色々試しましたが、 不勉強のために上手く結果が表示されませんでした。 ご教示のほど、宜しくお願い致します。

  • エクセル 条件抽出の関数について

    エクセルで予約状況の一覧を作っているのですが、 シートA(担当者A) シートB(担当者B) シートC(担当者C) とそれぞれ入力シートを分けています。 その各シート内に例えば、   A(日付) B(時間) C(内容) 1 7/18    16:00    2 7/19    15:00  3 7/18    11:00 4 7/20    12:30 という様な予約日と予約時間と内容を入力しています。 ※予約発生毎に入力していくので日付はランダムになります。 その各シートから一覧表として    10:00 10:30 11:00 11:30 ~~~~~~~~~ 7/1   1   2    1 7/2   2   3 ~ ~ というような、7/1の10:00に何件の予約があるかという事を一覧表シートへ抽出したいと思うのですが、上手く関数が作れません。。 過去質問もイマイチ、条件の組み合わせがわからず、どなたかお知恵を お貸しください!! 意味が分からない場合は、申し訳ありません。

  • 文字列を抽出して足し算するには?

    質問させていただきます。 下記のような表があったとします。   A        B      C      D 1 えんぴつ   100円    ノート   100円 2 消しゴム   200円    定規    200円 3 定規     150円    消しゴム  400円 4 ノート    300円    えんぴつ  150円 AとCには品名、BとDには値段が入力してあります。 そこで、別シートのセルに えんぴつ合計 250円 消しゴム合計 600円 定規合計   350円 ノート合計  400円 のようにそれぞれの品物の合計金額を出せませんでしょうか? *品名は同じでも値段が違います。 品名ごとに列を決めて入力すれば簡単なのでしょうが・・・ よろしくお願い致します。

  • EXCEL:ゼロ以外のデータを詰めて抽出する方法

    初めて投稿します。よろしくお願いいたします。 EXCEL2000を使用しています。 オートフィルタを使わずに 関数でデータを抽出する方法で悩んでいます。 下記<データ>が存在しています。 2行目がゼロ以外のものを、 別シート<抽出>に上から詰めて抽出したいのです。 <データ>   A列 B列 C列 D列 E列 1行 1  2  3  4  5  ←日付 2行 5  3  0  2  0  ←数字 <抽出>別シート   A列 B列  1行 1  5 2行 2  3 3行 4  2   ↑  ↑   日付 ゼロ以外 関数については中級レベルだと思います。 いろいろ試したのですが、関数を組み合わせてもなかなかうまくいきません。 どなたかご教授いただけないものでしょうか? よろしくお願いいたします。

  • エクセルでデータ抽出

    エクセル初心者です。 エクセルでに次のような表を作っております。 (Sheet1) 担当 会社 郵便番号 住所 菊地 A社 0000000 ○○○○ 菊地 B社 0000000 ○○○○ 菊地 C社 0000000 ○○○○ 田中 D社 0000000 ○○○○ 田中 E社 0000000 ○○○○ 山本 F社 0000000 ○○○○ 山本 G社 0000000 ○○○○        ・        ・        ・ と800件くらいあるのですが、 これを 別シート(Sheet2)で名前を菊地と入力すると菊地のデータが一覧で出るようにしたいのですが、どうしたらよいでしょうか。 できれば、マクロを使わずに関数でやりたいです。 VLOOKUPかな?と思い、いろいろ調べたのですが、抽出したいデータが複数あるので、悩んでおります。 すみませんが、どなたかご指導お願い致します。

  • (Excel2002)フィルターで抽出→抽出部のみのファイル

    いつもお世話になっております。 早速ですが、質問があります。 購入者名と購入品が入ったエクセル表があるとします。 鈴木 けしゴム 100円 田中 えんぴつ 200円 山田 じょうぎ 300円 田中 けしゴム 100円 鈴木 じょうぎ 300円 : : :    合計(SUBTOTAL9) 15000円 ここで鈴木でフィルターをかけると、 鈴木 けしゴム 100円 鈴木 じょうぎ 300円     合計  400円 となると思います。 この表示された項目のみを「鈴木ファイル」として保存したいのです。 フィルターにより田中と山田が非表示になっている状態ではなく、 ファイル全体で鈴木(とその合計)しかないデータにしたいのです。 実際は鈴木田中山田ではなく、50ほどの項目があり、 それぞれを抽出してファイルに分けたいと思っています。 よろしくお願いします。

  • Excel関数である条件に満たしたものを抽出

    Excel関数である条件に満たしたものを別シートに抽出したいのですが たとえばsheet1に A   B    C ID  名前   条件フラグ 101  太郎   1 102  花子   3 103  一郎   2 104  二郎   3 というデータがあってここから 条件フラグが「3」のものだけをsheet2に抽出したいのですが オートフィルタではなく関数で処理をしたいと思います。お分かりの方、ご教授ください。

  • 【エクセル】データ抽出する関数の使い方

    データを抽出するのに、今までVlookupなどを使っていました。 今回2つの項目(下記の表だと月と色)を指定して、抽出したいです。 Sheet1(元データ)   A  B  C   1 月  色 値段 2 01  赤 4532 3 02  赤 1495  4 01  白 10012 5 03  赤 7568 6 02  白 78964 7 01  緑 78932 8 02  緑 7894 9 上記のような表から、下記のような形にデータを抽出したいです。 Sheet2   A  B   C    D    E  1 色 1月値段 2月値段 3月値段 2 赤 4532  1495 7568 3 白 10012 78964 4 緑 78932 7894 5 … 6 … Sheet2の色の項目内(A列)の順番は決まっています。 色に対応する、月ごとの値段の出し方がわかりません。 Sheet1のデータは2000行弱くらいの量です。 月は3月までです。説明不足名ところがありましたら 追記いたします。 ※重要なのが元データのシートで作業列などを追加することが出来ませ  ん(色と月を結合した列を追加などが出来ません)。Sheet2のセル内  に関数を記入するだけで今回のようなことは可能 でしょうか。 すみませんがご指導よろしくお願いいます。

専門家に質問してみよう