人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

エクセルの関数の質問です。2つのシートにAとBの列に100行分のデータが入力されています。重複しているデータを抽出して一方のシートから重複データを削除するにはどうしたらいいのでしょうか?
例えば、seat1に「A1に小沢」「B1に一郎」、「A2に管」「B2に直人」、「A3に野田」「B3に佳彦」・・・とあって、seat2に「A1に鳩山」「B1に由紀夫」、「A2に蓮」「B2に舫」、「A3に小沢」「B3に一郎」・・・とあった場合、2つのシートから重複している「小沢」「一郎」を抽出して、seat1の「A1の小沢」「B1の一郎」を削除する方法(関数)はありませんでしょうか?

●質問者: yooshii
●カテゴリ:コンピュータ
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● SALINGER

ワークシート関数だと削除というのはできないので、別の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の方法は簡単なので他の方にお任せします。


2 ● TransFreeBSD
ベストアンサー

簡単なので過去回答参考にさせていただきました。

[追記]

書き忘れましたが、マクロで消すと元に戻せません。念のためファイルをバックアップするとかシートをコピーするとかして誤動作・誤操作に備えてください。

[/追記]

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
◎質問者からの返答

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

返信が遅くなってすみません。

がんばってやってみます。

関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ