• ベストアンサー

エクセルのデータ抽出

複数の条件(重複も含む)に一致するデータを項目別に抽出したいのですが、関数で可能なのかどうかすら分からない状態です。顧客管理目的で、日付を入力すると項目別に表示させるようにすることはできますでしょうか? 図1をデータベースとして顧客データを入力し、図2を管理用として日付を入力すると各項目が表示される感じです。 ご教授の程、よろしくお願い致します。

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

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

>顧客数が多く(今後も増えていく)エクセル自体が動作がかなり遅くなってしまいました。何か良い対策はありますでしょうか。 との事でしたので、大幅に見直しまして、関数内で同じ処理を重複して行っている様な箇所を減らすために、これらの共通の処理を行っている部分が行っている処理を、中間処理として一旦、Sheet3上の別のセル(作業セル)上で行って、その値をセルに書きだした上で、以前の関数において同じ処理を行っている箇所の所は、中間処理の結果が書き出されているセルを参照する様にしてみました。 (抽出方法自体も若干見直しています)  尚、Sheet1及びSheet2のレイアウトはそのまま変えないものとします。  まず、Sheet3のA1セルに次の関数を入力して下さい。 =ROW(Sheet1!$B$2)+1  次に、Sheet3のA2セルに次の関数を入力して下さい。 =MAX(MATCH(CHAR(1),Sheet1!$B:$B,-1),$A$1)  次に、Sheet3のA4セルに次の関数を入力して下さい。 =REPLACE(CELL("filename",Sheet1!$B$2),1,FIND("]",CELL("filename"),FIND(".xl",CELL("filename"))),)&"'!"  次に、Sheet3のA6セルに次の関数を入力して下さい。 =IF(ISNUMBER(1/(Sheet2!$B$3&"/"&IF(AND(Sheet2!$D$3="",Sheet2!$F$3=""),1,Sheet2!$D$3)&IF(Sheet2!$F$3="","","/"&Sheet2!$F$3))),(Sheet2!$B$3&"/"&IF(AND(Sheet2!$D$3="",Sheet2!$F$3=""),1,Sheet2!$D$3)&IF(Sheet2!$F$3="","","/"&Sheet2!$F$3))+0,"")  次に、Sheet3のA7セルに次の関数を入力して下さい。 =IF(ISNUMBER(1/(Sheet2!$B$3&"/"&IF(AND(Sheet2!$D$3="",Sheet2!$F$3=""),1,Sheet2!$D$3)&IF(Sheet2!$F$3="","","/"&Sheet2!$F$3))),DATE(Sheet2!$B$3+(Sheet2!$D$3=""),Sheet2!$D$3+(Sheet2!$F$3=""),(0&Sheet2!$F$3)+1),"")  次に、Sheet3のC2セルに次の関数を入力して下さい。 =SUBSTITUTE(REPLACE(CELL("address",OFFSET(Sheet1!$B$2,1,ROWS($2:2))),1,FIND("$",CELL("address",Sheet1!$B$2),FIND(".xl",CELL("address",Sheet1!$B$2)))-1,),$A$1,)  次に、Sheet3のD2セルに次の関数を入力して下さい。 =IF(OR(COUNT($A$1,$A$2)<2,ISERROR(INDIRECT("'"&$A$4&$C2&$A$1))),"","'"&$A$4&$C2)  次に、Sheet3のE2セルに次の関数を入力して下さい。 =IF($D2="","",$D2&$A$1&":"&$C2)  次に、Sheet3のF2セルに次の関数を入力して下さい。 =IF($E2="","",COUNTIFS(INDIRECT($E2&$A$2),">="&$A$6,INDIRECT($E2&$A$2),"<"&$A$7))  次に、Sheet3のG2セルに次の関数を入力して下さい。 =IF(ISNUMBER($F2),IF($F2>0,MATCH(9E+307,INDIRECT($E2&$A$2))+$A$1-1,""),"")  次に、Sheet3のB2セルに数値の0を入力して下さい。  次に、Sheet3のB3セルに次の関数を入力して下さい。 =IF(ISNUMBER($G3),SUM($G$1:$G2),"")  次に、Sheet3のA9セルに次の関数を入力して下さい。 =SUM($G:$G)  次に、Sheet3のC2~G2のセル範囲をコピーして、Sheet3のC3~G3のセル範囲に貼り付けて下さい。  次に、Sheet3のB3~G3のセル範囲をコピーして、同じ列の4行目以下に貼り付けて下さい。(記念日の入力欄の列数だけ在ればOK)  次に、Sheet3のJ3セルに次の関数を入力して下さい。 =IF(ROWS($3:3)>$A$9,"",MATCH(ROWS($3:3)-1,$B:$B))  次に、Sheet3のK3セルに次の関数を入力して下さい。 =IF(ISNUMBER($J3),ROWS($3:3)-INDEX($B:$B,$J3)+$A$1-1,"")  次に、Sheet3のI2セルに数値の0を入力して下さい。  次に、Sheet3のI3セルに次の関数を入力して下さい。 =IF(ISNUMBER($K3),IF(AND(INDIRECT(INDEX($D:$D,$J3)&$K3)>=$A$6,INDIRECT(INDEX($D:$D,$J3)&$K3)<$A$7),COUNTIFS(INDIRECT(INDEX($E:$E,$J3)&$A$2),"<"&INDIRECT(INDEX($D:$D,$J3)&$K3),INDIRECT(INDEX($E:$E,$J3)&$A$2),">="&$A$6)+COUNTIF(INDIRECT(INDEX($E:$E,$J3)&$K3),INDIRECT(INDEX($D:$D,$J3)&$K3))+($J3-ROW($B$1))*10000000,""),"")  次に、Sheet3のI3~K3のセル範囲をコピーして、同じ列の4行目以下に貼り付けて下さい。(貼り付けた行数がSheet1の日付を入力するためのセルの個数を上回るまで)  次に、Sheet2のA7セルに次の関数を入力して下さい。 =IF(OFFSET(A7,-ROWS($7:7)-1,)="","",IF(ISNUMBER(1/COUNTIF(Sheet3!$I:$I,MATCH(OFFSET(A7,-ROWS($7:7)-1,),Sheet1!$C$2:$H$2,0)*10000000+ROWS($7:7))),INDEX(Sheet1!$C:$H,VLOOKUP(MATCH(OFFSET(A7,-ROWS($7:7)-1,),Sheet1!$C$2:$H$2,0)*10000000+ROWS($7:7),Sheet3!$I:$K,3,FALSE),MATCH(OFFSET(A7,-ROWS($7:7)-1,),Sheet1!$C$2:$H$2,0)),""))  次に、Sheet2のB7セルに次の関数を入力して下さい。 =IF(A7="","",INDEX(Sheet1!$B:$B,VLOOKUP(MATCH(OFFSET(A7,-ROWS($7:7)-1,),Sheet1!$C$2:$H$2,0)*10000000+ROWS($7:7),Sheet3!$I:$K,3,FALSE)))  次に、Sheet2のC7セルに次の関数を入力して下さい。 =IF(A7="","",INDEX(Sheet1!$A:$A,VLOOKUP(MATCH(OFFSET(A7,-ROWS($7:7)-1,),Sheet1!$C$2:$H$2,0)*10000000+ROWS($7:7),Sheet3!$I:$K,3,FALSE)))  次に、Sheet2のA7~C7のセル範囲をコピーして、Sheet2のA8~C13のセル範囲に貼り付けて下さい。  次に、Sheet2のA5~C13のセル範囲をコピーして、同シートのE5~G13のセル範囲とI5~K13のセル範囲に貼り付けて下さい。  次に、Sheet2の5~13行目全体をまとめてコピーして、Sheet2の16~24行目の行範囲に貼り付けて下さい。  次に、Sheet2の18~24行目(16~24行目でも可)全体をまとめて選択してから、Excelの置換機能を利用して、 ROWS($7: という部分を ROWS($18: に[すべて置換]して下さい。  そして最後にSheet2の各記念日の表の一番上のセルである、A列、E列、I列の行番号7行目と18行目のセルに、各記念日の名称を入力して下さい。  以上です。  尚、Sheet1の記念日欄の列数を増やす際には、Sheet2とSheet3において Sheet1!$C$2:$H$2  ↓ Sheet1!$C$2:$I$2 と Sheet1!$C:$H  ↓ Sheet1!$C:$I の置換を行うという方法か、或いはSheet1のC列とH列の間に列の挿入を行うという方法を用いて下さい。  尚、今回の関数の場合、 $E$16  ↓ $I$16 や $E18  ↓ $I18 の置き換えは不要です。

kametaro58
質問者

お礼

kagakusuki様 この度は、知識の浅い私の様々な質問に対して細部までご教示いただき、本当にありがとうございました!特に、年月日検索を年月検索でも対応可能な方法をお教えいただいたことは、本当に感謝の言葉しかありません。kagakusuki様含め、皆様方のお陰で、想像以上に完成度の高い帳票が完成しました。お教えいただいたものを全て理解するには、まだまだ時間がかかりますが、ひとつひとつ学びながら習得していきたいと思います。 この度は、貴重なお時間を割いて知恵をお貸しいただき、本当にありがとうございました!

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

その他の回答 (11)

  • bunjii
  • ベストアンサー率43% (3589/8248)
回答No.1

>図1をデータベースとして顧客データを入力し、図2を管理用として日付を入力すると各項目が表示される感じです。 辛うじて読める範囲の画像です。 行番号と列記号を当方の検証用に置き換えて作表してしてみました。 貼付画像のK5セルに次の数式を設定し、下へ必要数コピーします。 =SUMPRODUCT(($A$2:$A$11=I6)*($C$1:$G$1=I$3)*($C$2:$G$11=DATE($J$1,$K$1,$L$1))*$C$2:$G$11) 該当が無いときはシリアル値の0が返りますので、条件付き書式で0のとき文字の色を白にします。 但し、住所と名前の組み合わせは固定されているものとしてA列の住所のみで検索条件としています。 記念日の種別毎に日付の検索を行えるようにしてあります。 記念日Aの日付全体をコピーでクリップボードへ記憶させて、記念日B、記念日C、記念日D、記念日Eへ順次貼り付ければ貼付画像のようになります。

kametaro58
質問者

お礼

bunjii様 大変参考になりました。ただ今回は、Kagakusuki様から頂いた式を使用させて頂こうと思います。お忙しい時間を割いていただき、知恵をお貸し頂きまして本当にありがとうございました。

kametaro58
質問者

補足

bunjii様、検証までしていただき、ありがとうございます! お教えいただいた内容なのですが、Sheet2の検索で各記念日で該当するものだけを抽出して上詰めで表示し、該当しないものは表示しないようにすることはできますでしょうか?例えば、Sheet2の記念日Aで該当者Aさん以外を表示させないようにや、記念日Dで該当者DさんとFさんを上詰めで表示して他を表示させないようにする感じです。 質問ばかりで申し訳ありません。よろしくお願い致します。 kagakusuki様、年月日単位で該当データを抽出できる形でご教授いただきありがとうございます!お教えいただいた通りに入力を進めてみたのですが、なかなか思うようにいきません。エクセルは一般的な知識くらいしかない者なので、ただただお教え頂いた通りに入力しています。ただ、これがとても重要だったら申し訳ありません。各記念日なのですが、ある基準日となる日付を別セルに入力して、そこから各記念日を数式にて算出しております。 例えば、基準日として「2015/3/9」と入れると、各記念日が自動で表示されるような形です。最初から記載しておけばよかったのですが、お教えいただいた数式の中にDATE関数のようなものが入っていたので、素人ながらもしかしたらと思ってしまいました。ご丁寧にお教えいただいたにも関わらず大切と思われる情報を記載していなかったこと、本当に申し訳なく思っています。もし、お許しいただけるようでしたら、尚のご教授いただければ大変ありがたく思います。考えてもいなかった、年月日別での検索方法は、とても理想的です。

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

関連するQ&A

  • エクセルのデータ抽出

    複数の条件に一致するデータを項目別に抽出する方法がわかりません。関数で可能なのかどうかも分からない状態です。顧客管理の目的で、日付を入力すると項目別に表示されるようにすることはできますでしょうか? イメージなのですが、図1をデータベースとして顧客のデータを入力し、図2を管理用として日付を入力すると各項目が表示される感じです。 ご教授のほど、よろしくお願い致します。

  • データベースとデータの抽出について

    データベースとデータの抽出について エクセル2003で以下のような、表を作っています。 データは現在、A列に10000万件程度入っています。 4列目の購入日付データの年、月、日がそれぞれのセル(D2、E2、F2) に分割入力されています。 このデータベースから、氏名と購入日付を基準キー にして、顧客NOと購入日付(1つのセルに結合)、 購入商品を抽出し、シート2に転記していきたいです。 抽出方法は、シート2に以下のような形で検索  表示したいです。 (シート2) 氏名(B1に表示)→C1に入力 抽出開始年月日(D1に表示)→年はE1、月はG1、日はI1に入力  抽出終了年月日(D2に表示)→年はE2、月はG2、日はI2に入力 検索後、表示される顧客NOと購入日付、購入商品は 同じシート2の以下のセルに表示したいです。 顧客NO(L1に表示)→L2から下に表示 購入日付(M1に表示)→M2から下に表示 購入商品(N1に表示)→N2から下に表示 したいです。 日付が分割入力されているため、抽出がうまくできません。 氏名、または名字だけでうまく検索できるコードはあるでしょうか。 どうぞよろしくお願いします。

  • エクセル 重複データの抽出

    エクセルを使って重複データをチェックしようと思っていCOUNTIFで試したのですがうまくいきません・・・ご存知の方教えてください。m(__)m   A     B       C         D       E     F   店番  顧客番号  氏名(カナ)   電話番号   住所1   住所2 という表の電話番号が重複する先を抽出したいのです。データ件数は約3000件ほどあります。できれば重複したデータは別のシートに店番順に表示をしたいのですが関数でできるのでしょうか?

  • エクセル データの抽出について教えてください。

    エクセルのデータの抽出について教えてください。 大量のデータ(数字のコード)がランダムに縦に並んでいるのを、並び替えで日付順にしたのですが。 重複しているのがとても多く重複しているのは日付が早いのだけを取り出したいのですが。なにかよい方法はないでしょうか? 重複しているのに(重複していらないのに)標しでわかりやすくしてあとでフィルタで抽出して削除でもしようかと思うのですが。 標しがつけれるようなやりかたおしえてください。 

  • Excel フォームで入力したデータの抽出

    マクロなどに対する知識等まったくないレベルでの質問です。 Excelで シート1に任意の項目を入れ(列)フォームを起動させて入力したものを シート2に飛ばしデータベースを作っています。 (シート1で『従業員コード』として入れた数字が シート2では 〇〇〇子のように  表示させているためです。) 今回 御質問させていただきたいのはシート3で データを検出したいのですが やりたい形にならず困っております。 入力するのは顧客ファイルのようなもので 誰がいつ何を購入して誰がその対応をしたかという 事がわかる項目となっていますが電話番号で顧客管理したいため 電話番号で検索をかけたときにその電話番号の方の過去データが抽出されるようにしたいのです。(購入履歴のようなもの) また、クレーム対応として対応した従業員がわかっている場合、その従業員が過去に誰と誰の対応をしたのかなども抽出できるのが望ましいです。 従業員が対応した場合の抽出は最悪フィルターでも可能ですが お客様のデータ抽出は数が多くフィルターをかけて探すのは無理です。 できれば 番号検索のセルを作ってそこに電話番号を入れれば データベースから過去の情報を拾ってこれるものを望んでいます。いくつか試した中で情報を拾ってきたのは直近の一件だけで履歴の一覧のようには抽出できませんでした。私程度では無理な作業なのかすらわかりませんが ご教授頂けるようでしたら幸いです。 その際は初心者でもわかるような説明をして頂けると助かります。 顧客管理ソフトの存在も知っていますが欲しい形が見つからずこちらに質問させて頂きました。よろしくお願いいたします。OSはWindows10 でExsel2010です。

  • エクセルでデータベースの検索と抽出(?)

    エクセル2007を使用しています。 まずエクセルで作られたデータベースがあります。データベースには、管理番号、顧客名、商品の管理番号、商品名、価格が入っています。 このデータベースとは別に、検索(抽出)用のエクセルを用意しています。 そこで、管理番号を入れたら、顧客名、商品名、価格のみが1行(横)に表示されるようにしたいです。 クエリを利用してやると一つずつ顧客名、商品名、価格を選んで…という風に時間がかかります。 例えば、管理番号の列(縦)に番号を入れて、ボタンを押すとか、実行(F9)すれば、管理番号を入れたすべての行に、データベースから検索した顧客名、商品名、価格が入力されるようにしたいのです。(管理番号の重複はありません) クエリで一個ずつ選んでいくのをマクロ登録するしかないのでしょうか?

  • エクセル2000 データ抽出

    毎回、関数についての質問コーナーは閲覧させて頂いております。 昨日より、私が解決できないエクセルでのデータ抽出方法を色々と検索して、探して見ましたが見当たりません。どなたか詳しい方がいましたらアドバイスを頂ければと思ってます。 私が、エクセルでデータ抽出したいのはですね。。 一つのエクセルファイルは、日々更新されて(手入力で)いく、いわゆる、進捗管理表。 入力項目:日付、名前、学校名、合・否・条件付き・補習、その他色々。。 もし、その生徒が合格or条件付きor補習だったら(不合格以外)、学校ごとの他のエクセルファイルへ、データを自動で抽出できる。。 そんな、機能的な数式はありますか? アクセスは、使ってはいけないそうです。 教えてください。または、以前これと同じ様な質問をして回答されたページを教えてください。 お願いいたします。

  • エクセルでの~データの抽出~

    本などを読んでも何で調べたらいいのか分かりません。 お詳しい方どうかご教示下さい。 仕事でエクセルのみを使用してデータの管理をしています。以下の ようなことをしたい場合、エクセルで出来るのか、またどうすれば よいですか? (Q1)例えば、Aのシートに何百人という名前のデータがあるの ですが、そこには同じ人(同じ名前)がほぼ2~3個重複してたりも します。Bのシートにも同様のようなデータがあり、Aのシートにいる 人もまた同じようにBのシートにも重複してたりもします。そこで、 「AのシートにはなくてBのシートにだけいる人を抽出したい」場合どうすればよいのでしょうか? 3月の顧客一覧をAのシート、4月の顧客 一覧をBのシートとしていて、毎月ほぼ同じだけれど、4月に 新たに発生した顧客だけを知りたい、という場合です。。。 (金額も管理してるので一シートに同じ顧客が連なってたりもします) この場合、いちいち見比べずにさっと抽出したりすることは可能 でしょうか…?      (Q2)各シートに沢山あるデータのある一つのデータだけを、どこかに 抽出することはできます?例えば、名前・金額などのデータを月毎に 各シートで管理しているのですが、一年なら、12枚あるシートの 中で、ある一人だけのデータを知りたい場合(例えば何月に来ていくら 購入している…等)、12シートを一枚づつ開いて名前を探す方法以外に何かありますか? 分かりにくい説明で申し訳ありません。お詳しい方、どうか知恵と 知識をご教示ください。よろしくお願いいたします。      

  • excelでのデータの抽出

    excelの関数について質問です。 まず、以下のような元となるデータ(文字列)があると仮定します。 (上から順番に) 1 1 2 5 5 5 3 3 3 このデータから、重複するものを除いて 1 2 5 3 のように別のシートに抽出したいと思っていますが、どのような関数を使用すればよいのか分かりません。 なお、元になるデータの個数は約6000件です。

  • エクセル2007 データ抽出(関数)について

    教えてください。エクセルシートにて郵便番号と住所が重複しているデータを抽出したいのです。 例)ある顧客の情報として、シート1のA列に、1から10までの新規顧客の氏名、B列には生年月日が入力されています。C列,D列は空白で、E列には全ての顧客(新規顧客を含みます)の氏名、F列には生年月日、G列には郵便番号、H列には住所が入力されています。このふたつの情報の中から、新規顧客データと全ての顧客データの氏名、生年月日が重複している顧客のみ、C列にその郵便番号、D列に住所を表示させたいのです。 OSはXP エクセル2007です。 困っています。よろしくお願いします。

専門家に質問してみよう