Excel VBA Удалить дубликаты в диапазоне - PullRequest
0 голосов
/ 06 ноября 2019

Я борюсь с обновлением ряда листов, содержащих основные данные.

Пользователь может обновить регистр ("TK_Register") новым элементом или изменить существующий элемент в (")EditEX ") лист. Данные на листе EditEx хранятся на уровне C32: P56 и сохраняются в следующей пустой строке листа TK_Register (столбцы от A до N)

Используя другой код, я могу вызвать все конкретные строки на основе ссылкиномер (хранится на листе EditEX в ячейках O32: O56 и на листе TK_Register в столбце M).

При запуске этого кода

  • excel получает все данные из листа EditEx C32:P56
  • Вставляет эти данные в следующую пустую строку на листе TK_Register
  • Автофильтры на основе столбца "N" для "НЕТ" (т.е. не нужно сохранять эту строку)
  • Удаляет строки, которые были отфильтрованы (это строки, которые не были использованы и содержат данные по умолчанию)
  • Нефильтрует данные

Здесь я получаю проблему. Это добавление всех данных на лист TK_Register включает в себя новые элементы, а также предыдущие элементы, которые были обновлены. Поскольку нам нужно регулярно добавлять, обновлять и изменять, когда нам нужно будет снова его редактировать, мы хотим видеть только самые последние позиции на листе EditEx.

Затем пользователь может вносить изменения в любой извызванные строки и / или добавление новой.

Мой код ниже работает только в том случае, если дублируется последний номер строки (столбец M). Если добавляется более 1 строки, она не находит дубликатов. Я знаю, что пройду этот долгий путь, но любые идеи, как я могу сделать это, будут искать каждый ссылочный номер (столбец M), который будет вставлен (будет несколько строк), если найден, обновите эту строку новыми данными, если не найдены,добавить к следующим доступным строкам.

    Sub SaveUpdatedRec()

        Dim rng4 As Range
        Set rng4 = Sheets("EditEx").Range("C32:P56")
        Sheets("TK_Register").Range("A" & Rows.Count).End(xlUp).Offset(1).Resize(rng4.Rows.Count, rng4.Columns.Count).Cells.Value = rng4.Cells.Value
        Sheets("TK_Register").Range("A1:N1000").AutoFilter field:=14, Criteria1:="NO"
        Application.DisplayAlerts = False
        Sheets("TK_Register").Range("A2:N1000").SpecialCells(xlCellTypeVisible).Delete
        Application.DisplayAlerts = True
        On Error Resume Next
        Sheets("TK_Register").ShowAllData
        On Error GoTo 0


    Sheets("AI_Register").Select
      Range("A1").Select

       Dim lrow1 As Long
       For lrow1 = Worksheets("AI_Register").Cells(Rows.Count, "M").End(xlUp).Row To 2 Step -1
           If Cells(lrow1, "M") = Cells(lrow1, "M").Offset(-1, 0) Then
              Cells(lrow1, "M").Offset(-1, 0).EntireRow.Delete
           End If

        Next lrow1

       ActiveWorkbook.RefreshAll
        Sheets("EditEx").Select
        ActiveWindow.SmallScroll Down:=-120
        Range("B13").Select

    MsgBox ("Record Updates have been Saved")

    End Sub

1 Ответ

0 голосов
/ 06 ноября 2019

Ниже приведен пример кода с использованием .RemoveDupliates, который удаляет дубликаты из столбца 1 диапазона, указанного с учетом того, что столбец имеет заголовок.

Option Explicit

Sub test()

    Dim LastroW As Long

    With ThisWorkbook.Worksheets("Sheet1")

        LastroW = .Cells(.Rows.Count, "A").End(xlUp).Row

        .Range("A1:A" & LastroW).RemoveDuplicates Columns:=1, Header:=xlYes

    End With

End Sub
...