Дубли в таблице EXCEL

Программирование на Visual Basic for Applications
lina
Начинающий
Начинающий
 
Сообщения: 14
Зарегистрирован: 11.06.2004 (Пт) 13:10

Дубли в таблице EXCEL

Сообщение lina » 16.08.2007 (Чт) 10:45

Имеется огромного количества строк таблица в EXCEL, сравниваем значение в ячейках определенного поля, при этом, если значение в таблице встречается один раз, то удаляем эту строку, если 2 или больше раз, то оставляем, как сделать это с помощию кода на VBA.

Genyaa
Обычный пользователь
Обычный пользователь
 
Сообщения: 59
Зарегистрирован: 17.10.2006 (Вт) 13:46

Сообщение Genyaa » 16.08.2007 (Чт) 11:41

Обязательно именно в VBA? Может достаточно формул и автофильтра?
Всякое решение плодит новые проблемы.

gjghjc
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 659
Зарегистрирован: 13.10.2002 (Вс) 8:28
Откуда: БАЛАКЛАВА!!

Сообщение gjghjc » 16.08.2007 (Чт) 12:03

:idea:
Предлагаю такой вариант.
1. Коннект к книге Excell через ADODB.Connection
2. Поиск в "определенном поле" всех неповторяющихся значений recordset1 = (Select distinct Field1 From Table)
3. вторым рекордсетом проверяем количество повторений
recordset2 = Select count (Field1) from table where where field1 = recordset1 (i)
4 If recordset2 (i) = 1 Then Delete * From Table Where Field1 = recordset1 (i)
Вот, осталось теперь это кодом оформить по человечески :?

added
А вот тут еще один запрос подсказали... он сразу все одиночное мочит :)

Код: Выделить всё
delete  from  Table1 where Field1 in
(select  Field1 from Table1
group by Field1
having  count(Field1)=1 )
Утро добрым не бывает!

lina
Начинающий
Начинающий
 
Сообщения: 14
Зарегистрирован: 11.06.2004 (Пт) 13:10

Сообщение lina » 16.08.2007 (Чт) 12:53

как через SQL сделать я знаю, (все равно спасибо), но мне нужно через VBA :(

Genyaa
Обычный пользователь
Обычный пользователь
 
Сообщения: 59
Зарегистрирован: 17.10.2006 (Вт) 13:46

Сообщение Genyaa » 16.08.2007 (Чт) 13:31

Код: Выделить всё
Sub DelOnlyUnicalsRows()
'Удалит строки листа, в выбранной области которого значения ячеек не повторяются
'анализируемый столбец может быть выделен предварительно или выбран в диалоге
    Dim cc As Range, cr As Range, se As Range
    On Error Resume Next
    Set se = Application.InputBox("Выделите обрабатываемую область", , Selection.Address, , , , , 8)
    If Err.Number <> 0 Then Exit Sub
    For Each cc In se.Cells
        If WorksheetFunction.CountIf(se, cc.Value) <= 1 Then
            If cr Is Nothing Then
                Set cr = cc.EntireRow
            Else
                Set cr = Union(cr, cc.EntireRow)
            End If
        End If
    Next cc
    cr.Delete
End Sub
Всякое решение плодит новые проблемы.

lina
Начинающий
Начинающий
 
Сообщения: 14
Зарегистрирован: 11.06.2004 (Пт) 13:10

Сообщение lina » 16.08.2007 (Чт) 14:34

Класс, именно это и было нужно, все заработало, спасибо огромное :D


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 87

    TopList