• ベストアンサー

Excelをデータベースのように使用した場合 データの抽出

Excelをデータベースのようにして使用している場合について教えて欲しいことがあります。  ・Sheetを2つ作成したとします。  ・Sheet1はたくさんのデータが入っているシートです。  ・Sheet1の名前を仮に『Data』とします。  ・Sheet2はSheet1から必要なデータを抽出してきて並べるシートです。  ・Sheet2の名前を仮に『Report』とします。  ・『Data』のA列には1~200までの数字が入力されています。  ・その数字は ランダムである上に 重複していることもあります。  ・例えばA1には「1」が入力されていて A2には「2」が入力されています。  ・しかし その後A3にもA4にもA5にも「2」が入力されています。  ・同様にA6~A15までは「3」が入力されているのです。  ・このようにA列の数字は 同じ数字が何度も重複しており その重複には規則性はありません。  ・『Report』シート上で『Data』シートからデータを抽出したいのですが A列に「1」と入力されているデータだけを取り出すのなら「VLOOKUP」でもできますよね・・・・  ・しかし A列に「2」と入力されているデータを「VLOOKUP」関数で選んでも その先頭行のデータしか読み込んできません。  ・『Data』シートのA列に入力している数字から 必要な数字が入力されている行のデータだけを 全て『Report』シートに並べようとした場合 手作業で行うとすると・・・ 『Data』でA列が「1」のデータだけを選び,それを『Report』シートに貼り付ける。次は「2」で実行する。・・・・・という作業を200回繰り返すことになりますが 簡単に行うにはどのようにすればいいのでしょうか? マクロについては あまり詳しくないので できれば関数を使いたいのですが 無理でしょうか? マクロを使うのであれば 分かりやすく教えていただきたいのですが・・・ 勝手なお願いで申し訳ありませんが よろしくお願いします。

  • oonots
  • お礼率88% (160/181)

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

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

#3です。 Sheet1に足した連番(D列)は1をスタートにして、2,3,4・・と振っています。 M6から1をまず探すにはROW()ーー>6ですから、Row()-5に書き換えて最初が1になるように数を調整してください。すると Sheet2の M列6行目 6-5=1 -->Sheet1のT列で、1をMATCH関数で探す M列7行目 7-5=2 -->〃 2を探す M列8行目 8-5=3 -->〃 3を探す ・・ となります。

oonots
質問者

お礼

お礼が遅くなって申し訳ありません。 ありがとうございます。 ついでに・・・ あと一つ教えていただけませんか? データシートのデータはA6~R275までです。 Sheet2には M6からデータを書き込むようにしたいのです。 つまり Sheet1のA列~R列までを Sheet2のM列~AD列に書き込みたいのです。 このような場合は 式のどの部分を書き換えればいいのでしょうか? よろしくお願いします。

その他の回答 (3)

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

質問が、冗長すぎる。回答者は初心者ばかりではない。くだくだ書かなくても、「A列に重複データがあります」だけでわかる。 本来 エクセルは 操作 関数 VBA などの解決法があるが、本筋は「操作」だ。それを輪売れないこと。 データーフィルターフィルタオプションの設定などが適当ではないかな。 データベースクエリのご紹介もあるが、アクセスなどの経験がないと難しいのでは。 関数だけで抜き出すご回答も有るが、私の自称imogasi方式を書いてみる。 #2のご回答の式の意味が理解できれば、下記は読まなくても良い。 ーーーー Sheet1 A2:B2 A,B列データ  D列作業列 A列  B列      D列 1 a 1 1 b 2 2 c 3 d 1 e 3 3 f 2 g 1 h 4 4 i 2 j ーーー D2の式は =IF(A2=Sheet2!$A$1,MAX($D$1:D1)+1,"") 下方向に式を複写 ーー Sheet2 A1に1、や2.3の抜き出す条件の値を入れる。 A2に =INDEX(Sheet1!$A$2:$B$100,MATCH(ROW()-1,Sheet1!$D$2:$D$100,0),COLUMN()) 右へ式を複写。 あ2:b2を下方向に式を複写。 結果 1 1 a 1 b 1 e 1 h 1を2に変えると即座に 2 c 2 g 2 j #N/A #N/A このエラーを出さない方法は、Googleでimogasi方式を照会すればでてくる私の回答の中に載っている。長くなるので略。 Sheet1のD列のMAXの値より大なら空白にするIF関数を前にかぶせる。

oonots
質問者

お礼

ご回答ありがとうございます。 すみません。長々とした質問で・・・ こちらがシロウトなもので こんな表現しかできませんでした。 結局 このimogasi方式というのを 使わせていただくことにしました。 しかし 関数の意味が理解できていないので(スミマセン 初心者で) ちょっと うまくできない部分がありました。 データシートのA6~R275までがデータなので 作業列はT6~T275までつくりました。 T6には =IF(A6=Sheet2!$A$1,MAX($T$5:T5)+1,"") でうまくいくと思います。 しかし Sheet2のJ5に抜き出す条件の値を入れるようにして M6からデータを書き込むようにするには M6に =INDEX(Sheet1!$A$6:$R$275,MATCH(ROW()-1,Sheet1!$T$6:$T$275,0),COLUMN()) では うまくいきません。 どこがダメなのでしょうか?

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.2

ここ1,2ヶ月の間にこのサイトで見た回答を参考にさせていただいております。オリジナルのURLを記録してなかったので、再現してみました。 シート名、データベースのデータ範囲はご自分の環境に合わせて修正願います。 データベースのシート .......A.......B.......C.......D ..1.................1.....あ.......a ..2.......2.......2.....い.......b ..3................6.....う.......c ..4.................1.....え.......d ..5.......5.......2.....お.......e ..6................3.....か.......f ..7................4.....き.......g A1の式=IF(B1=Sheet1!$A$1,ROW(),"")、以下下方に複写 データはB列以降に置く 検索するシート ............A...............B...............C ..1...............2.............い...............b ..2..............................お...............e ..3........................#NUM!.......#NUM! ..4........................#NUM!.......#NUM! ..5........................#NUM!.......#NUM! A1:検索する値 B1の式=INDEX(Sheet2!$B$1:$Z$7,SMALL(Sheet2!$A$1:$A$7,ROW(A1)),COLUMN(B1)) 以下、列方向、行方向に複写 #NUMが気に入らない場合は(普通は嫌ですね..)条件付書式で白色フォントにする等してください。 式にエラー処理を盛り込みたければ、ご自分でなさって下さい。

oonots
質問者

お礼

ご回答ありがとうございます。 何とか 希望どおりにできそうです。 ありがとうございました。

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.1

下記は検討されたのでしょうか?A列の値だけで抽出なら、関数で可能でしょうが、より複雑な条件になるとこれらの出番になると思います。 1.フィルタオプション http://www.eurus.dti.ne.jp/~yoneyama/Excel/filter3.htm 2.データベースクエリ http://www.eurus.dti.ne.jp/~yoneyama/Excel/filter2.htm (Officeインストール時にMS Queryをインストールしてある、または、追加でインストールする必要あり)

oonots
質問者

お礼

ご回答ありがとうございます。 フィルタオプションを使えば 確かに抽出ができました。 しかし A列の数字でデータを抽出して表に表す場合 何度も 実行させるためには マクロが必要ですね。 個人的には VLOOKUP関数のように 特定のセルに数値を入力すると 瞬時に表示してくれるのを期待していたのですが・・・ ありがとうございました。

関連するQ&A

  • エクセルで、データのある行だけを抽出したい。

    エクセルのSheet1にデータが入っており、セルが空白でない行のデータのみを、Sheet2に抽出したいと思っています。 Sheet2にあらかじめ関数を入れておく方法にしたいため、関数について教えてください。 タイムテーブルで予定を管理するような表で、A~Hまでにデータが入っています。 予定を入れる際にはE列には必ず入力をするため、E列が空白でない行のみを抽出したいです。 A|B|C|D|E|F|G|H 月|日|時間|… 11|22|10:00|… 11|22|10:30|… 時間枠は10:00~17:00の30分刻みで、1日15行使用するので、1年で5475行まで使用します。 1行目はタイトル行なので、データは2行目から入力しています。 フィルタオプションで抽出する方法や、それをマクロで登録しておく方法は分かったのですが、あとから予定を追加することがあるため、マクロを実行する度にデータが置き換わると困ってしまいます。 また、抽出したSheet2のI列以降には備考などを入力したいため、やはり後から列がずれると困るため、A~H列に関数を入れておく方法で実行したいと思います。 よろしくお願いいたします。

  • エクセルで重複しないものだけを抽出したい

    下記のようなデータがあります。 A B C D 1 20 30 40 1 20 32 41 1 20 30 49 1 20 81 39 2 20 76 40 2 20 32 41 2 20 30 49 3 20 81 39 3 20 39 40 3 20 32 41 4 20 30 49 4 20 81 98 このうち、列Aの他と重複しない部分であり、かつ先頭行を抽出するにはどのようにしたらよいでしょうか? 上記の例で言うと、列Aの1から4までのそれぞれ1行目を選ぶという作業です。 抽出後 A B C D 1 20 30 40 2 20 76 40 3 20 81 39 4 20 30 49 vlookupなどの関数でできるのでしょうか?教えてもらえたらうれしいです。お願いします。

  • 重複するデータの抽出について(エクセル)

    エクセル2003にて重複するデータの取り出しをしたいのですが、 わからないので教えてください。 例えば   A列   B列   C列    D列    E列・・・ 1  色  1回目  2回目  3回目   4回目 2  赤   あ    a      A       0 3  白   い    b      B       1 4  黄   う    c      C       2 5  黄   え    d      D       3 6  黒   お    e      E       4 7  赤   か    f      F       5 : このデータの中から、別のシートのA1に 赤と入力したら、B1にD列のA・Fを抽出 黄と入力したら、B1にD列のC・Dを抽出をしたいです。 VLOOKUP関数を使用してみたのですが、 赤と入力すると、D列のA(1番上のデータ)のみしか抽出出来ず、Fが抽出されません。 重複するデータがあるのはA列のみで、D列には重複するデータはありません。 わかりにくい文章ですみませんが、よろしくお願いします。

  • エクセルデータ抽出方法を教えてください

    エクセルでのデーター抽出方法を教えてください、シート1:A1にUA1と入力し、シート2:A列にはUA1・・・・複数のデータが縦に並んでいます、シート1:A1に入力したデーターを元にシート2:A列を検索し該当するデータの抽出を行いたいです、VLOOKUPではうまく行きません教えてください

  • 重複データの抽出

    重複した数字のデータを抽出してまとめたいのですが教えていただけないでしょうか? 例えば A列    B列   1245     1365     1245 1398 1365 1155 1245 この表を      A列    B列   1245    1245 1365    1365 1245    1398 1398    1155 1365 1155 1245 のようにまとめたい A列の重複したデータを抽出しB列にまとめたいのですが、なるべく関数でやりたいのですが、良い方法をお願いいたします。

  • エクセル 大量のデータから抽出し自動表示

    エクセルのSheet1のC列に大量(3500件くらい)のデータがあります。このデータは毎日さらに増えます。D列にもおなじだけのデータがあります。 (E列・F列にはあとから別のデータをさらに入力していきます。) Sheet1 A B C D E F     1 2 3 4     2 3 4 5      1 3 5 6     3 5      2 4      ・ ・     ・ ・ こんな感じです。 今回、このC列に入っているデータを検索し、完全に一致したデータのみを別シートに抽出したいのです。 C列にはいろいろな数字が入っていて、同じものもありますが、D列にも同じ数字とは限りません。 なので、VLOOKUPは使用できないのかと思っています。 一致したデータはその行をすべて別シートに抽出したいです。 検索をかけて一致しないデータがあった場合もその検索した数字は残しておいてさらに今後一致になるまでデータを残しておくという方法はできますでしょうか。 エクセルは2003です。 よろしくお願いします。

  • 必要なデータを抽出したい

    必要なデータを抽出したい    A   B    C   D ・・・ 1 7/1   101   102  103 2 7/2   101   103 3 7/3   105   203 4 7/4   103   205 5 7/5   101   202 ・ ・    ・ ・ ・    ・ ・ ・    ・ Excelで上の様にA列に日付、B行列以降に数字が書かれているシートから、抽出したい数字が含まれている行を別シートに抽出するマクロはどのように書けばよろしいのでしょうか。 技術者の方、よろしくお願いします。 例えば、101が含まれているデータを抽出したら、sheet2に    A   B    C   D 1 7/1   101   102  103 2 7/2   101   103 3 7/5   101   202 となるようにしたいのです。

  • エクセルマクロで重複数値と以外の数値を抽出する

    数値の表を作成しておりますが、 重複数値で困っております。マクロで教えてください。 A列11~20まで1.2.2.4.5.6.6.8.9.10とあるデータに 2と6が重複しています 重複数値2.6をB列2行目以降に、C列2行目以降にはそれ以外の1.4.5.8.9.10 を抽出したいのですが、マクロで教えてください。 (offsetを使ってできますか?) また、重複数値を抽出する自作関数ってできるでしょうか? よろしくお願いいたします。

  • 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   ↑  ↑   日付 ゼロ以外 関数については中級レベルだと思います。 いろいろ試したのですが、関数を組み合わせてもなかなかうまくいきません。 どなたかご教授いただけないものでしょうか? よろしくお願いいたします。

  • エクセルでの列と列の比較、重複データ個数抽出

    すいません。どなたか教えてください。 今、エクセル2003を使用しているのですが、ある条件でデータの個数が抽出出来ません。 お知恵をお貸しください。   A列 B列 1 あ   あ 2 い   う 3 う    い 4 え    5 お   か A列とB列を比べると、「あ、い、う」の3つのデータが重複しています。 そこで、一つのセルで3個とい値を返したいです。 条件として、 ・計算用のシートや別セルを使わずに、例えば、C1などの1つのセルの中で関数を使用して個数を出したいです。 ・できたらマクロも使用しないでやりたいです。 ・数字ではなく、文字列の比較で、空白行もあります。 やはり、列同士の比較は一つのセルの中でやることは不可能なのでしょうか? どなたかよろしくお願いいたします。

専門家に質問してみよう