• ベストアンサー

[Excel]2つのファイルの異なる点を抜き出す方法を教えてください

久しぶりにお邪魔します。 エクセルの操作について、詳しい方教えてください。 2つのエクセルファイルがあります(AAA.xlsとBBB.xlsとします) どちらにも同じような商品名がずらっと並んでいますが、AAA.xlsにはあってBBB.xlsにはない商品名だけを抜き出したファイルを作成したいのです。 例えば 「AAA.xlsの内容」 りんご みかん バナナ なし ぶどう もも 「BBB.xlsの内容」 なし みかん りんご ぶどう ⇒「バナナ、もも」を抜き出したい AAAには3万個ほどの商品名が入っていますので、手動ではとても(泣)。 よろしくおねがいします。

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

  • ベストアンサー
  • pkh4989
  • ベストアンサー率62% (162/260)
回答No.3

'マクロの例です。 'AAA.xls / BBB.xls 両方開いた状態の例です。 '両方とも、商品名は Sheet1のA列にあるとして '存在しない商品名は、AAA.xls の Sheet1のB列に「○」を表示及び、C列に名称を展開する ' Sub 選別()   Dim wAsht    As Worksheet   Dim aMR     As Long   Dim editR    As Long   '   Application.ScreenUpdating = False   Set wAsht = Workbooks("AAA.xls").Worksheets("Sheet1")   '   editR = 0   With wAsht     aMR = .Range("A" & Rows.Count).End(xlUp).Row     For wR = 1 To aMR       If Chk_Find(.Cells(wR, 1)) = False Then         '存在しない         .Cells(wR, "B") = "○"         editR = editR + 1         .Cells(editR, "C") = .Cells(wR, 1)       End If     Next   End With   Application.ScreenUpdating = True End Sub ' 'BBB.xlsブックの存在チェック Function Chk_Find(wNm As String) As Boolean   Dim wBsht    As Worksheet   Dim c   '   Set wBsht = Workbooks("BBB.xls").Worksheets("Sheet1")   '   Set c = wBsht.Columns("A:A").Find(What:=wNm, LookIn:=xlValues)   If Not c Is Nothing Then     Chk_Find = True   Else     Chk_Find = False   End If End Function '< マクロ貼付方法 > '(1) Alt+F11 (ツール → マクロ → Visual Basic Editor) →「挿入」→「標準モジュール」で表示される画面に貼り付け '(2) 実行は、(F5を押す)又は、シート画面に戻って Alt+F8を押してマクロ一覧からマクロ名を選択して実行

flawbb
質問者

お礼

ご回答ありがとうございます。 マクロってまったく使ったことがなかったんですが、こういうことが出来るんですね。。。 ちょっとファイルに細工が必要そうなので(今は価格やら何やらの他のデータもゴチャゴチャ入っているので)、時間ができたら試してみます!

その他の回答 (2)

  • FEX2053
  • ベストアンサー率37% (7991/21371)
回答No.2

まず、各々のレコード(行)全部を指定して無条件で「データ」「フィルタ」 「フィルタオプションの指定」で別の場所に「重複したデータを無視する」 で抽出を掛けます。 http://www.eurus.dti.ne.jp/yoneyama/Excel/filter3.htm http://www.eurus.dti.ne.jp/~yoneyama/Excel/jituyou/jyufuku.htm こうすると、両方のデータに「存在するレコード」が各々1件ずつ抽出 されますね。種類が少なければ、後は1件づつ目視すれば済みます。 種類が多い場合は両方のレコードを同一シートに並べ(例えばA、B列 に並べたとします)、各々昇順か何かでソートしておいて =IF(A1=B1,1,0) としてコピーしてやれば、合わないデータのところで「0」に変わります ので、適宜手作業で引っ張り出せば済むかと。 合わないデータが100件程度なら、経験上こんなやり方でも、そんなに 時間は掛からないはずです。

flawbb
質問者

お礼

ご回答ありがとうございました。 各シートにある商品名にはシート内では重複はありません。 また、AAAとBBB内での商品名の数が違うのでIF・・・では求められないような気が。。。 合わないデータの件数が多分1万くらいはありそうなので、手作業は死にます(泣)

  • kokorone
  • ベストアンサー率38% (417/1093)
回答No.1

ファイルの差分を求めるのであれば、 1)http://diffdoc.add-soft.jp/download/ など有料のソフト   を使用する 2)フリーで同様のものがありますが、制限があり使えない場合が   あります。 3)各々をテキストファイルまたはCSV形式のファイルに出力・   保存した後、 http://www.vector.co.jp/soft/win95/prog/se110171.html などのフリーのテキスト差分ツールを使用する。 ※AにあってBにないものの一覧ということであれば、マクロ(VBA)でプログラミングするのが一番かと。   

flawbb
質問者

お礼

ご回答ありがとうございました。 テキストファイルのDiffを求めるソフトの存在は知ってましたが、テキストに落とすのが面倒なので(汗)最後の手段に取っておきます。

関連するQ&A