Excel как удалить повторяющиеся строки макрос

Удаление повторяющихся значений (дубликатов) в диапазоне ячеек с помощью кода VBA Excel. Метод Range.RemoveDuplicates — синтаксис, параметры, примеры.

Метод Range.RemoveDuplicates

Метод Range.RemoveDuplicates предназначен в VBA Excel для удаления повторяющихся значений по столбцам в заданном диапазоне ячеек рабочего листа. Строки с обнаруженными дубликатами удаляются целиком.

Синтаксис метода Range.RemoveDuplicates

expression. RemoveDuplicates (Columns , Header),

где expression — переменная или выражение, возвращающее объект Range.

Параметры метода Range.RemoveDuplicates

Наименование Описание
Columns Массив индексов столбцов, содержащих ячейки с повторяющимися значениями. Обязательный параметр. Тип данных – Variant.
Header Указывает, содержит ли первая строка диапазона заголовок, который не участвует в поиске дубликатов:

  • xlNo — первая строка списка не содержит заголовок (значение по умолчанию);
  • xlYes — первая строка диапазона содержит заголовок;
  • xlGuess — VBA Excel решает сам, есть ли у списка заголовок.

Необязательный параметр. Тип данных – XlYesNoGuess.

Метод работает как с круглыми скобками, в которые заключены параметры, так и без них. Если требуется указать несколько столбцов в параметре Columns, следует использовать функцию Array, например, Array(2, 3).

Примеры удаления дубликатов

Исходная таблица для всех примеров

Исходная таблица для удаления дубликатов

По третьей колонке легко определить, какие строки были удалены.

Пример 1
Удаление повторяющихся значений по первому столбцу:

Range("A1:C10").RemoveDuplicates 1

или

Range(Cells(1, 1), Cells(10, 3)).RemoveDuplicates (1)

Второй вариант позволяет использовать вместо индексов строк и столбцов переменные. Наличие или отсутствие скобок, в которые заключен параметр Columns, на работу метода не влияет.

Результат:

Пример 2
Удаление дубликатов по первому столбцу с указанием, что первая строка содержит заголовок:

Range("A1:C10").RemoveDuplicates 1, xlYes

Результат:

Здесь мы видим, что первая строка не учитывалась при поиске повторяющихся значений.

Пример 3
Удаление дубликатов по первому и второму столбцам:

Range("A1:C10").RemoveDuplicates Array(1, 2)

Результат:

Обратите внимание, что при удалении повторяющихся значений по нескольким столбцам, будут удалены дубли только тех строк, в которых во всех указанных столбцах содержатся одинаковые значения. В третьем примере удалены «лишние» строки с дублями значений по двум первым столбцам: Корова+Лягушка, Свинья+Бурундук и Овца+Собака.


Смотрите, как отобрать уникальные значения из списка в VBA Excel с помощью объекта Collection и объекта Dictionary.

 

Добрый день! Подскажите код для удаления дубликатов строк по условию одинакового значение во всех 12 столбцах.
На данный момент применяю код

Private Sub CommandButton1_Click()

With Sheets(«Материалы»)
       Set tng = Range(«A1», Range(«l1»).End(xlDown))
       tng.RemoveDuplicates Columns:=Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12), Header:=xlYes
   End With

End Sub

но он работает только если кнопка расположена на листе «Детали», а мне нужно чтобы код работал при нажатии кнопки на форме которая запускается с другого листа.
Заранее спасибо

 

MikeVol

Пользователь

Сообщений: 229
Регистрация: 20.10.2020

Ученик

Лидия Кунакова, Доброго времени суток. Так вставьте в вашей форме кнопку далее скопируйте ваш код в форму. И самое главное когда будете кнопку вставлять на форме обратите внимание как она будет называться. И переименуйте Private Sub CommandButton1_Click() именем вашей вновь вставленной кнопки. К примеру Private Sub CommandButton8_Click(). И будет вам счастье.

 

Ігор Гончаренко

Пользователь

Сообщений: 13746
Регистрация: 01.01.1970

#3

04.12.2022 17:46:45

это

Код
Set tng = .Range("A1", .Range("l1").End(xlDown))

будет работать на листе Материалы, но что вам нужно не знаю (не смог прочитать в обьяснениях задачи)

Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!

 

MikeVol

Пользователь

Сообщений: 229
Регистрация: 20.10.2020

Ученик

#4

04.12.2022 17:49:36

Ігор Гончаренко, тс скорее всего это надо

Цитата
Лидия Кунакова написал:
а мне нужно чтобы код работал при нажатии кнопки на форме

. Наверное есть некая форма уже. Выше я уже подсказал.

 

Ham13

Пользователь

Сообщений: 88
Регистрация: 02.08.2016

MikeVol, Ее код будет срабатывать на активном листе

Iгор все верно написал, чтобы срабатывало на листе Материалы (With Sheets(«Материалы»))
Нужно добавить точку
При чем тут лист Детали сложно понять, любой активный лист должен срабатывать.
Но без файла тяжело понять, может автор вообще другой смысл закладывал

 

New

Пользователь

Сообщений: 4581
Регистрация: 06.01.2013

#6

04.12.2022 18:25:10

Цитата
Лидия Кунакова написал:
Подскажите код для удаления дубликатов строк по условию одинакового значение во всех 12 столбцах.

Для получения быстрой и качественной помощи на форуме нужно всегда подготавливать небольшой файл-пример, где показать данные какие есть и можно рядом или на соседнем листе — как хочу получить. Иначе либо не получите помощь совсем, либо разговоров на месяц, либо предложенные варианты помощи вам не подойдут и т.д. и т.д. и т.д.

 

MikeVol

Пользователь

Сообщений: 229
Регистрация: 20.10.2020

Ученик

#7

05.12.2022 17:34:17

Ham13,

Цитата
Лидия Кунакова написал:
но он работает только если кнопка расположена на листе «Детали»

вам что нибудь это говорит? И да, он

Цитата
Ham13 написал:
код будет срабатывать на активном листе

так как

Цитата
Лидия Кунакова написал:
он работает только если кнопка расположена на листе «Детали»

Соответственно код запускается с активного листа потому что кнопка CommandButton1 находится на листе Детали, а сами действия происходит с листом Материалы
Но каким-то образом

Цитата
Лидия Кунакова написал:
На данный момент применяю код

даже без точки. Да тут спорный вопрос возникает без

Цитата
New написал:
небольшой файл-пример

, согласен.

 

Дмитрий(The_Prist) Щербаков

Пользователь

Сообщений: 14181
Регистрация: 15.09.2012

Профессиональная разработка приложений для MS Office

#8

05.12.2022 17:46:17

Цитата
MikeVol написал:
Но каким-то образом даже без точки

тут как раз все предельно ясно. Именно потому что без точки, все срабатывает на том листе, в котором код. Это действие по умолчанию для всех модулей классов — если для объекта не указан явно родитель, то в качестве родителя используется сам модуль класса. В нашем случае это сам лист. Вот и получается:
Set tng = Лист_в_котором_код.Range(«A1», Лист_в_котором_код.Range(«l1»).End(xlDown))
Если интересно, здесь расписывал все подробно и последовательно:

Как обратиться к диапазону из VBA

там много букав, но возможно, пригодится для общего понимания.

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…

 

Дмитрий(The_Prist) Щербаков

Пользователь

Сообщений: 14181
Регистрация: 15.09.2012

Профессиональная разработка приложений для MS Office

#9

05.12.2022 17:50:19

Цитата
Лидия Кунакова написал:
нужно чтобы код работал при нажатии кнопки на форме которая запускается с другого листа

так и запишите свой код в виде функции с передачей нужного листа:

Код
Function RemDupes(ws as worksheet)
       Set tng = ws.Range("A1", ws.Range("l1").End(xlDown))
       tng.RemoveDuplicates Columns:=Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12), Header:=xlYes
End Function

А по кнопке с любого листа запускайте:

Код
Private Sub CommandButton1_Click()
'передаем в функцию лист с именем "Материалы". Именно в нем будут удалены дубликаты
Call RemDupes(Sheets("Материалы"))
End Sub

Или если надо удалять дубли на листе «Детали»:

Код
Private Sub CommandButton1_Click()
'передаем в функцию лист с именем "Детали". Именно в нем будут удалены дубликаты
Call RemDupes(Sheets("Детали"))
End Sub

Изменено: Дмитрий(The_Prist) Щербаков05.12.2022 17:51:11

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…

 

Всем большое спасибо! Помогло. Когда вносила корректировки в код забыла про Range(«l1») . Дмитрий, вам также спасибо за ссылку на статью, я обязательно ознакомлюсь.

 

MikeVol

Пользователь

Сообщений: 229
Регистрация: 20.10.2020

Ученик

#11

10.12.2022 21:11:02

Лидия Кунакова, Вот это вы Оперативно отвечаете на свои темы… Не прошло и пол года…

sashgera

4 / 4 / 5

Регистрация: 19.09.2011

Сообщений: 391

1

Удалить строки, в ячейках которых есть дубли

05.10.2016, 17:32. Показов 3202. Ответов 9

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

Здравствуйте
Есть макрос, который удаляет ячейки в столбце A с дублями
Помогите, пожалуйста, как сделать, чтобы удалялась не только ячейка, но и вся строка
И чтобы макрос выполнялся с пятой строки

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Sub DelDuplicate()
k = Application.WorksheetFunction.CountA(Columns(1))
Set tR = Range(Cells(1, 1), Cells(k, 1))
m = tR.Rows.Count
For i = 1 To m
    If Application.WorksheetFunction.CountIf(tR, Cells(i, 1)) > 1 Then
        tR.Rows(i).Delete
        i = 1
        m = m - 1
    End If
Next
End Sub

Вложения

Тип файла: rar 123.rar (12.5 Кб, 3 просмотров)



0



KoGG

5590 / 1580 / 406

Регистрация: 23.12.2010

Сообщений: 2,366

Записей в блоге: 1

05.10.2016, 17:57

2

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Sub DelDuplicate()
k = Application.WorksheetFunction.CountA(Columns(1))
Set tR = Range(Cells(1, 1), Cells(k, 1))
m = tR.Rows.Count
For i = 5 To m
    If Application.WorksheetFunction.CountIf(tR, Cells(i, 1)) > 1 Then
        Rows(i).Delete
        i = i - 1
        m = m - 1
    End If
Next
End Sub



0



4 / 4 / 5

Регистрация: 19.09.2011

Сообщений: 391

05.10.2016, 18:14

 [ТС]

3

KoGG, спасибо! Подскажите, пожалуйста, где изменить, чтобы поиск дублей был не в столбце A, а в столбце B



0



4 / 4 / 5

Регистрация: 19.09.2011

Сообщений: 391

05.10.2016, 19:04

 [ТС]

4

KoGG, если в столбце, в котором идет поиск дублей, встречается ячейка с пустым значением, то после этого макрос не выполняется
Пожалуйста, можно это исправить?



0



Svsh2015

132 / 108 / 22

Регистрация: 23.06.2015

Сообщений: 339

05.10.2016, 20:07

5

добрый еще вариант макроса для #4,кнопки test и повтор на листе Лист1

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Sub test()
   Dim z, i&: z = Range("A5:C" & Range("A" & Rows.Count).End(xlUp).Row).Value
 With CreateObject("scripting.dictionary"): .CompareMode = 1
  For i = 1 To UBound(z)
  If Not IsEmpty(z(i, 2)) Then
      .Item(z(i, 2)) = .Item(z(i, 2)) + 1
   End If
  Next
 For i = UBound(z) To 1 Step -1
 If Not IsEmpty(z(i, 2)) Then
   If .Item(z(i, 2)) > 1 Then Rows(i + 4).Delete
 End If
 Next
End With
End Sub

Вложения

Тип файла: rar zzzzz_5_10_2016.rar (14.6 Кб, 13 просмотров)



0



4 / 4 / 5

Регистрация: 19.09.2011

Сообщений: 391

05.10.2016, 20:22

 [ТС]

6

Svsh2015, спасибо, но удаляются все дубли, а нужно один из повторов оставить



0



Svsh2015

132 / 108 / 22

Регистрация: 23.06.2015

Сообщений: 339

05.10.2016, 21:07

7

В файл-примере не нашел как надо,для#4 попробуйте протестировать макрос use,кнопки use и повтор

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
Sub use()
  Dim z, i&, j&, m&
    z = Range("A5:C" & Range("A" & Rows.Count).End(xlUp).Row).Value
    With CreateObject("scripting.dictionary"): .CompareMode = 1
    For i = 1 To UBound(z)
         If .exists(z(i, 1)) = False Then
         m = m + 1: .Item(z(i, 1)) = m: For j = 1 To UBound(z, 2): z(m, j) = z(i, j): Next
         End If
   Next
   Cells.ClearContents
  Range("A5").Resize(.Count, UBound(z, 2)).Value = z
   End With
End Sub

Вложения

Тип файла: rar aaaaa_5_10_2016.rar (14.7 Кб, 10 просмотров)



0



4 / 4 / 5

Регистрация: 19.09.2011

Сообщений: 391

05.10.2016, 22:29

 [ТС]

8

Svsh2015, большое спасибо!



0



1 / 1 / 0

Регистрация: 08.08.2016

Сообщений: 6

06.10.2016, 12:11

9

А не пробовали встроенными функциями экселя воспользоваться? Данные -> Удалить дубликаты.
Я сейчас поигрался с этой функцией — если поставить галочку на автоматический выбор диапазона, а в следующем окошке поставить галочку только напротив столбца, из которого надо удалять дубли, то эксель удаляет всю строку с дублем



0



33 / 1 / 0

Регистрация: 30.06.2016

Сообщений: 84

15.02.2019, 11:05

10

Удалил



0



I have a worksheet with two columns: Date and Name. I want to delete all rows that are exact duplicates, leaving only unique values.

Here is my code (which doesn’t work):

Sub DeleteRows()

Dim rng As Range
Dim counter As Long, numRows As Long

With ActiveSheet
    Set rng = ActiveSheet.Range("A1:B" & LastRowB)
End With
numRows = rng.Rows.Count

For counter = numRows To 1 Step -1
    If rng.Cells(counter) Like rng.Cells(counter) - 1 Then
        rng.Cells(counter).EntireRow.Delete
    End If
Next

End Sub

It’s «Like rng.Cells(counter)-1» that seems to be the cause- I get «Type Mismatch».

Community's user avatar

asked Jun 7, 2013 at 16:25

4

There’s a RemoveDuplicates method that you could use:

Sub DeleteRows()

    With ActiveSheet
        Set Rng = Range("A1", Range("B1").End(xlDown))
        Rng.RemoveDuplicates Columns:=Array(1, 2), Header:=xlYes
    End With

End Sub

answered Jun 7, 2013 at 16:40

fbonetti's user avatar

fbonettifbonetti

6,5823 gold badges33 silver badges32 bronze badges

5

The duplicate values in any column can be deleted with a simple for loop.

Sub remove()
Dim a As Long
For a = Cells(Rows.Count, 1).End(xlUp).Row To 1 Step -1
If WorksheetFunction.CountIf(Range("A1:A" & a), Cells(a, 1)) > 1 Then Rows(a).Delete
Next
End Sub

Martijn Pieters's user avatar

answered Nov 23, 2016 at 17:04

kadrleyn's user avatar

kadrleynkadrleyn

3341 silver badge5 bronze badges

How to delete duplicate values from a data set in all versions of Excel. This includes Excel 2003 and earlier and also Excel 2007 and later.

For Excel 2007 and later, we can use a simple feature within the program, but for Excel 2003 and earlier, we must use a macro, which is provided below.

Sections:

Remove Duplicates in Excel 2007 and Later Versions

Remove Duplicates in Excel 2003 and Earlier Versions

Notes

Remove Duplicates in Excel 2007 and Later Versions

  1. Select a cell within the data set that contains the duplicates:
    46c6394e920b3f5b4db0d1372a9e4276.png
  2. Go to the Data tab and then click Remove Duplicates:
    a6a08bc6ddc1a6a19a8ffdac1b2cccb4.png
  3. You should now see a small window open.
    (Also, Excel should have selected the entire data set, in our example, A1:B6; if it did not select the correct data set, then you need to hit the Cancel button and select the entire data set yourself before clicking the Remove Duplicates button.)
    In the small window, you need to select which column you want to check for duplicates.  You can select one column to check or multiple columns.
    If there are headers or titles for your data and those were also selected by Excel, then click the checkbox next to where it says My data has headers.
    52656e996fb3f971fcc046acf6d0a982.png
    In this example, my data does not have headers and I only want to search Column A for duplicates, so I uncheck Column B and then hit OK.
    eab992ae667abd393b6bf7d442f9ff3f.png
  4. Excel will remove the duplicates and you will see a window telling you how many duplicates were removed.
    072ecbf385c090f9709c1584f299bc66.png
  5. Here is the final result:
    4cc99716cce79b5f3a951e22049d705c.png

Notice that Excel removed the entire row of data and not just the data in Column A.

If you had selected Column A and Column B in Step 3, then no value would have been removed.  This is because, Excel looks at all the values in all the selected columns to see if there are duplicates across them instead of individually in each column.  That is important if you want to perform more complex duplicate removal in Excel.

If you made an error, hit Ctrl + Z on the keyboard to undo the duplicate removal and start over.

Remove Duplicates in Excel 2003 and Earlier Versions

To remove duplicate values from Excel 2003 and earlier versions, we need to use a Macro.

Here are the steps to install and use the macro:

  1. When in Excel, hit Alt + F11 to go to the VBA Editor window.
    af1c90450830464dd645244f8aa01919.png
  2. Go to Insert > Module
    06b33b865792cae573fa201d23b135a1.jpg
  3. You should now see a small window open and that is where we will input the macro:
    143ef6ae89f161d303b40ae69fb9225a.jpg
  4. In that window, copy and paste this macro:
    Public Sub DeleteDuplicateRows()
    ' This macro will delete all duplicate rows which reside under
    ' the first occurrence of the row.
    '
    'Use the macro by selecting a column to check for duplicates
    'and then run the macro and all duplicates will be deleted, leaving
    'the first occurrence only.
    
    Dim R As Long
    Dim N As Long
    Dim V As Variant
    Dim Rng As Range
    
    On Error GoTo EndMacro
    
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    
    Set Rng = Application.Intersect(ActiveSheet.UsedRange, _
                        ActiveSheet.Columns(ActiveCell.Column))
    
    Application.StatusBar = "Processing Row: " & Format(Rng.Row, "#,##0")
    
    N = 0
    
    For R = Rng.Rows.Count To 2 Step -1
    
        If R Mod 500 = 0 Then
        
            Application.StatusBar = "Processing Row: " & Format(R, "#,##0")
        
        End If
        
        V = Rng.Cells(R, 1).Value
        
        If V = vbNullString Then
        
            If Application.WorksheetFunction.CountIf(Rng.Columns(1), vbNullString) > 1 Then
        
                Rng.Rows(R).EntireRow.Delete
        
                N = N + 1
        
            End If
        
        Else
        
            If Application.WorksheetFunction.CountIf(Rng.Columns(1), V) > 1 Then
        
                Rng.Rows(R).EntireRow.Delete
        
                N = N + 1
        
            End If
        
        End If
    
    Next R
    
    EndMacro:
    
    Application.StatusBar = False
    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic
    MsgBox "Duplicate Rows Deleted: " & CStr(N)
    
    End Sub
    
    
  5. It should now look something like this:
    aa2c5c5194d57c4582ea8dfc03b0078e.jpg
    (If there was a problem performing the copy/paste from this site, make sure the single quotation marks in front of the green text are indeed basic normal single quotation marks; you can do this by deleting and retyping them in the VBA Editor window here. Or, just download the sample file attached to this tutorial and copy the macro from there.)
  6. Hit Alt + F11 to go back to the Excel window and select a cell within the column of duplicate values that you would like to remove:
    d0b2ae56dfdd1501646bae3310bd8d79.png
  7. Hit Alt + F8 to see the macro.
    ca666b8d85185a16598c40b4e85565ee.png
  8. Select the one called DeleteDuplicateRows and then hit the Run button.  Once you do that a small window will appear telling you how many duplicates were removed:
    22114079c9bebda1bb5cb35f1373eb9a.png
  9. Hit OK and you’re done!
    2a1dcee644ee9945161ad0a0dc097813.png

This method works pretty much the same, though is not as robust, as the Remove Duplicates feature for Excel 2007 and later.

You cannot «undo» this action by hitting Ctrl + Z or anything else, so, be aware that whatever the macro removes is irreversible.  Have a backup of the original data made before running any macro in case an error happens.

If you want to keep this macro in your workbook, make sure to save the workbook in a format compatible with macros; when you go to save the file, Excel will tell you if there is an issue, and, if you don’t see a warning, it should save just fine in the spreadsheet.

Follow this tutorial to run the macro when you click a button in the worksheet.

Notes

If you are in Excel 2007 and later, use the built-in method to remove duplicates since it is so much easier compared to having to install a macro and since you can undo the action if you make a mistake.

If you use the macro, you cannot undo any changes it makes to the worksheet; always make a backup of your data before running a macro.

Be careful removing duplicates on spreadsheets with a lot of data spread-out throughout the worksheet because it might remove data to the right or left of your current data set.  The best thing to do is to have a separate worksheet that only contains the data that you want to check for duplicates.  This way, you are certain to not mess with any other data.

Make sure to download the accompanying spreadsheet for this tutorial.  It contains the macro listed here and some sample data for you to try everything out.

Similar Content on TeachExcel

Simple Excel Function to Combine Values in All Versions of Excel — UDF

: Excel function that combines values from multiple cells or inputs using a delimiter — work…

Prevent Duplicate Values in Excel

Tutorial:
I show you how to prevent duplicate values being entered into Excel using Data Validation…

Easily Compare Duplicate Values in Excel

Tutorial: Here, I’ll show you a simple technique to quickly and easily compare large lists of duplic…

Highlight Duplicate Values in Excel

Tutorial:
How to highlight duplicate values in a list. Also, how to arrange those values next to ea…

SUMIF — Sum Values Based on Criteria in Excel

Tutorial:
The SUMIF function allows you to sum values based on a single criteria. This function wor…

Delete Duplicate Rows

Macro: This macro will delete rows that appear twice in a list or worksheet. If two cells are…

Subscribe for Weekly Tutorials

BONUS: subscribe now to download our Top Tutorials Ebook!

В этом руководстве будет показано, как удалить дубликаты с помощью метода RemoveDuplicates в VBA.

Метод RemoveDuplicates

Когда данные импортируются или вставляются на лист Excel, они часто могут содержать повторяющиеся значения. Возможно, вам потребуется очистить входящие данные и удалить дубликаты.

К счастью, в объекте Range в VBA есть простой метод, который позволяет это сделать.

1 Диапазон («A1: C8»). Столбцы RemoveDuplicates: = 1, Header: = xlYes

Синтаксис:

RemoveDuplicates ([Столбцы], [Заголовок]

  • [Столбцы] — Укажите, в каких столбцах проверяются повторяющиеся значения. Все столбцы совпадают, чтобы считаться дубликатами.
  • [Заголовок] — Есть ли у данных заголовок? xlNo (по умолчанию), xlYes, xlYesNoGuess

Технически оба параметра необязательны. Однако, если вы не укажете аргумент Columns, никакие дубликаты не будут удалены.

Значение по умолчанию для заголовка — xlNo. Конечно, лучше указать этот аргумент, но если у вас есть строка заголовка, маловероятно, что строка заголовка будет соответствовать как дубликат.

Замечания по использованию RemoveDuplicates

  • Перед использованием метода RemoveDuplicates необходимо указать используемый диапазон.
  • Метод RemoveDuplicates удалит все строки с найденными дубликатами, но сохранит исходную строку со всеми значениями.
  • Метод RemoveDuplicates работает только со столбцами, а не со строками, но для исправления этой ситуации можно написать код VBA (см. Ниже).

Образцы данных для примеров VBA

Чтобы показать, как работает пример кода, используются следующие образцы данных:

Удалить повторяющиеся строки

Этот код удалит все повторяющиеся строки только на основе значений в столбце A:

123 Sub RemoveDupsEx1 ()Диапазон («A1: C8»). Удалить дубликаты столбцов: = 1, заголовок: = xl ДаКонец подписки

Обратите внимание, что мы явно определили диапазон «A1: C8». Вместо этого вы можете использовать UsedRange. UsedRange определит последнюю использованную строку и столбец ваших данных и применит RemoveDuplicates ко всему этому диапазону:

123 Sub RemoveDups_UsedRange ()Столбцы ActiveSheet.UsedRange.RemoveDuplicates: = 1, заголовок: = xlYesКонец подписки

UsedRange невероятно полезен, избавляя вас от необходимости явно определять диапазон.

После запуска этого кода ваш рабочий лист теперь будет выглядеть так:

Обратите внимание, что, поскольку был указан только столбец A (столбец 1), дубликат «Яблоки», ранее находившийся в строке 5, был удален. Однако количество (столбец 2) отличается.

Чтобы удалить дубликаты, сравнивая несколько столбцов, мы можем указать эти столбцы с помощью метода Array.

Удалить дубликаты, сравнивая несколько столбцов

123 Sub RemoveDups_MultColumns ()Столбцы ActiveSheet.UsedRange.RemoveDuplicates: = Массив (1, 2), Заголовок: = xl ДаКонец подписки

Массив сообщает VBA о необходимости сравнения данных с использованием столбцов 1 и 2 (A и B).

Столбцы в массиве не обязательно должны располагаться в последовательном порядке.

123 Sub SimpleExample ()Столбцы ActiveSheet.UsedRange.RemoveDuplicates: = Массив (3, 1), Заголовок: = xl ДаКонец подписки

В этом примере столбцы 1 и 3 используются для повторяющегося сравнения.

В этом примере кода для проверки дубликатов используются все три столбца:

123 Sub SimpleExample ()Столбцы ActiveSheet.UsedRange.RemoveDuplicates: = Массив (1, 2, 3), Заголовок: = xl ДаКонец подписки

Удаление повторяющихся строк из таблицы

Удалить дубликаты можно точно так же применить к таблице Excel. Однако синтаксис немного отличается.

1234 Sub SimpleExample ()Столбцы ActiveSheet.ListObjects («Table1»). DataBodyRange.RemoveDuplicates: = Array (1, 3), _Заголовок: = xlYesКонец подписки

Это приведет к удалению дубликатов в таблице на основе столбцов 1 и 3 (A и C). Однако он не приводит в порядок цветовое форматирование таблицы, и вы увидите цветные пустые строки, оставленные в нижней части таблицы.

Удаление дубликатов из массивов

Если вам нужно удалить повторяющиеся значения из массива, конечно, вы можете вывести свой массив в Excel, использовать метод RemoveDuplicates и повторно импортировать массив.

Однако мы также написали процедуру VBA для удаления дубликатов из массива.

Удаление дубликатов из строк данных с помощью VBA

Метод RemoveDuplicates работает только со столбцами данных, но, если подумать «нестандартно», вы можете создать процедуру VBA для работы со строками данных.

Предположим, что ваши данные на листе выглядят так:

У вас есть те же дубликаты, что и раньше, в столбцах B и E, но вы не можете удалить их с помощью метода RemoveDuplicates.

Ответ состоит в том, чтобы использовать VBA для создания дополнительного рабочего листа, копирования данных в него, транспонируя их в столбцы, удаляя дубликаты, а затем копируя их обратно, перемещая обратно в строки.

12345678910111213141516171819202122232425262728293031323334353637 Sub DuplicatesInRows ()’Отключите обновление экрана и предупреждения — мы хотим, чтобы код работал плавно, и пользователь не видел’что здесь происходитApplication.ScreenUpdating = FalseApplication.DisplayAlerts = False’Добавить новый рабочий листТаблицы.Добавить после: = ActiveSheet’Назовите новый рабочий лист’ CopySheet ‘ActiveSheet.Name = «CopySheet»‘Скопируйте данные из исходного листаТаблицы («DataInRows»). UsedRange.Copy’Активируйте новый созданный листТаблицы («Копия»). Активировать’Вставить, транспонировать данные так, чтобы они теперь располагались в столбцахActiveSheet.Range («A1»). PasteSpecial Paste: = xlPasteAll, Operation: = xlNone, SkipBlanks: = _Ложь, Транспонировать: = Истина’Удалите дубликаты столбцов 1 и 3Столбцы ActiveSheet.UsedRange.RemoveDuplicates: = Массив (1, 3), Заголовок _: = xlДа’Очистить данные на исходном листеТаблицы («DataInRows»). UsedRange.ClearContents’Скопируйте столбцы данных из нового созданного листаТаблицы («Copysheet»). UsedRange.Copy’Активировать исходный листТаблицы («DataInRows»). Активировать’Вставить транспонировать недублирующиеся данныеActiveSheet.Range («A1»). PasteSpecial Paste: = xlPasteAll, Operation: = xlNone, SkipBlanks: = _Ложь, Транспонировать: = Истина’Удалить копию листа — больше не требуетсяТаблицы («Копия»). Удалить’Активировать исходный листТаблицы («DataInRows»). Активировать’Включите обновление экрана и предупрежденияApplication.ScreenUpdating = TrueApplication.DisplayAlerts = TrueКонец подписки

В этом коде предполагается, что исходные данные в строках хранятся на листе под названием «DataInRows».

После запуска кода ваш рабочий лист будет выглядеть так:

Дубликат «Яблоки» в столбце E был удален. Пользователь вернулся в чистое положение, без каких-либо посторонних рабочих листов, и весь процесс прошел гладко, без мерцания экрана или предупреждающих сообщений.

Понравилась статья? Поделить с друзьями:

А вот еще интересные статьи:

  • Excel как указать диапазон весь столбец
  • Excel как удалить повторяющиеся значения в двух столбцах
  • Excel как указать диапазон в таблице столбец
  • Excel как удалить повторы в ячейках
  • Excel как указать автора

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии