• ベストアンサー

エクセルでシート間の比較をしたいのですが。。。

Excel2000を使用しています。 2つのシート間で同一データの有無の比較がしたいのです。 仮に比較したいものをシートA・Bとします。 それぞれ項目として、大字・小字・地番があり、それが同じ時に同一データと判断します。 件数にすると4000~5000件ぐらいあり、関数でやってみたのですが、うまくいきません。 比較で結果としては、下記の3パターンがあります。 1)AとBに有る。 2)Aに有って、Bに無い。 3)Bに有って、Aに無い。 希望としては、新たなシートに 2)と 3)のデータのみ抽出して、そのデータが 2)なのか 3)なのかわかるようにしたいのです。宜しくお願いします。

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

  • ベストアンサー
  • sakenomo
  • ベストアンサー率52% (35/67)
回答No.3

VBAでやってみました。 エクセルのウィンドウ左下にあるシートタブの、左から1番目と2番目のシートを比較します。 各々のシートのA列に大字、B列に小字、C列に地番を置いてください。 セルA1から下に、空白のセルがでるまで検索、比較します。 1)はSub両方()で、 2)3)はSub片方()でどうぞ。 Sub 両方() Dim c As Range, c2 As Range, c3 As Range, p As Byte Dim w As Worksheet, f As Long Set c = Worksheets(1).Range("A1:C1") Set c2 = Worksheets(2).Range("A1:C1") Set w = Worksheets.Add(, Worksheets(2)) w.Range("A1").Value = Worksheets(1).Name & _ " と、 " & Worksheets(2).Name & " 両方にある" Set c3 = w.Range("A2:C2") Do Do While c2.Columns(1).Value <> "" For p = 1 To 3 If c.Columns(p).Value <> c2.Columns(p).Value Then Exit For If p = 3 Then c3.Offset(f, 0).Value = c.Value f = f + 1 Exit Do End If Next p Set c2 = c2.Offset(1, 0) Loop Set c2 = Worksheets(2).Range("A1:C1") Set c = c.Offset(1, 0) Loop Until c.Columns(1).Value = "" End Sub Sub 片方() Dim c As Range, c2 As Range, c3 As Range, p As Byte Dim w As Worksheet, f As Long, i As Byte, n As Byte, k As Byte Set w = Worksheets.Add(, Worksheets(2)) w.Range("A1").Value = Worksheets(1).Name & " だけにある" Set c3 = w.Range("A2:C2") For n = 1 To 2 If n = 1 Then k = 2 Else k = 1 f = 0 w.Range("E1").Value = Worksheets(n).Name & " だけにある" Set c3 = w.Range("E2:G2") End If Set c = Worksheets(n).Range("A1:C1") Set c2 = Worksheets(k).Range("A1:C1") Do i = 0 Do For p = 1 To 3 If c.Columns(p).Value <> c2.Columns(p).Value Then Exit For If p = 3 Then i = 1 End If Next p Set c2 = c2.Offset(1, 0) Loop Until c2.Columns(1).Value = "" If i = 0 Then c3.Offset(f, 0).Value = c.Value f = f + 1 End If Set c2 = Worksheets(k).Range("A1:C1") Set c = c.Offset(1, 0) Loop Until c.Columns(1).Value = "" Next n End Sub

その他の回答 (5)

  • sakenomo
  • ベストアンサー率52% (35/67)
回答No.6

#5です、またまた補足です。何度もすみません。 Sub片方()の下から14行目あたり、 >If p = 3 Then >i = 1 >End If を、 If p = 3 Then i = 1 Exit Do  '←を追加 End If としていただけると、処理時間が短縮されます。

2003tenn
質問者

お礼

回答、ありがとうございます。 何回も補足していただき、とてもうれしいです。 貴重な時間をいただきました。感謝します。

  • sakenomo
  • ベストアンサー率52% (35/67)
回答No.5

3#4#です。また補足を。 見た目は同じでも、セル中の文字列の前後にスペースがあると、うまくヒットしません。スペースが入っていることが考えられる場合は、各々のSubプロシージャの If c.Columns(p).Value <> c2.Columns(p).Value Then Exit For を、 If Trim(c.Columns(p).Value) <> Trim(c2.Columns(p).Value) Then Exit For に書き換えてください。

  • sakenomo
  • ベストアンサー率52% (35/67)
回答No.4

#3です。ちょっと補足を。 >セルA1から下に、空白のセルがでるまで検索、比較します。 A列に空白のセルがでてくるまで、という意味です。 B、C列に空白のセルがあってもかまいません。 あと、各々のシートに重複するデータがある場合は想定していません。

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

(1)優秀なデータベースソフトを使う(#1のご回答では桐なら易しく出来るそうです) (2)VBA等のプログラムが組めて組む のでないと難しいと思います。関数などでは、出来ても極く複雑になって、実質出来ないといえるでしょう。 敢えてやるなら、A列(大字)B列(小字)C列(番地)の 各々の内容的な最大文字数を決めて、左寄せ的に実質内容(文字)をセットし、残り(右後尾)最大文字数まではスペースを入れた文字列を作ることです。 A列の最大文字数を全角7文字と決めたとする。 山田北と入っているセルを、山田北△△△△(△は全角スペースを表す)と言う内容のセルにする。 元禄新田と入っているセルを、元禄新田△△△と言う内容のセルにする。 同じことをB、C列について行う。 そして=A1&B1&C1のようにして、結合したセルを D列ならD列に作る。 シートAとシートBの両方でそれを行う。 なぜコンな面倒なことが必要かピンとこなければ、この方法もプログラムも無理でしょう。 これでマッチングキーが出来あがります。 そしてVLOOKUP関数(第4引数はFALSE)を使って、シートBのD列を表(テーブル)と見たてて、シートAのD列の値で、表引きをする。見つからない時は#N/Aが出るので、シートAにあり、シートBになしが判ります。 逆にシートBより上記をやればシートBありシートA無しが判ります。

2003tenn
質問者

お礼

回答ありがとうございます。 はい。私も、関数でやる時に結合してみたのですが、うまくいかなかったのです。文字数を合わせなかったからだと、気が付きました。やってみます。

回答No.1

》2つのシート間で同一データの有無の比較がしたいのです。  この類はExcelでする仕事ではない。データベースソフトでする仕事です。 》1)AとBに有る。 》2)Aに有って、Bに無い。 》3)Bに有って、Aに無い。  こんな作業はいとも簡単です。できて当たり前。  Accessをお持ちなら、それを使ったらいいけど、取っつきが悪いからね。覚えるのに暇がかかる。データベースソフトが初めてなら、「桐」をお勧めします。覚えが早いし便利だから、お金を出すだけの値打ちがあります。

参考URL:
http://www.k3-soft.com/kiri9/index.html
2003tenn
質問者

補足

回答ありがとうございます。 データベースソフトでしたら、どのようにするのですか? 簡単に教えていただけませんか? Accessならあるのですが。。。

関連するQ&A

  • excelで2つのシートを比較し、新しいシートへ

    初めまして。 同じような内容で、いくつか調べさせていただいたのですが、その内容を自分の内容に照らし合わせてトライしてみたのですが、うまくいかなかったため、質問させていただきます。 Excel2010 での関数について質問です。 1:シートが2つあります。((1)と(2)とします。)   両方のシートには1000行くらいのデータが両方入っています。列の項目は一緒です。 2:シート(3)に(1)と(2)のB列を比較して、   ・(1)に合って、(2)にない時は(1)のデータ   ・(1)にも(2)にもある場合は(2)のデータ   ・(2)にのみある場合は(2)のデータ   をシート(3)に作ります。 *この際、(1)と(2)の両方にBの数値があった場合には、さらにA列を比較し、A列とB列がシート(1)と(2)で完全に一致した場合には(2)のデータ。Bの数値が一緒でも、A列のデータが違う場合には(1)も(2)もシート3に表示したいです。 イメージとして画像を添付しました。 シート3に関数を入れるだけで上記条件が表示できればいいのですが、出来なければシート1,2にkeyとなる列を挿入して、それを軸としてシート3にするものなのか。 元々の理解が薄いため、購入した本も今回はどの関数を使用すべきか判断が付きませんでした。 同じような質問がある。とお叱りがあるかもしれませんが、いくつか試してみて出来なかったため質問させていただきます。 今回、急ぎで解決が必要なため、初めて登録し投稿させていただきます。 追加で必要な情報等ありましたら、ご指摘いただけますと幸いです。 宜しくお願い致します。

  • エクセルでの複数シートの比較

    【シート1】 A B C D 1 A社 B社 C社 D社 2 50 30 20 80 3 あ い う え 4 aa bb cc dd 【シート2】 A B C D 1 A社 B社 C社 D社 2 50 30 20 80 3 あ い う こ 4 aa bbb cc dd こういった風に、基本的に同じデータ構造で作られたデータがあった時に 2つのシートで、入力されてるデータが違うかをチェックしたい時、 (ここではD3とB4のセルのデータが書き換わってる) どういった風なやり方が考えられますか? 方法としては、関数、マクロ、VBA等あると思いますが、 当方初心者に毛のはえた程度のレベルですので、 関数ぐらいしか分かりません(-_-;) ●同一ブック内にあるシートの比較 ●別ブック内にあるシートの比較   の2種類が知りたいです。 ○ここではD3とB4のセルの内容が違うということが分かればいいのです。  (D3・・・【シート1】え、【シート2】こ)←ここまで分かると必要はないです。 よろしくお願い致します。

  • エクセルとアクセスの比較です。

    エクセルとアクセスの比較です。 仮に、関数をセットしてエクセルシート上で結果を出すものと、同様な関数で、アクセス上で結果を出すのと、どちらが早いのでしょうか??アクセスにエクセルと同じ作業をさせるってことですが・・ ただし、データ抽出では無く、関数による計算です、もちろんパソコンも同じとしてです・・

  • EXCEL ワークシート間のデータ比較

    EXCELのワークシート間のデータ比較について教えて下さい。  A.XLSとBワークシート(新)とCワークシート(旧)の特定の列のデータを比較したいと思っています。  Bワークシート(新)とCワークシート(旧)の比較に関して Bワークシート(新)には、Cワークシート(旧)のデータと比較すると 一致するもの、追加されたもの、削除されたものが含まれています。  Bワークシート(新)の値をCワークシート(旧)の値を全て比較すると頭では分かっているのですが、関数のみの機能で対応できませんか?

  • Excel2010でシートAとシートBとの比較

    よろしくお願いします。 Excel2010を使用しています。 シートA(マスターデータ)とシートB(ランダムデータ)のリストを比較して シートAのデータからシートBのデータを取り除いたデータを抽出したいです。 シートA(マスターデータ) A列   B列 111111 田中一郎 222222 田中二郎 333333 田中三郎 444444 田中四郎 シートB(ランダムデータ) A列   B列 222222 田中二郎 444444 田中四郎 この場合、抽出したいのは 111111 田中一郎 333333 田中三郎 の2名です。 いろいろネットで調べてトライしてみたのですがなかなかうまくいきませんでした。 Excelは少し苦手ですががんばりますのでよろしくお願いします。

  • エクセルで異なるシートのデータを比較したり、コピーしたりしたい

    お世話になっております。 エクセルとはほとんど初対面といった状態で、四苦八苦している状況です。 今やりたいことは、下記のようなことです。 実現方法やアドバイスなど、何でもいいので教えてください。 宜しくお願いします。 シートA,シートBがある。 シートAは今回取込んだデータ。 シートBはこれまで取込んだ累計データ。 2つのシートの項目は同じで、複数列ある。 その中にキーとなる列がある。 (例:項目番号,項目名称,説明,etc 項目番号がキー) (1)まず、シートAのデータを一旦消去し、CSVファイルを読み込む。 (2)次に、シートBの既存のデータとシートAのデータを比較する。  シートAにあってシートBにないデータは追加する。  シートAにあってシートBにもあるデータは上書きする。 (2)の方法が分りません。 シートAにあるデータがシートBにあるのかどうかと言うところはAdvancedFilterと言う関数を使って出来たのですが、追加/上書きと言うところが出来ません。 AdvancedFilter以外にもっと使いやすい関数があるのでしょうか? それとも根本的にもっと違ったやり方があるのでしょうか? ちなみに、別のデータベースを使うとかは不可です。 エクセルでやらないといけない仕様なのです。 宜しくお願いします。

  • 並び替えがしたいのですが。。。

    Excel2000を使用しています。 文字列として入力している地番を、数値の昇順に並び替えをしたいのです。どうしたらいいのでしょうか? 地番を文字列としているのは、一つのセルに地番を"-"で区切って入力しています。地番の入力例としては、1-1,10-1,20-1です。そのセルを数値として入力出来ればいいのですが、"1-1"を例にすると1月1日になってしまうので、文字列として入力しています。文字列のセルを昇順に並び替えをすると、1→10→100→2→20…となってしまいます。数値の昇順(1→2→10→20→100)にするには、どうしたらいいでしょうか? 関数を使って"-"の前と後で抜き取り、並び替えすることも考えたのですが、優先キーが3つまでなので困ってます。大字・小字・地番で並び替えしたいのです。 出来れば、件数が3000~5000件程ありますので、そのまま文字列セルの状態で昇順になると嬉しいです。 よろしくお願いします。

  • Excel VBA で二つのシートを比較抽出

    Excel VBA で二つのシートを比較して合致するレコードを別のシートに抽出する方法について 下記ホームページのコードを利用させていただきました。 https://okwave.jp/qa/q5917011.html ●fax2シート B列(検索順)  セル1 A    2 B    3 D    4 C ●fax3シート( 比較抽出結果)  セル1 A    2 B    3 C    4 D 比較抽出結果が検索順にするにはどのようにコードを記述すればよいか教えていただけますか。

  • ExcelでAシートとBシートの比較

    ExcelでAという正しいシートがあります。中味は大きなテーブルです。 Bシートも最終的にはAシート=Bシートの形にしたいのですが、諸事情でBの方は行が多かったり少なかったり、或いは、数値が異なっていたりします。列数は大丈夫です。 そこで、AとBを比較し、データがおかしいBの行にエラーを返したいのですが、何か適当な関数をご存知の方教えて下さい。 (例) 【Aシート】(正) 商品コード・商品名・単価・数量・価格 ab13467…シャツ…1,500…2…3,000 hj28888…スカート…2,000…3…6,000 【Bシート】 商品コード・商品名・単価・数量・価格 ab13467…シャツ…1,500…2…5,000 ←(エラーを出す)  hj28888…スカート…2,000…3…6,000 (※Aの商品コードは重複データなし、Bの商品コードは存在しない又は重複の可能性ありです。 Bは入手経路が異なる為に一部データがおかしくなっています。) 以上、わかりにくいかもしれませんが、何か手がかりでも頂ければと思います。但し、マクロは解らないので関数でお願いします。

  • エクセルのシートの比較

    ご教示ください。 以下のAとBのシート(別ファイルでも可)の各行を比較して、AとBのシートのD列に結果を表示させるにはどのような関数を使えばよいでしょうか? (”|”はセルの区切りです。D列の表示はシートの何行目かが分かれば良く、例示のものでなくとも構いません) シートA |犬|いぬ|dog| |猫|ねこ|cat| |鳥|とり|bird| シートB |猿|さる|monkey| |鳥|とり|bird| |猫|ねこ|kat| ↓比較後 シートA |犬|いぬ|dog|シートBなし| |猫|ねこ|cat|シートBなし| |鳥|とり|bird|シートBライン2| シートB |猿|さる|monkey|シートAなし| |鳥|とり|bird|シートAライン3| |猫|ねこ|kat|シートAなし| 以上よろしくお願いいたします。

専門家に質問してみよう