例えば、seat1に「A1に小沢」「B1に一郎」、「A2に管」「B2に直人」、「A3に野田」「B3に佳彦」・・・とあって、seat2に「A1に鳩山」「B1に由紀夫」、「A2に蓮」「B2に舫」、「A3に小沢」「B3に一郎」・・・とあった場合、2つのシートから重複している「小沢」「一郎」を抽出して、seat1の「A1の小沢」「B1の一郎」を削除する方法(関数)はありませんでしょうか?
簡単なので過去回答参考にさせていただきました。
[追記]
書き忘れましたが、マクロで消すと元に戻せません。念のためファイルをバックアップするとかシートをコピーするとかして誤動作・誤操作に備えてください。
[/追記]
Option Explicit '' 消す方のシートは現在表示しているアクティブシートの方です。 '' 比較対象のシートは"Sheet2"に固定されています。変更方法はコメントにあります。 '' 作業領域としてC桁に新しい桁を挿入して使い、使用後に削除しています。 '' 作業領域のボールドで強調されているのが重複した項目です。 '' 最後の方のコメントに従うと作業領域を消さずに残せます。 Private Sub CommandButton1_Click() Dim i As Long Dim lastRow As Long Dim res As Object Columns("C:C").Insert Shift:=xlToRight '' 比較対象のシートを変更するには下記の"Sheet2"を変更してください。 With Worksheets("Sheet2") If ActiveSheet.Name = .Name Then Exit Sub End If lastRow = .Cells(.Rows.Count, "A").End(xlUp).Row For i = 1 To lastRow Cells(i, "C").Value = .Cells(i, "A").Value & .Cells(i, "B").Value Next i End With lastRow = Cells(Rows.Count, "A").End(xlUp).Row For i = lastRow To 1 Step -1 Set res = Columns("C:C").Find(what:=Cells(i, "A").Value & Cells(i, "B").Value, _ LookIn:=xlValues, lookat:=xlWhole, MatchCase:=True, Matchbyte:=True) If Not res Is Nothing Then Cells(i, "A").Delete Shift:=xlShiftUp Cells(i, "B").Delete Shift:=xlShiftUp res.Font.Bold = True End If Next i '' 下記の行の先頭に「''」加えてコメントアウトすると作業領域が残ります。 Columns("C:C").Delete Shift:=xlShiftToLeft End Sub
消す方のシートは現在表示しているアクティブシートの方です。
比較対象のシートは"Sheet2"に固定されています。
比較対象のシートを変更するには下記の"Sheet2"を変更してください。
With Worksheets("Sheet2")
作業領域としてC桁に新しい桁を挿入して使い、使用後に削除しています。
作業領域のボールドで強調されているのが重複した項目です。
最後の方のコメントに従うと作業領域を消さずに残せます。
下記の行の様に先頭に「''」加えてコメントアウトすると作業領域が残ります。
''Columns("C:C").Delete Shift:=xlShiftToLeft
ワークシート関数だと削除というのはできないので、別のSheet3とかに抽出とかはできます。
ただ、関数で一応できることはできるのですが難しいのであまりやらないと思います。
例えば、Excel2007以降ならばcountifs関数と配列数式を使ってこんな感じ。
{=INDEX(Sheet1!A:A,SMALL(IF(COUNTIFS(Sheet2!A1:A100,Sheet1!A1:A100,Sheet2!B1:B100,Sheet1!B1:B100)>0,101,ROW(Sheet1!A1:A100)),ROW()))}
上記では100行くらいにしか対応していませんが、多くすると配列数式なので処理がかなり重くなるので現実的ではないです。
VBAの方法は簡単なので他の方にお任せします。
簡単なので過去回答参考にさせていただきました。
[追記]
書き忘れましたが、マクロで消すと元に戻せません。念のためファイルをバックアップするとかシートをコピーするとかして誤動作・誤操作に備えてください。
[/追記]
Option Explicit '' 消す方のシートは現在表示しているアクティブシートの方です。 '' 比較対象のシートは"Sheet2"に固定されています。変更方法はコメントにあります。 '' 作業領域としてC桁に新しい桁を挿入して使い、使用後に削除しています。 '' 作業領域のボールドで強調されているのが重複した項目です。 '' 最後の方のコメントに従うと作業領域を消さずに残せます。 Private Sub CommandButton1_Click() Dim i As Long Dim lastRow As Long Dim res As Object Columns("C:C").Insert Shift:=xlToRight '' 比較対象のシートを変更するには下記の"Sheet2"を変更してください。 With Worksheets("Sheet2") If ActiveSheet.Name = .Name Then Exit Sub End If lastRow = .Cells(.Rows.Count, "A").End(xlUp).Row For i = 1 To lastRow Cells(i, "C").Value = .Cells(i, "A").Value & .Cells(i, "B").Value Next i End With lastRow = Cells(Rows.Count, "A").End(xlUp).Row For i = lastRow To 1 Step -1 Set res = Columns("C:C").Find(what:=Cells(i, "A").Value & Cells(i, "B").Value, _ LookIn:=xlValues, lookat:=xlWhole, MatchCase:=True, Matchbyte:=True) If Not res Is Nothing Then Cells(i, "A").Delete Shift:=xlShiftUp Cells(i, "B").Delete Shift:=xlShiftUp res.Font.Bold = True End If Next i '' 下記の行の先頭に「''」加えてコメントアウトすると作業領域が残ります。 Columns("C:C").Delete Shift:=xlShiftToLeft End Sub
消す方のシートは現在表示しているアクティブシートの方です。
比較対象のシートは"Sheet2"に固定されています。
比較対象のシートを変更するには下記の"Sheet2"を変更してください。
With Worksheets("Sheet2")
作業領域としてC桁に新しい桁を挿入して使い、使用後に削除しています。
作業領域のボールドで強調されているのが重複した項目です。
最後の方のコメントに従うと作業領域を消さずに残せます。
下記の行の様に先頭に「''」加えてコメントアウトすると作業領域が残ります。
''Columns("C:C").Delete Shift:=xlShiftToLeft
ありがとうございました。
返信が遅くなってすみません。
がんばってやってみます。
ありがとうございました。
返信が遅くなってすみません。
がんばってやってみます。