• ベストアンサー

エクセルのデータ抽出

いつもお世話になってます。 Win98 Excel97です。 過去ログうをいつもありがたく拝見させて頂いてるのですが頭が足りず理解できませんでした。#REF!になってしまい 途方にくれてます。 シート1に4万件、シート2に800件のデータがあり、 シート3に重複したものだけを呼び出したいので過去ログを参考にVLOOKUPを使用して呼び出そうとしてるんですが #N/Aや#REFになってしまい困ってます。 キーはA列に入れた名前で、列の数はAKまでです。 なにかよいやり方があればお教え下さい。 よろしくお願い致します。 なお、説明が拙いので補足があればすぐお返事させていただきます。

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

  • ベストアンサー
noname#148473
noname#148473
回答No.2

まずシートの名前を確認してください。作例はSheet1~Sheet3を使用するようになっていますので、必要に応じて変更してください。 質問に明記されていないのですが、シート2のキー(名前)もA列にあるものとします。 メニューバーから「ツール」→「マクロ」→「VisualBasicEditor」を選びます。VisualBasicEditorが別ウィンドウで起動します。VisualBasicEditorのメニューバーの「挿入」→「標準モジュール」を選びます。 画面の右半分に真っ白な広いウィンドウが開きますので、ここに下記の点線内の内容を貼り付けます。 '----------------------------------------- Sub データ比較() Dim sa(65536) As Byte Dim ii, fg, de1, de2 As Integer Dim c1, c2, c3 As Integer Dim c As Variant Set WS1 = Worksheets("Sheet1") Set WS2 = Worksheets("Sheet2") Set WS3 = Worksheets("Sheet3") de1 = WS1.Range("A1").End(xlDown).Row de2 = WS2.Range("A1").End(xlDown).Row WS3.Range("A1") = "重複" WS3.Range("B1") = "シート1にのみ存在" WS3.Range("C1") = "シート2にのみ存在" WS3.Range("A2:C65536").ClearContents For Each c In WS1.Range("A1:A" & de1) fg = 0 For ii = 0 To de2 - 1 If StrComp(c, WS2.Range("A1").Offset(ii, 0).Value) = 0 Then WS3.Range("A2").Offset(c1, 0).Value = c sa(ii) = 1 fg = 1 c1 = c1 + 1 ii = de2 End If Next If fg = 0 Then WS3.Range("A2").Offset(c2, 1).Value = c c2 = c2 + 1 End If Next For ii = 0 To de2 - 1 If sa(ii) = 0 Then WS3.Range("A2").Offset(c3, 2).Value = _ WS2.Range("A1").Offset(ii, 0).Value c3 = c3 + 1 End If Next End Sub '----------------------------------------- 貼り付けたら、Excelのほうに戻って、 メニューバーから「ツール」→「マクロ」→「マクロ」を選びます。「マクロ」と書かれたウィンドウが画面上に開きます。「データ比較」という行が反転していることを確認して(反転していないときは、クリックして反転させる)「実行」ボタンを押します。Sheet3に実行結果が書き出されます。 以上です。お望みのような結果が得られましたでしょうか?

makirabi
質問者

補足

ご回答ありがとうございます。 ありがたく使わせていただいたのですが 「オーバーフローしました」と出て de2 = WS2.Range("A1").End(xlDown).Rownの 部分が黄色くなり左側に→が出てます。 お忙しいところ恐れいりますが対処法を 教えて頂けますでしょうか?

その他の回答 (4)

noname#148473
noname#148473
回答No.5

#2です。 #4さんの仰るとおり、ちとミスってました(^_^;) Dim ii, fg, de1, de2 As Integer の行を Dim ii, fg, de1, de2 あるいは Dim ii, fg, de1, de2 As Long に変更すれば、エラーは出なくなるはずです。 失礼しました。 snoopy64さん、ありがとうございます。

makirabi
質問者

お礼

お礼は遅くなって申し訳ありません。 希望通りの抽出が出来ました。 ありがとうございます。 今後も勉強を重ねていきたいと思います。 ありがとうございました。

  • snoopy64
  • ベストアンサー率42% (337/793)
回答No.4

de2 が扱える範囲を超えています。 とりあえず Dim ii, fg, de1, de2 As Integer を Dim ii, fg, de1, de2 に変更してみてください。 しゃしゃり出ちゃいました(^^ゞ

makirabi
質問者

お礼

お礼が遅くなって申し訳ありません。 おかげさまで希望通りの抽出が出来ました ありがとうございました

  • snoopy64
  • ベストアンサー率42% (337/793)
回答No.3

数字の項目が検索キーになっていませんか? 見かけ上は同じ数字に見えても、文字型だったりするとマッチしません。 検索先が文字で検索キーが数字の場合、 =vlookup(Text(A2,"@"),Sheet1!$A:$K,3,0) 検索先が数字で検索キーが文字の場合、 =vlookup(Value(A2),Sheet1!$A:$K,3,0) これでどうでしょうか。

makirabi
質問者

お礼

お礼が遅くなって申し訳ありません。 今回は別の方で解決できましたがとても参考になりました。 ありがとうございます。

  • mshr1962
  • ベストアンサー率39% (7418/18948)
回答No.1

#REF!は参照範囲が削除されたときなどにでるエラー #N/Aは参照範囲にキーと同じ物がない場合にでるエラー になります。 =VLOOKUP(A1,Sheet1!A2:G40000,2,false) の様になっていませんか? 参照範囲は絶対参照にしてください。 Sheet1!$A$2:$G$40000の様になります。名前付けした方がいいと思いますよ。 #N/Aは重複していない場合ですがここで空白にしたい場合は =IF(ISNA(VLOOKUP(省略)),"",VLOOKUP(省略)) の様にしてください。

makirabi
質問者

お礼

お礼が遅くなって申し訳ありません。 今回は別の方で解決できましたがとても参考になりました。 ありがとうございます。

関連するQ&A

  • エクセル:複数シートで重複データを抽出したい

    こちらで、ひとつのシート内での重複データの抽出はできました。 ↓ http://www12.ocn.ne.jp/~momonet/excel-temp41.htm これを応用し、複数のシートの列内の重複を抽出することはできますか? シート1のA列とシート2のC列というように、同じ列ではないこともあります。 よろしくお願いします。

  • EXCELの重複データの抽出について

    1月と2月という2つのシートがあり、それぞれA列に姓、B列に名、C列にメールアドレスが入力されています。 1月と2月を比べてABC列のデータが全く同じものだけを、1月重複分、2月重複分として抽出することが、ExcelまたはAccessでうまくできないため、どなたか教えてください。

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

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

  • 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回繰り返すことになりますが 簡単に行うにはどのようにすればいいのでしょうか? マクロについては あまり詳しくないので できれば関数を使いたいのですが 無理でしょうか? マクロを使うのであれば 分かりやすく教えていただきたいのですが・・・ 勝手なお願いで申し訳ありませんが よろしくお願いします。

  • 重複するデータの抽出

    どなたか教えてください。 Sheet1A列に入力されたデータ群と重複するデータを 別sheetから抽出したいのですがやり方がわかりません。 要は、Sheet1A列に10000件のデータが入力されているのですが、それらと重複するデータを別シートから検索したいです。(別シートで10000回検索しない方法が知りたいです。) よろしくお願いします。

  • エクセルデータの抽出について

    A列とB列にデータが入っています。 A列が×になっている行のB列を抽出し、D列に表示するにはどんな計算式を使えばよいでしょうか。 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列には重複するデータはありません。 わかりにくい文章ですみませんが、よろしくお願いします。

  • エクセルで別シートから合う条件を抽出

    お世話になります。 過去ログを30分ほど見ていたのですが よくわからなくなり質問が重複していそうで、申し訳ございませんが 質問させて頂きます。 シート2に      あ い う え お 1000    2 3 4 5 6 2000  3 4 5 6 7 3000  4 5 6 7 8 4000  5 6 7 8 9 5000  6 7 8 9 10 6000  7 8 9 10 11 7000  8 9 10 11 12 の表があります。 シート1の見積もりのAC24に1000.2000の列のリスト シート1の見積もりのAW19にあ、い、う、え、おの行のリスト が入ってます。 AC24とAW19を選んだら表の中の数字を引っ張りだしたいのです。 VLOOKUPやMATCH、IF関数を使ってみたのですがうまくいきません。 お忙しいところ恐れ入りますがアドバイス頂けたら幸いです。 よろしくお願い致します。

  • Excel 2データをぶつけて重複しないものを抽出

    Excelに詳しくありませんので、 詳しく教えて頂けると助かります。 2つのデータをぶつけて、 重複しないものを抽出する方法を教えてください。 他の質問サイト等でもみたのですが、      VLOOKUPを設定して、      =IF(ISERROR(VLOOKUP(A1,[ブック2.xls]Sheet1!$A$1:$B$5,1,FALSE)),"*","") このあたりに関しても意味が分かりません。。。 どうぞよろしくお願いいたします。

  • エクセルで重複のチェックをしたい

    初心者なので、拙い内容ですが教えてください。 ・エクセル2003 二つのシートにそれぞれA列に企業名、B列に支店名、 C列に郵便番号、D列に住所が入力されています。 二つのシートはほぼ同じ内容で、シート1は3000件の全データ、 シート2は抽出された1300件のデータが入力されています。 やりたいことは3000件のうちの1300件の重複データを シート1の全データの空白列に「重複」や  重複データには行に色をつけて表示させる、などとにかく 重複をわかりやすく表示させたいのです。 過去ログみましたが、いまいち理解できませんでしたので わかりやすく教示してくださると助かります! ちなみに二つのデータをひとつにし、フィルタオプションの 「重複するレコードは・・」は検討違いだったようでうまくいきませんでした・・ ひとつの列に対する重複チェックは理解できたのですが.. 支店によって住所が違ってくるので、たちどまってしまいました。

専門家に質問してみよう