解決済みの質問

質問No.661202
困ってます
困ってます
お気に入り投稿に追加する (0人が追加しました)
回答数6
閲覧数1555
エクセルでシート間の比較をしたいのですが。。。
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

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

回答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
投稿日時 - 2003-09-23 03:18:33
この回答を支持する
(現在0人が支持しています)
この質問は役に立ちましたか?
0人が「このQ&Aが役に立った」と投票しています

ベストアンサー以外の回答 (5)

回答No.6
#5です、またまた補足です。何度もすみません。

Sub片方()の下から14行目あたり、

>If p = 3 Then
>i = 1
>End If

を、

If p = 3 Then
i = 1
Exit Do  '←を追加
End If

としていただけると、処理時間が短縮されます。
投稿日時 - 2003-09-23 09:17:45
この回答を支持する
(現在0人が支持しています)
お礼
回答、ありがとうございます。
何回も補足していただき、とてもうれしいです。
貴重な時間をいただきました。感謝します。
投稿日時 - 2003-09-23 20:23:37
回答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

に書き換えてください。
投稿日時 - 2003-09-23 03:46:42
この回答を支持する
(現在0人が支持しています)
回答No.4
#3です。ちょっと補足を。

>セルA1から下に、空白のセルがでるまで検索、比較します。

A列に空白のセルがでてくるまで、という意味です。
B、C列に空白のセルがあってもかまいません。

あと、各々のシートに重複するデータがある場合は想定していません。
投稿日時 - 2003-09-23 03:27:19
この回答を支持する
(現在0人が支持しています)
回答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無しが判ります。
投稿日時 - 2003-09-22 22:08:41
この回答を支持する
(現在0人が支持しています)
お礼
回答ありがとうございます。
はい。私も、関数でやる時に結合してみたのですが、うまくいかなかったのです。文字数を合わせなかったからだと、気が付きました。やってみます。
投稿日時 - 2003-09-23 20:21:15
回答No.1
》2つのシート間で同一データの有無の比較がしたいのです。

 この類はExcelでする仕事ではない。データベースソフトでする仕事です。

》1)AとBに有る。
》2)Aに有って、Bに無い。
》3)Bに有って、Aに無い。

 こんな作業はいとも簡単です。できて当たり前。

 Accessをお持ちなら、それを使ったらいいけど、取っつきが悪いからね。覚えるのに暇がかかる。データベースソフトが初めてなら、「桐」をお勧めします。覚えが早いし便利だから、お金を出すだけの値打ちがあります。
投稿日時 - 2003-09-22 12:29:06
この回答を支持する
(現在0人が支持しています)
補足
回答ありがとうございます。
データベースソフトでしたら、どのようにするのですか?
簡単に教えていただけませんか?
Accessならあるのですが。。。
投稿日時 - 2003-09-22 13:02:58
別のキーワードで再検索する
もっと聞いてみる

関連するQ&A

回答募集中

この他の関連するQ&Aをキーワードで探す

別のキーワードで再検索する
-PR-

OKWaveのおすすめ情報

特集

同じカテゴリの人気Q&Aランキング

-PR-

ピックアップ

ノウハウ共有サイト

-PR-
-PR-