エクセルでシート間の比較をしたいのですが。。。
Excel2000を使用しています。
2つのシート間で同一データの有無の比較がしたいのです。
仮に比較したいものをシートA・Bとします。
それぞれ項目として、大字・小字・地番があり、それが同じ時に同一データと判断します。
件数にすると4000~5000件ぐらいあり、関数でやってみたのですが、うまくいきません。
比較で結果としては、下記の3パターンがあります。
1)AとBに有る。
2)Aに有って、Bに無い。
3)Bに有って、Aに無い。
希望としては、新たなシートに 2)と 3)のデータのみ抽出して、そのデータが 2)なのか 3)なのかわかるようにしたいのです。宜しくお願いします。
投稿日時 - 2003-09-22 11:34:05
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
投稿日時 - 2003-09-23 03:18:33
このQ&Aは役に立ちましたか?
0人が「このQ&Aが役に立った」と投票しています
回答(6)
(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無しが判ります。
投稿日時 - 2003-09-22 22:08:41
回答ありがとうございます。
はい。私も、関数でやる時に結合してみたのですが、うまくいかなかったのです。文字数を合わせなかったからだと、気が付きました。やってみます。
投稿日時 - 2003-09-23 20:21:15
》2つのシート間で同一データの有無の比較がしたいのです。
この類はExcelでする仕事ではない。データベースソフトでする仕事です。
》1)AとBに有る。
》2)Aに有って、Bに無い。
》3)Bに有って、Aに無い。
こんな作業はいとも簡単です。できて当たり前。
Accessをお持ちなら、それを使ったらいいけど、取っつきが悪いからね。覚えるのに暇がかかる。データベースソフトが初めてなら、「桐」をお勧めします。覚えが早いし便利だから、お金を出すだけの値打ちがあります。
参考URL:http://www.k3-soft.com/kiri9/index.html
投稿日時 - 2003-09-22 12:29:06
回答ありがとうございます。
データベースソフトでしたら、どのようにするのですか?
簡単に教えていただけませんか?
Accessならあるのですが。。。
投稿日時 - 2003-09-22 13:02:58