-1

列 A から K までのデータセットがあり、列 A、D、F、J、および K からデータの重複行を見つけたいと考えています。

次のコードがあります。

Sub RemoveDupes2()

Dim r As Long, lr As Long
 Application.ScreenUpdating = False
  lr = Cells.Find(What:="*", SearchDirection:=xlPrevious, SearchOrder:=xlByRows).Row
   With Range("L2:L" & lr)
     .Formula = "=ROW()"
      .Value = .Value
   End With
  Range("A2:L" & lr).Sort Key1:=Range("A2"), Order1:=1, Key2:=Range("B2"), Order2:=1
  With Range("M2:M" & lr)
   .FormulaR1C1 = "=RC[-12]&RC[-11]&RC[-6]&RC[-4]&RC[-2]"
   .Value = .Value
    End With
  With Range("N2:N" & lr)
   .FormulaR1C1 = "=COUNTIF(R1C13:RC[-1],RC[-1])"
      .Value = .Value
  End With
    For r = lr To 2 Step -1
     If Cells(r, 14).Value > 2 Then
        Rows(r).Delete
     ElseIf Cells(r, 14).Value = 2 Then
      Cells(r - 1, 1).Resize(, 7).Font.Bold = True
      Rows(r).Delete
     End If
    Next r
    lr = Cells.Find(What:="*", SearchDirection:=xlPrevious, SearchOrder:=xlByRows).Row
      Range("A2:L" & lr).Sort Key1:=Range("L2"), Order1:=1
     Range("L2:N" & lr).ClearContents
      Application.ScreenUpdating = True
      End Sub

現在、コードはデータセット全体を削除していますが、私は VBA の初心者ユーザーであるため、その理由がわかりません。

https://www.dropbox.com/s/otgkk1igcd2995t/duplicates.xlsx

4

1 に答える 1

0

最初ので、次のようWithに変更してみてください。

.FormulaR1C1 = "=RC[-12]&RC[-11]&RC[-6]&RC[-4]&RC[-2]"  

.FormulaR1C1 = "=RC[-12]&RC[-9]&RC[-7]&RC[-3]&RC[-2]"

ただし、上記のコードを変更しなくてもデータセット全体が削除されないため、別の問題が発生する可能性があります (私の場合、Excel 2007 を使用)。

于 2013-09-05T20:36:34.577 に答える