[[20070926114924]] 『重複データ最初の行削除』(チロル) ページの最後に飛ぶ

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

 

『重複データ最初の行削除』(チロル)

 いつもお世話になっております。 
 現在自分が作っている重複行削除のコードがありまして
 今は重複行を上方向に探して最初のデータを行ごと削除
 してるのですが、今度は上から探して最初のデータを削除
 させたいのですが、足踏みしてしまいました。

 >For i = Cells(65536, 2).End(xlUp).Row To 2 Step -1
  >Set Rng = Range("B2", Range("B65536").End(xlUp))
 ここの部分をEnd(xlDown)にして、行や列の数字を
 いじってるですが、どなたか御教授下さいませんか?
 
 Sub 重複データ削除()

 Dim i As Long
 Dim Rng As Range
 Dim lngJyufuku As Long

 For i = Cells(65536, 2).End(xlUp).Row To 2 Step -1
  Set Rng = Range("B2", Range("B65536").End(xlUp))
  lngJyufuku = WorksheetFunction.CountIf(Rng, Cells(i, 2).Value)

  If lngJyufuku > 1 Then
   Cells(i, 2).EntireRow.Delete
  End If
   Set Rng = Nothing
 Next i

 End Sub

 Excel2000 WindowsXP


 上から?最初のデータを削除?
 重複が2つ以上の場合は、最初のデータだけ?
 (seiya)

 説明不足ですみません。
 重複する行は最大2行だけなのです。
 下からつめて行っても見つけた重複行の上の行にある方
 を削除できればと思ってます。(チロル)

 あまり関心はしませんが...
 上からループ

 Sub test()
 Dim i As Long
 For i = 2 To Cells(Rows.Count, "b").End(xlUp).Row
     If (Cells(i,"b").Value <> "") * (WorksheetFunction.CountIf(B:B,Cells(i,"b").Value)>1) Then
         Rows(i).Delete
         i = i - 1
     End If
 Next
 End Sub

 空いている列に数式を挿入して =CountIf(B$2:B2,B2)=1
 オートフィルターで削除するとか...
 (seiya)

 seiyaさんありがとうございました。
 ちょっとだけエラーが出たのですが
 た..た..多分..みたいな感じで少し修正させてもらって試したら
 やりたかった事ができました。感謝いたします。(チロル)

 >If (Cells(i,"b").Value <> "") * (WorksheetFunction.CountIf(B:B,Cells(i,"b").Value)>1) Then
 ↓
 If (Cells(i, "b").Value <> "") * (WorksheetFunction.CountIf(Range("B:B"),
 Cells(i, "b").Value) > 1) Then

 おっと、失礼しました。
 (seiya)

 「Rng2」と「konkaino」を用意して
   Rng2には、B2から今回の行までの範囲を設定
   konkaino に、Rng2の範囲で Cells(i, 2) を数え
   lngJyufuku と一致しなかったら削除
 と言う考え方にすると、下からループしても
 下にある物が残りそうです。

	[A]	lngJyu	konka	
[1]	【イ】	fuku	ino	
[2]	  A	2	1   ←削除
[3]	  B	1	1	
[4]	  C	2	1   ←削除
[5]	  A	2	2	
[6]	  C	2	2
       2行目の式	↑=COUNTIF($A$2:$A$6,A2)	
	    2行目の式	↑=COUNTIF($A$2:A2,A2)

 (HANA)


 HANAさんありがとうございました。色々方法はあるのですね。
 勉強になります。自分のメモ帳にしっかり書き留めさせて
 いただきます。(チロル)

 ごめんなさい、もうこられないと思って
 自分のメモ帳にしてました。(笑)
 こんな感じになります。

 Sub 重複データ先の方を削除()

 Dim i As Long
 Dim Rng As Range, Rng2 As Range            'Rng2 追加
 Dim lngJyufuku As Long, konkaino As Long   'konkaino 追加

 For i = Cells(65536, 2).End(xlUp).Row To 2 Step -1
  Set Rng = Range("B2", Range("B65536").End(xlUp))
  lngJyufuku = WorksheetFunction.CountIf(Rng, Cells(i, 2).Value)
  Set Rng2 = Range("B2", Range("B" & i))                        '当行までのB列の範囲
  konkaino = WorksheetFunction.CountIf(Rng2, Cells(i, 2).Value) '当行までの出現回数

  If lngJyufuku <> konkaino Then
   Cells(i, 2).EntireRow.Delete
  End If
   Set Rng = Nothing
   Set Rng2 = Nothing
 Next i

 End Sub

 (HANA)

コメント返信:

[ 一覧(最新更新順) ]


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