[[20060830080148]] 『2シート間での重複データの削除』(タツ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『2シート間での重複データの削除』(タツ)
 お願いします。
 Sheet1に製作完了品のデータがあり、Sheet2に出荷品の製品番号データがあります。
 Sheet1とSheet2を比較し、重複しているものがあればSheet1のデータを削除するには
 どうしたらよいでしょう?

 Sheet1(300行くらいあります)
   A     B  C   D
 1 製品番号 品名 材質 個数 
 2 22255  パネル P   2
 3 22266  フック K   5
 4 23555  ローラ F   2
 5 28687  パネル P   6

 Sheet2(100行くらいあります)
   A    
 1 製品番号  
 2 22255  
 3 58977  
 4 56988
 5 22266

 重複をチェックし、重複していたらSheet1のデータを行ごと削除。
    ↓↓結果↓↓
    A     B  C   D
 1 製品番号 品名 材質 個数 
 2 23555  ローラ F   2
 3 28687  パネル P   6
 4 
 5 

 よろしくお願いいたします。

  マクロでの考え方です。(夕焼)

 シート2のA列データを上から
シート1のA列データの下方から比較して
同じならその行を削除する作業を
シート2のA列データの上から繰返す。
  以上をコードで記述

 夕焼さん、ありごとうございます。
 マクロは、作ったことがありません。
 マクロ以外で、可能な方法はございますか?(タツ)


 不一致のものを抽出するものは、既にご承知ですので、別のものを書きます。
[[20050616153320]]

 1.Sheet1のA1:A5を選択し、データ、フィルタ、フィルタオプションの設定として、
   リスト範囲に$A$1:$D$5、検索条件範囲にSheet2!$A$1:$A$5を指定し、OKをクリック。
 2.Sheet2!$A$1:$A$5と一致したものが抽出されますので、この例では、2行目と3行目を
   右クリックして、行の削除。
 3.データ、フィルタ、すべて表示。

 このような手順で削除できます。                   (LOOKUP)

 フィルタオプションで実行する方法です。下記のログの方法を踏襲します。
[[20050616153320]] 『複数シートで重複データの削除の仕方教えて下さい』(拓)
 
F2へあらかじめ次の数式を入力しておきます。
=COUNTIF(Sheet2!A:A,Sheet1!A2)=0
Sheet1のA1を選択した状態で
メニューのデータ>フィルタ>フィルタオプションの設定 ダイアログを表示。
次のような設定をします。
 
抽出先    指定した範囲
リスト範囲  (Sheet1のリスト範囲を選択:例では$A$1:$D$5)
検索条件範囲 $F$1:$F$2
抽出範囲   $G$1
 
上記設定をしてOKとしますとG:JへSheet2に製品番号がないリストが抜き出されます。
	A	B	C	D	E	F	G	H	I	J
1	製品番号	品名	材質	個数			製品番号	品名	材質	個数
2	22255	パネル	P	2		FALSE	23555	ローラ	F	2
3	22266	フック	K	5			28687	パネル	P	6
4	23555	ローラ	F	2						
5	28687	パネル	P	6						
 
旧リストを新リストと置き換えるなりしてください。
(みやほりん)(-_∂)b


 マクロ以外ということなので,参考になりませんが
マクロコードを作成してみました。(夕焼)
 「マクロは、作ったことがありません」ということ
ですが,出来上がったマクロコードがあれば,ただ
コピーして所定の場所に貼り付けるだけです。

 参考に,説明してみます。

 下記のコード(Subから  End sub まで)をコピーして,
ワークシートの下のシート名を右クリックして,
「コードの表示」をクリックします。
すると,VBAの画面になりますので
 この画面の上部メニュで,挿入--->標準モジュール  と
クリックして表示されたシートに複写してマクロが埋め込まれ
ます。(マクロの入ったEXCELワークシートになります。)
  マクロを実行するには
通常のワークシートで上部メニュ--->ツール-->
 マクロ--->マクロで先ほどの複写したマクロ(この場合test)を
クリックすれば,マクロが実行されます。
  興味なかったら,読み流してください。

 Sub test()

 lastrow2 = Worksheets(2).Cells(Rows.Count, 1).End(xlUp).Row
 lastrow1 = Worksheets(1).Cells(Rows.Count, 1).End(xlUp).Row
 For i = 1 To lastrow2
  For j = lastrow1 To 2 Step -1
     If Worksheets(2).Cells(i, 1) = Worksheets(1).Cells(j, 1) Then
  Worksheets(1).Rows(j).Delete
   End If
 Next
 Next

 End Sub

補足

 このコードを一度,埋め込めば
 シート1,シート2 のデータが変化しても
(つまり,それぞれの末尾行が日々変化したりしても),
一切手直しせずにそのまま,マクロをクリックするだけで
結果が得られます。


 LOOKUPさん、ありがとうございます。感謝いたします。

 みやほりんさん、ありがとうございます。
 =COUNTIF(Sheet2!A:A,Sheet1!A2)=0 ←ここでシート2を選択させるのですね?
 やっと理解できました。(to LOOKUPさん)

 夕焼さん、ありがとうございます。

 いずれの方法も希望通りのものですので、使い勝手等検討し利用させていただきます。
 お付き合いくださり感謝いたします。(タツ)

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.