Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1
RSS
Удалить дубликаты по незаполненному столбцу
 
Добрый день, всем!
Есть большая таблица на 35 тысяч строк. В примере выложил для примера 25 строк. Можно ли удалить повторяющиеся строки в которых пустая ячейка D?  Пустая ячейка - столбец D - название "Подходит или нет". Или в моем случае только сортировкой мучаться?
В примере выделил красным - строки, которые должны удаляться.
Спасибо.
 
Цитата
cherepushka написал:
Или в моем случае только сортировкой мучаться?
а почему мучатся? отсортировали - удалили...
 
Можно так:
Код
Sub t()
x = ActiveSheet.UsedRange.Rows.Count
For i = x To 1 Step -1
If Cells(i, 4) = "" Then Rows(i).Delete
Next
End Sub
 
Там еще 3 столбца. И если надо проверять на повторяющиеся строки (в которых пустая ячейка D), то без сортировки это сделать гораздо сложнее. Надо уходить от этого решения, т.е. сортировать.

Не проще ли построить сводную таблицу и удалить повторы таким образом?
Или через Power Query еще проще: загрузить, убрать пустые, удалить дубликаты ("Сократить строки/Удалить строки/Удалить дубликаты"). Порядок строк при этом сохраняется.
Изменено: eeigor - 11 Фев 2019 14:48:38
 
Спасибо всем.
Нашел код Hugo, с которым получилось сделать как необходимо. Но выводит и пустые ячейки столбца D
И игнорит Медь и сталь.
Изменено: cherepushka - 11 Фев 2019 13:00:24
 
А потому что ваш код не виден в окне локальных значений (конструкция With).
Сделайте так:
Set d = CreateObject("Scripting.Dictionary")
  With d
      ...
Тогда увидите, что в словарь заносятся только значения из первого столбца, и никаких материалов (медь, сталь).
Ошибка здесь: a(i, 2) & "|" & i
Но идея хорошая: использовать метод словаря Exists.
Такого же результата можно было добиться через использование объекта Collection, только там не метода Exists, и пришлось бы обрабатывать ошибку добавления дубликата.
Изменено: eeigor - 11 Фев 2019 13:31:42
 
Ламерский макрос :)
Код
Sub Макрос2()
   Range("D1").Select
   Selection.AutoFilter
   ActiveSheet.Range("$A$1:$D$25").AutoFilter Field:=4, Criteria1:="="
   Range("A3").Select
   Range(Selection, Selection.End(xlDown)).Select
   Range(Selection, Selection.End(xlToRight)).Select
   Selection.EntireRow.Delete
   Range("D1").Select
   ActiveSheet.Range("$A$1:$D$11").AutoFilter Field:=4
End Sub
Изменено: zlipse - 11 Фев 2019 14:13:38
Страницы: 1
Читают тему (гостей: 1)
Наверх