重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

sheetAとsheetBそれぞれのA列に千件くらいのデータが入っています。
かなり重複もあります。

今回マクロでSheetCのA列に重複されないデータのみ抜き出したいと思います。

どのような記述になるのでしょうか?

A 回答 (10件)

No9さんので重複してないデータの抽出は完了ですが、


補足にあった

> SheetAにありSheetBにない
S> heetBにありSheetAにないものを区別して抜き出したいのです。よろしくお願いします。

は充足できてないですね。
No9のコードをそのままお借りして以下のようにすると、Sheet3で列を変えて表示できますので区別できます。

Sub test()
Dim gyoA As Integer 'A最大値
Dim gyoB As Integer 'B最大値
Dim i As Integer 'ループ用
Dim ii As Integer 'ループ用
Dim iii As Integer '記入カウンタ
Dim flg '一致ものがあるかのフラグ

iii = 1 '記入開始行
gyoA = Sheet1.Range("A1").End(xlDown).Row
gyoB = Sheet2.Range("A1").End(xlDown).Row

For ii = 1 To gyoB Step 1
flg = 0
For i = 1 To gyoA Step 1
If Sheet1.Cells(i, 1) = Sheet2.Cells(ii, 1) Then
flg = 1
End If
Next
If flg = 0 Then
Sheet3.Cells(iii, 1) = Sheet2.Cells(ii, 1)
iii = iii + 1
End If
Next

iii = 1 '記入開始行を1にどす
For i = 1 To gyoA Step 1
flg = 0
For ii = 1 To gyoB Step 1
If Sheet1.Cells(i, 1) = Sheet2.Cells(ii, 1) Then
flg = 1
End If
Next
If flg = 0 Then
Sheet3.Cells(iii, 2) = Sheet1.Cells(i, 1)'2列目に表示
iii = iii + 1
End If
Next

End Sub
    • good
    • 0
この回答へのお礼

完璧です。
ありがとうございました。

お礼日時:2004/11/18 13:16

わけわからなくなると思いましたので全部書きます



dim gyoA as integer  'A最大値
dim gyoB as integer  'B最大値
dim i as integer 'ループ用
dim ii as integer 'ループ用
dim iii as integer '記入カウンタ
dim flg '一致ものがあるかのフラグ

iii=1 '記入開始行
gyoA=sheet1.range("A1").end(xldown).row
gyoB=sheet2.range("A1").end(xldown).row
for ii = 1 to gyoB step 1
flg=0
for i = 1 to gyoA step 1
    if sheet1.cells(i,1)=sheet2.cells(ii,1) then
flg=1
end if
next
if flg=0 then
sheet3.cells(iii,1)=sheet2.cells(ii,1)
iii=iii+1
end if
next
for i = 1 to gyoA step 1
flg=0
for ii = 1 to gyoB step 1
    if sheet1.cells(i,1)=sheet2.cells(ii,1) then
flg=1
end if
next
if flg=0 then
sheet3.cells(iii,1)=sheet1.cells(i,1)
iii=iii+1
end if
next
    • good
    • 0
この回答へのお礼

ありがとうございます。
できました。

お礼日時:2004/11/18 10:54

ごめんなさい



#2の追加でした
    • good
    • 0

#4のところ



最後のnextの後ろに

for i = 1 to gyoA step 1
flg=0
for ii = 1 to gyoB step 1
    if sheet1.cells(i,1)=sheet2.cells(ii,1) then
flg=1
end if
next
if flg=0 then
sheet3.cells(iii,1)=sheet1.cells(i,1)
iii=iii+1
end if
next

を追加してください

この回答への補足

やはり
Selection.Sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _
:=xlPinYin, DataOption1:=xlSortNormal

がエラーになります。
「実行時エラー1004
アプリケーション定義またはオブジェクト定義のエラーです」となります。

補足日時:2004/11/17 19:57
    • good
    • 0

やはりループでまわすしかないですね

    • good
    • 0

またまた  手打ちなものでまちがいが




sheet()はsheetsに変更

for i = gyoA+gyoB to 1 step -1

for i = gyoA+gyoB to 2 step -1

に変更してください。なお後者のマクロは
SheetAの中のデータも重複を取ります

この回答への補足

なんどもありがとうございます。

変更をして実行したところ
Selection.Sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _
:=xlPinYin, DataOption1:=xlSortNormal
がエラーになります。

また、この方法だと、AにありBにない。およびその逆の区別がつかないのでは?

補足日時:2004/11/17 18:58
    • good
    • 0

がんがん追加してしまってすいません



dim gyoA as integer  'A最大値
dim gyoB as integer  'B最大値
gyoA=sheets(1).range("A1").end(xldown).row
gyoB=sheet(2).range("A1").end(xldown).row

sheets(1).range("A1:A"&gyoA).copy
sheet(3).range("A1").pastespecial
sheet(2).range("A1:A"&gyoB).copy
sheet(3).range("A"&gyoA+1).pastespecial

sheets(3).activate
Columns("A:A").Select
Selection.Sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _
:=xlPinYin, DataOption1:=xlSortNormal

for i = gyoA+gyoB to 1 step -1
if cells(i,1)=cells(i-1,1) then
cells(i,1).delete shift:=xlup
end if
next

が早いかな
    • good
    • 0

#1です



両方でしたね

変数を初期化して

全部をコピー、for・・・のみをひっくり返して追加すれば大丈夫です

ちょっと時間がかかるのが難点
マクロだとそうなるのかな
    • good
    • 0

まず変数を持たせます



dim gyoA as integer  'A最大値
dim gyoB as integer  'B最大値
dim i as integer 'ループ用
dim ii as integer 'ループ用
dim iii as integer '記入カウンタ
dim flg '一致ものがあるかのフラグ

iii=1 '記入開始行
gyoA=sheet1.range("A1").end(xldown).row
gyoB=sheet2.range("A1").end(xldown).row
for ii = 1 to gyoB step 1
flg=0
for i = 1 to gyoA step 1
    if sheet1.cells(i,1)=sheet2.cells(ii,1)
flg=1
end if
next
if flg=0 then
sheet3.cells(iii,1)=sheet2.cells(ii,1)
iii=iii+1
end if
next

でどうでしょうか
    • good
    • 0
この回答へのお礼

ありがとうございます。
if sheet1.cells(i,1)=sheet2.cells(ii,1)のあとにThenをつけて、片っ方はうまくいきました。

お礼日時:2004/11/17 19:05

sheetAとBの項目を教えてください。


あと完全一致かも教えてください

この回答への補足

項目はありません。一列目のみです。

両シートともA列3行目以下に途切れなく数値あるいは文字が入っています。
完全一致で調べたいです。

SheetAにありSheetBにない
SheetBにありSheetAにないものを区別して抜き出したいのです。よろしくお願いします。

補足日時:2004/11/17 17:27
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!