![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
Excel2000を使用しています。
2つのシート間で同一データの有無の比較がしたいのです。
仮に比較したいものをシートA・Bとします。
それぞれ項目として、大字・小字・地番があり、それが同じ時に同一データと判断します。
件数にすると4000~5000件ぐらいあり、関数でやってみたのですが、うまくいきません。
比較で結果としては、下記の3パターンがあります。
1)AとBに有る。
2)Aに有って、Bに無い。
3)Bに有って、Aに無い。
希望としては、新たなシートに 2)と 3)のデータのみ抽出して、そのデータが 2)なのか 3)なのかわかるようにしたいのです。宜しくお願いします。
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
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
に書き換えてください。
No.4
- 回答日時:
#3です。
ちょっと補足を。>セルA1から下に、空白のセルがでるまで検索、比較します。
A列に空白のセルがでてくるまで、という意味です。
B、C列に空白のセルがあってもかまいません。
あと、各々のシートに重複するデータがある場合は想定していません。
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無しが判ります。
回答ありがとうございます。
はい。私も、関数でやる時に結合してみたのですが、うまくいかなかったのです。文字数を合わせなかったからだと、気が付きました。やってみます。
No.1
- 回答日時:
》2つのシート間で同一データの有無の比較がしたいのです。
この類はExcelでする仕事ではない。データベースソフトでする仕事です。
》1)AとBに有る。
》2)Aに有って、Bに無い。
》3)Bに有って、Aに無い。
こんな作業はいとも簡単です。できて当たり前。
Accessをお持ちなら、それを使ったらいいけど、取っつきが悪いからね。覚えるのに暇がかかる。データベースソフトが初めてなら、「桐」をお勧めします。覚えが早いし便利だから、お金を出すだけの値打ちがあります。
参考URL:http://www.k3-soft.com/kiri9/index.html
この回答への補足
回答ありがとうございます。
データベースソフトでしたら、どのようにするのですか?
簡単に教えていただけませんか?
Accessならあるのですが。。。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excelマクロ 差分抽出の方法が知りたいです。 2 2023/03/07 13:25
- Excel(エクセル) Excelマクロの差分抽出のコードを教えていただきたいです。 2 2023/03/14 11:40
- Visual Basic(VBA) VBAで、1つのエクセルで、2つのシートからもう1つのシートに条件のある転記コードを教えてください。 1 2023/03/16 18:07
- Visual Basic(VBA) エクセルについて教えてください。 3 2023/06/28 09:11
- Excel(エクセル) マクロか関数で処理したいのですが、教えて頂けませんか。 8 2022/10/31 15:18
- Excel(エクセル) エクセルで2つの表を比較して、文字列が同じだが、その行のある値が違うものを抽出したい 1 2022/10/06 21:48
- Excel(エクセル) VBAで、シート間の転記するコードを教えてください。 4 2023/03/26 10:43
- 統計学 お世話になっています. x軸は時間(期間)y軸はある値に対する2つのグラフ比較をしますが、私個人の考 2 2023/03/30 11:42
- Excel(エクセル) Excelで、別シートの表のステータスに伴った動的な自動転記をしたいです。 2 2023/06/14 15:56
- Visual Basic(VBA) VBA 改行コードの取り方 1 2022/03/22 14:14
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
お肉の下のシートを煮込んでし...
-
エクセルを利用して、日計と累...
-
エクセル ○印がついている行を...
-
2つのシート間での重複データ...
-
EOMONTH関数の代わり
-
毎日の日計を別シートに自動で...
-
エクセルで別シート参照、デー...
-
エクセルオートフィルターした...
-
エクセルでif関数を使って、別...
-
安いフローリング用掃除シート...
-
エクセルで2つのシートに同じ名...
-
条件にマッチする行を抽出するV...
-
エクセルのシートをコピーして...
-
excelマクロで複数シート間のデ...
-
指定した条件でTRANSPOSE関数を...
-
excel シート1の奇数(偶数)...
-
Excelで複数要素からの注文管理...
-
<エクセル>エクセルでつくっ...
-
エクセル2003
-
エクセル 並べ替え(あいうえお...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
お肉の下のシートを煮込んでし...
-
エクセルを利用して、日計と累...
-
エクセルのシートをコピーして...
-
2つのシート間での重複データ...
-
毎日の日計を別シートに自動で...
-
条件にマッチする行を抽出するV...
-
エクセルで1行だけ数式が反映さ...
-
エクセルで2つのシートに同じ名...
-
指定した条件でTRANSPOSE関数を...
-
excel シート1の奇数(偶数)...
-
エクセルでフラグがたっている...
-
チュロス袋の代用
-
Excelで複数のシートに列のグル...
-
エクセル ○印がついている行を...
-
EOMONTH関数の代わり
-
EXCELで受験票を作成したい(名...
-
エクセルで○のついた項目を抽出
-
複数シートのセルの 記号の数...
-
VBA 縦のデータを横にするコード
-
複数シートの列、幅の一括変更方法
おすすめ情報