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

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

 

rango13

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

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

#1

16.07.2015 07:40:26

Всем привет!

Нужно удалить все повторяющиеся(и пустые) строки(без дубликатов) на основании первого столбца. Удаленные строки остаются пустыми.
ДО:

Скрытый текст

ПОСЛЕ:

Скрытый текст

Сначала использовал встроенную функцию поиска одинаковых значений в выделенном тексте, немного доработал, но результата всё равно нет.

Код
Sub Макрос1()
'
' Макрос1 Макрос
' Сначала макрос ищет одинаковые строки в первом столбце и когда находит - помечает их цветом(как и значения внутри ячейки).
' Затем макрос проходит от последней ячейки снизу до самой первой в поисках ячеек в первом столбце, которые закрашены определенным цветом. 
' Их-то он и должен удалять. Но не удаляет.

    Columns("A:A").Select
    Selection.FormatConditions.AddUniqueValues
    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
    Selection.FormatConditions(1).DupeUnique = xlDuplicate
    With Selection.FormatConditions(1).Interior
        .PatternColorIndex = xlAutomatic
        .Color = 13551615
        .TintAndShade = 0
    End With
    
    For i = (ActiveSheet.UsedRange.Row - 1 + ActiveSheet.UsedRange.Rows.Count) To 1 Step -1
        If    (Selection.Cells(i, 1).Interior.Color = 13551615) Then
              Selection.Rows(i).Delete Shift:=xlUp
        End If
    Next i
    Selection.FormatConditions(1).StopIfTrue = False
End Sub
 

SAS888

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

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

#2

16.07.2015 07:51:29

Можно так:

Код
Sub qq()
    Dim x As Range, i As Long
    For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row
        If Application.CountIf([A:A], Cells(i, 1)) > 1 Or Cells(i, 1) = "" Then _
        If x Is Nothing Then Set x = Rows(i) Else Set x = Union(x, Rows(i))
    Next
    If Not x Is Nothing Then x.Delete
End Sub

Изменено: SAS88816.07.2015 07:55:10

Чем шире угол зрения, тем он тупее.

 

rango13

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

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

#3

16.07.2015 08:11:02

Код
Sub qq()
' Задаём переменную
    Dim x As Range, i As Long


' Запускаем цикл, который идёт с первой строки по последнюю
    For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row
'  Здесь только понял, что если просматриваемые строки в первом столбце >1(это как?) или пусты, тогда _(что это значит?)
        If Application.CountIf([A:A], Cells(i, 1)) > 1 Or Cells(i, 1) = "" Then _
' Второй цикл выполняется, если условие предыдущего верно. Если значение переменной "x" пусто, значит присваиваем ей номер строки, иначе что?
        If x Is Nothing Then Set x = Rows(i) Else Set x = Union(x, Rows(i))
    Next
' Если значение переменной "x" не пусто, тогда значение "x" удаляется.
    If Not x Is Nothing Then x.Delete
End Sub

Если Вас не затруднит, можете описать? Пытаюсь сам разобраться, но пока плохо получается.

 

SAS888

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

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

#4

16.07.2015 08:22:25

Цикл здесь один. Проходим по всем ячейкам столбца «A», проверяем требуемые условия, формируем диапазон строк для последующего удаления.
И если этот диапазон есть, то удаляем.
Тот же код с комментариями:

Код
Sub qq()
'Определяем иеременные
    Dim x As Range, i As Long
'Организуем цикл от 1-ой до последней заполненной строки в 1-ом столбце
    For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row
'Если количество ячеек в столбце "A", содержащих текущее значение, больше 1, либо ячейка пуста, то...
        If Application.CountIf([A:A], Cells(i, 1)) > 1 Or Cells(i, 1) = "" Then _
'Если в "x" пусто, то присваиваем "x" текущую строку. Иначе - добавляем ее к существующему "x"
        If x Is Nothing Then Set x = Rows(i) Else Set x = Union(x, Rows(i))
    Next
'Если в "x" не пусто, то удаляем диапазон "x"
    If Not x Is Nothing Then x.Delete
End Sub

Изменено: SAS88816.07.2015 08:24:47

Чем шире угол зрения, тем он тупее.

 

Слэн

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

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

я бы заметил , что countif — это тоже цикл, с перебором всех заполненных ячеек между прочим, на каждом шаге цикла, правда с этим трудно бороться.. словари побыстрее проверку осуществляют — их можно задействовать
и проверка на каждом шаге if not is nothing тоже не слишком экономно — проверять можно до первого присваивания, а затем уже не имеет смысла. Да в коде будет два цикла, но последовательных, а не вложенных, и с тем же суммарным количеством шагов..

Изменено: Слэн16.07.2015 11:15:14

 

Слэн

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

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

#6

16.07.2015 11:22:49

да, и оператор or в if then заставляет делать обязательно две проверки, тогда как исполнитья может только одно из условий — эффективнее делать:

Код
if Cells(i, 1) <> "" Then
   if Application.CountIf([A:A], Cells(i, 1)) > 1 then
      ...
   endif
endif

Живи и дай жить..

 

TheBestOfTheBest

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

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

Excel 2010 +PLEX +SaveToDB +PowerQuery

В #1 а почему удалены все строки со значением 1? разве не должно остаться хотя бы одной?

Неизлечимых болезней нет, есть неизлечимые люди.

 

Юрий М

Модератор

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

Контакты см. в профиле

#8

16.07.2015 12:01:29

Нет:

Цитата
rango13 написал:
Нужно удалить все повторяющиеся(и пустые) строки(без дубликатов)
 

Спасибо знатокам за данный код. А возможно ли в данном случае сделать так, чтобы оставалась хотя бы одна строка из найденных дубликатов?

P.S. макрорекодер в данном случае не помогает, т.к. стандартная remove duplicates сдвигает ячейки вверх, заполняя пустые, и ячейки в строке теряют взаимосвязанность по данным. А настройки «оставить ячейки найденных дубликатов пустыми» не наблюдается=.

Изменено: Кирилл Блинов31.08.2020 20:35:02
(дополнение)

 

vikttur

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

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

#10

31.08.2020 23:40:17

Создайте отдельную тему

In this Article

  • RemoveDuplicates Method
  • RemoveDuplicates Usage Notes
    • Sample Data for VBA Examples
    • Remove Duplicate Rows
    • Remove Duplicates Comparing Multiple Columns
    • Removing Duplicate Rows from a Table
    • Remove Duplicates From Arrays
    • Removing Duplicates from Rows of Data Using VBA

This tutorial will demonstrate how to remove duplicates using the RemoveDuplicates method in VBA.

RemoveDuplicates Method

When data is imported or pasted into an Excel worksheet, it can often contain duplicate values.  You may need to clean the incoming data and remove duplicates.

Fortunately, there is an easy method within the Range object of VBA which allows you to do this.

Range(“A1:C8”).RemoveDuplicates Columns:=1, Header:=xlYes

Syntax is:

RemoveDuplicates([Columns],[Header]

  • [Columns] – Specify which columns are checked for duplicate values. All columns much match to be considered a duplicate.
  • [Header] – Does data have a header? xlNo (default), xlYes, xlYesNoGuess

Technically, both parameters are optional. However, if you don’t specify the Columns argument, no duplicates will be removed.

The default value for Header is xlNo. Of course it’s better to specify this argument, but if you have a header row, it’s unlikely the header row will match as a duplicate.

RemoveDuplicates Usage Notes

  • Before using the RemoveDuplicates method, you must specify a range to be used.
  • The RemoveDuplicates method will remove any rows with duplicates found, but will keep the original row with all values.
  • The RemoveDuplicates method only works on columns and not on rows, but VBA code can be written to rectify this situation (see later).

Sample Data for VBA Examples

In order to show how the example code works, the following sample data is used:

VBA 16 PIC 01

Remove Duplicate Rows

This code will remove all duplicate rows based only on values in column A:

Sub RemoveDupsEx1()
Range(“A1:C8”).RemoveDuplicates Columns:=1, Header:=xlYes
End Sub

Notice that we explicitly defined the Range “A1:C8”. Instead you can used the UsedRange. The UsedRange will determine the last used row and column of your data and apply RemoveDuplicates to that entire range:

Sub RemoveDups_UsedRange()
ActiveSheet.UsedRange.RemoveDuplicates Columns:=1, Header:=xlYes
End Sub

UsedRange is incredibly useful, removing the need for you to explicitly define the range.

After running these code, your worksheet will now look like this:

VBA 16 PIC 02

Notice that because only column A (column 1) was specified, the ‘Apples’ duplicate formerly in row 5 has been removed. However, the Quantity (column 2) is different.

To remove duplicates, comparing multiple columns, we can specify those columns using an Array method.

Remove Duplicates Comparing Multiple Columns

Sub RemoveDups_MultColumns()
ActiveSheet.UsedRange.RemoveDuplicates Columns:=Array(1, 2) , Header:=xlYes
End Sub

The Array tells VBA to compare the data using both columns 1 and 2 (A and B).

The columns in the array do not have to be in consecutive order.

Sub SimpleExample()
ActiveSheet.UsedRange.RemoveDuplicates Columns:=Array(3, 1) , Header:=xlYes
End Sub

In this example, columns 1 and 3 are used for the duplicate comparison.

This code example uses all three columns to check for duplicates:

Sub SimpleExample()
ActiveSheet.UsedRange.RemoveDuplicates Columns:=Array(1, 2, 3) , Header:=xlYes
End Sub

Removing Duplicate Rows from a Table

The RemoveDuplicates can also be applied to an Excel table in exactly the same way. However, the syntax is slightly different.

Sub SimpleExample()
ActiveSheet.ListObjects("Table1").DataBodyRange.RemoveDuplicates Columns:=Array(1, 3), _
Header:=xlYes
End Sub

This will remove the duplicates in the table based on columns 1 and 3 (A and C).  However, it does not tidy up the color formatting of the table, and you will see colored blank rows left behind at the bottom of the table.

VBA Coding Made Easy

Stop searching for VBA code online. Learn more about AutoMacro — A VBA Code Builder that allows beginners to code procedures from scratch with minimal coding knowledge and with many time-saving features for all users!

automacro

Learn More

Remove Duplicates From Arrays

If you need to remove duplicate values from an array, of course you can output your array into Excel, use the RemoveDuplicates method, and re-import the array.

However, we also wrote a VBA procedure to remove duplicates from an array.

Removing Duplicates from Rows of Data Using VBA

The RemoveDuplicates method only works on columns of data, but with some ‘out of the box’ thinking, you can create a VBA procedure to deal with rows of data.

Suppose that your data looks like this on your worksheet:

VBA 16 PIC 03

You have the same duplicates as before in columns B and E, but you cannot remove them using the RemoveDuplicates method.

The answer is to use VBA to create an additional worksheet, copy the data into it transposing it into columns, remove the duplicates, and then copy it back transposing it back into rows.

Sub DuplicatesInRows()
    'Turn off screen updating and alerts – we want the code to run smoothly without the user seeing
    ‘what is going on
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    'Add a new worksheet
    Sheets.Add After:=ActiveSheet
    'Call the new worksheet 'CopySheet'
    ActiveSheet.Name = "CopySheet"
    'Copy the data from the original worksheet
    Sheets("DataInRows").UsedRange.Copy
    'Activate the new sheet that has been created
    Sheets("CopySheet").Activate
    'Paste transpose the data so that it is now in columns
    ActiveSheet.Range("A1").PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=True
   'Remove the duplicates for columns 1 and 3
    ActiveSheet.UsedRange.RemoveDuplicates Columns:=Array(1, 3), Header _
        :=xlYes
    'Clear the data in the original worksheet
    Sheets("DataInRows").UsedRange.ClearContents
    'Copy the columns of data from the new worksheet created
   Sheets("Copysheet").UsedRange.Copy
   'Activate the original sheet
    Sheets("DataInRows").Activate
    
   'Paste transpose the non-duplicate data
    ActiveSheet.Range("A1").PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=True
    'Delete the copy sheet - no longer needed
    Sheets("Copysheet").Delete
    'Activate the original sheet
    Sheets("DataInRows").Activate
    'Turn back on screen updating and alerts
    Application.ScreenUpdating = True
    Application.DisplayAlerts = True
End Sub

This code assumes that the original data in rows is held on a worksheet called ‘DataInRows’

After running the code, your worksheet will look like this:

VBA 16 PIC 04

The ‘Apples’ duplicate in column E has now been removed. The user is back in a clean position, with no extraneous worksheets hanging around, and the whole process has been done smoothly with no screen flickering or warning messages.

Удаление повторяющихся значений (дубликатов) в диапазоне ячеек с помощью кода 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.

Удалить строку, если дубликат

AleX_Leon

Дата: Воскресенье, 01.02.2015, 19:21 |
Сообщение № 1

Группа: Пользователи

Ранг: Новичок

Сообщений: 21


Репутация:

4

±

Замечаний:
0% ±


Excel 2016

Всем привет. Нужен макрос, позволяющий удалить строку, если дубликат в диапазоне(например А1).
Спасибо заранее
Пример вложил


i love www.excelworld.ru

Сообщение отредактировал AleX_LeonВоскресенье, 01.02.2015, 19:32

 

Ответить

AleX_Leon

Дата: Воскресенье, 01.02.2015, 19:34 |
Сообщение № 2

Группа: Пользователи

Ранг: Новичок

Сообщений: 21


Репутация:

4

±

Замечаний:
0% ±


Excel 2016

ОЙ, все уже нашел))
[vba]

Код

Sub RemoveDuplicates()
‘пример удаления повторяющихся записей
      Cells.Sort Key1:=Range(«A1»)
      totalrows = ActiveSheet.UsedRange.Rows.Count
      For Row = totalrows To 2 Step -1
          If Cells(Row, 1).Value = Cells(Row — 1, 1).Value Then
              Rows(Row).Delete
          End If
      Next Row
End Sub

[/vba]
исходник


i love www.excelworld.ru

Сообщение отредактировал AleX_LeonВоскресенье, 01.02.2015, 19:37

 

Ответить

krosav4ig

Дата: Воскресенье, 01.02.2015, 22:58 |
Сообщение № 3

Группа: Друзья

Ранг: Старожил

Сообщений: 2346


Репутация:

989

±

Замечаний:
0% ±


Excel 2007,2010,2013

ну и зачем эти танцы с бубном, если можно просто[vba]

Код

Sub RemoveDuplicates()
     Intersect(ActiveSheet.UsedRange, [A:B]).RemoveDuplicates Array(1, 2), 2
end sub

[/vba]


email:krosav4ig26@gmail.com WMR R207627035142 WMZ Z821145374535 ЯД 410012026478460

 

Ответить

В этом руководстве будет показано, как удалить дубликаты с помощью метода 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 vba удалить ячейку со сдвигом вверх
  • Excel vba удалить строку со сдвигом вверх
  • Excel vba удалить строку если ячейка пустая
  • Excel vba удалить строку если в ячейке
  • Excel vba удалить строки умной таблицы